3. Кеширование Распределение нагрузки - весьма важная часть в работе любого веб-мастера. Со временем растёт ваш сайт, растёт, а вместе с ним растёт и нагрузка. Один из самых простых и действенных способов её снизить - кеширование результатов. В DLE есть встроенные инструменты для кеширования, но мы пойдём по длинному пути. 1 Из моих знакомых написал весьма простенький, но в тоже время действенный класс для кеширования. Сохраняем его в папке /engine/ именем cacheClass.php Разберём его применение на созданных нами ранее модулях: 3.1. Кеширование модуля, созданного в качестве блока: 3.1. Кеширование модуля, созданного в качестве страницы: |
4. Примеры (Подготовка) 1. Конфиг Под все модули будет общий и будет распологаться в папке /config/ , которая находится в директории сайта (корень). 2. Массивы будут находиться в папке /engine/modules/wow/includes/array/ Всего нами будет использовано 2 массива: массив локаций, массив персонажей и классов Содержание массива персонажей Содержание массива зон 3. Функции Функции сложим в папочку /engine/modules/wow/includes/functions/ под именем func.php 4. Класс кеширования Класс для кеширования данных мы разбирали выше. Закидываем в папку /engine/ файлик cacheClass.php |
|
|
|
PHP код:
"SELECT count(`id`) FROM `account` как-бы так правильнее ) и дальше тоже через count PHP код:
а чем вас не устроила стандартная PHP функция date ( string $format [, int $timestamp ] ) |
Цитата:
Цитата:
|
Доказать быстродействие легко.
Что делает ваш запрос. Правильно он извлекает и передает список ID в скрипт на пхп который потом считает сколько записей ему вернул майскуль. а что делает запрос SELECT count(`id`) FROM `account`. Правильно он запрашивает у майскуля сколько записей и возвращает это число. Дальше сами подумайте что будет быстрее. |
думать можно по-разному и не всегда то, что кажется верным, таковым и является.
За пример взял таблицу с 19 тысячами записей и выбирал по 1 полю. Выборка с помощью mysql_num_rows занимает 0.0005 сек. С использованием count теже 0.0005 сек. Подсчитать кол-во строк для веб-сервера не займёт и тысячной доли секунды. Так что плюсы весьма и весьма сомнительные. |
Отгадайте что вернет
Цитата:
а ваш код с погрешностью работает притом нехилой UPD: SELECT SQL_NO_CACHE count(`guid`) FROM `creature`; и SELECT SQL_NO_CACHE `guid` FROM `creature`; Выполните эти 2 запроса и сравните время выполнения в томже навикате |
Цитата:
при использовании в запросе функции count() на веб-сервер придет только одна запись - количество записей в таблице. |
Текущий аптайм: 0 д. 9 ч. 0 м.
значение в timestamp - 32403 PHP код:
ваш вариант, безусловно, лучший :) |
Вложений: 2
не поленился и выполнил ваши запросы.
|
Цитата:
Код:
SELECT COUNT(*) FROM account |
Почему некто нехочет читать дки.
date_default_timezone_set('UTC'); echo date("z(дней)-H(часов)-s(секунд)",32403); |
LordJZ, выше результат выполнения 2х разных подходов. Быстрее?
|
Цитата:
а вы не видите что пхпмай одмин дававил к запросу? |
Цитата:
Цитата:
Считает-то он в любом случае всё. А выводит.. ну пускай выводит сколько хочет. Нам ведь не это главное, не правда ли? |
LordJZ, согласен но тут разница в десятитысяцные )
|
http://img687.imageshack.us/gal.php?g=sqll.jpg
тогда выкиньте пхп май админ. |
alien, чего ради мне его выкидывать? Отлично зарекомендовавшее себя средство.
Не нужно переходить в крайности. И ваш бравый файловый хостинг увы не открывается. Закиньте во вложения. |
Вложений: 2
Вот держите
|
Даже спрашивать не стану о столь существенной разнице выполнения между двумя вариантами (мой/ваш). Но, дабы положить конец этой бессмысленной теме, сейчас переделаю каунтом все запросы.
|
Цитата:
Код:
SELECT COUNT(1) FROM account был бы смысл...экономия сотых процентов производительности в большинстве своём не стоит затрат на оптимизацию |
А вы поставьте Навикат и выполните запросы там.
Я вот поставил пхп май админ и вижу что он такую чушь делает Да и мне страшно представить сколько у вас страница грузилось если вы лимит убрали. Он же пробовал показать все ид) Цитата:
Но вот сервер ХРАНИТ у себя результат запроса. То есть все 100к строк. а представьте что у вас в секунду 50 таких запросов будет? Цитата:
|
|
Ну вот а теперь представьте что вы сервер.
Вам говорят выдайка мне ид из таблички такойто но при этом всего 30 штук. Что сервер будет делать. Правильно он грубо говоря просто пробежит по 30 записям и вернет их. А теперь верника мне ВСЕ записи из таблици. Что будет делать сервер. Правильно он будет по всем записям бежать. А вот если мы запрашиваем. Сервер а скажи ка мне сколько у тебя там всего записей. Сервер же не дурак чтобы бежать по всем записям и считать их. Он просто(грубо говоря) возвращает число записей. |
|
я хз почему...
непонимаю в чем собственно просак, я нашел тему от самого разработчика этих модулей....
меня беспокоит эта ошибка: Parse error: syntax error, unexpected T_SL in Z:\home\test1.ru\www\engine\modules\wow\short_stat s.php on line 87 А вот собственно и значение данной строки: Код:
$nCurrenOnline = $nCurrenOnline." ". number_ending($nCurrenOnline, "игроков", "игрок", "игрока"); |
я как бы и есть разработчик этих модулей :)
в данной строке нет ошибок. |
RE:
Вложений: 1
В данной строке нет ошибок
а в целом в странице есть :yes3: я все отредактировал, все работает, а мне нужна только таблица подобного рода под статистику ... Посмотри плз файл во вложении, это и есть тот самый файл php |
Вложений: 1
:yes3:
|
заполонил ошибками )
Код:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\engine\modules\wow\short_stats.php on line 21 |
нету подключения к мускулю.
|
Цитата:
да нет уж подключение есть, вот только просак в том что этот error code выводится сверху от общей страницы сайта, а в header по умолчанию уже вшивается {short_stats} http://img507.imageshack.us/img507/56/debug.jpg как раз беда в time директивах |
|
RE
Цитата:
сорри за такой банальный вопрос, просто уже весь день плюхаюсь с движками, голова не пашет %) :mda: |
Цитата:
А на вашем скриншоте я вижу нули во всех полях, включая время, что так же может свидетельствовать о некорректном соединении. |
статус блок скушал мои {info}{content}
Код:
$tpl->result['content'] = $szStatus; как добавить чтобы он выводил в результате не только статус но и после выдавал само содержимое контента страницы? при этом в Index.php указывается следующая строчка Код:
$tpl->set ( '{content}', "<div id='dle-content'>" . $tpl->result['content'] . "</div>" ); а всё, разобрался! :declare: в short_stats.php написал: Код:
$tpl->result['short_stats'] = $szStatus; Код:
$tpl->set ( '{content}', $content ); =) и получилось :) Однако проблема со временем , точнее с его отображением - еще не решена :( |
Текущее время: 16:36. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS