|
24.07.2010, 15:20 | #1 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
Работа с DataLife Engine
1. Введение Список переменных и классов DLE которые вы можете использовать в вашем подключаемом модуле, без дополнительного объявления: $is_logged - содержит информацию, является ли посетитель авторизованным пользователем или гостем, и содержит значения true или false. $member_id - содержит массив с информацией о авторизованном пользователе, включая всю его информацию из профиля. $db - класс DLE для работы с базой данных. $tpl - класс DLE для работы с шаблонами. $cat_info - массив содержащий информацию обо всех категориях на сайте. $config - массив содержащий информацию обо всех настройках скрипта. $user_group - массив содержащий информацию о всех группах пользователей и их настройках. $category_id - содержит ID категории которую просматривает посетитель. $_TIME - содержит текущее время в UNIX формате с учетом настроек смещения в настройках скрипта. $lang - массив содержащий текст из языкового пакета. $smartphone_detected - содержит информацию о том, просматривает ли пользователь сайт со смартфона или с обычного браузера, и содержит значения true или false. $dle_module - содержит информацию о разделе сайта, который просматривает пользователь, либо информацию переменной do из URL браузера. Внимание: Ваш модуль должен только читать данные из данных переменных, внесение изменений в значения переменных повлечет сбои в работе стандартных возможностей скрипта и дальнейшей его некорректной работе. 2. Создание модулей для DLE 2.1 Разберём, для начала, создание модуля в качестве блока, который затем можно вставить в любую часть вашего шаблона. 2.2 Но если же нам мало одного блока, а хотим, к примеру, чтобы наш модуль занимал всю страницу, то поступаем след. образом: Последний раз редактировалось Праведник; 24.07.2010 в 15:45. |
3 пользователя(ей) сказали cпасибо: |
24.07.2010, 15:20 | #2 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
3. Кеширование Распределение нагрузки - весьма важная часть в работе любого веб-мастера. Со временем растёт ваш сайт, растёт, а вместе с ним растёт и нагрузка. Один из самых простых и действенных способов её снизить - кеширование результатов. В DLE есть встроенные инструменты для кеширования, но мы пойдём по длинному пути. 1 Из моих знакомых написал весьма простенький, но в тоже время действенный класс для кеширования. Сохраняем его в папке /engine/ именем cacheClass.php Разберём его применение на созданных нами ранее модулях: 3.1. Кеширование модуля, созданного в качестве блока: 3.1. Кеширование модуля, созданного в качестве страницы: Последний раз редактировалось Праведник; 24.07.2010 в 15:26. |
3 пользователя(ей) сказали cпасибо: |
24.07.2010, 15:26 | #3 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
4. Примеры (Подготовка) 1. Конфиг Под все модули будет общий и будет распологаться в папке /config/ , которая находится в директории сайта (корень). 2. Массивы будут находиться в папке /engine/modules/wow/includes/array/ Всего нами будет использовано 2 массива: массив локаций, массив персонажей и классов Содержание массива персонажей Содержание массива зон 3. Функции Функции сложим в папочку /engine/modules/wow/includes/functions/ под именем func.php 4. Класс кеширования Класс для кеширования данных мы разбирали выше. Закидываем в папку /engine/ файлик cacheClass.php Последний раз редактировалось Праведник; 27.07.2010 в 02:28. |
4 пользователя(ей) сказали cпасибо: |
24.07.2010, 15:37 | #4 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
|
24.07.2010, 15:37 | #5 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
|
24.07.2010, 15:40 | #6 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
5.5. Создаём модуль статистики на основе блока
Думаю, примеров довольно. Если что-то осталось непонятным, спрашиваем. P.S. во избежание разного рода какашек в мой адрес: материал авторский (за исключением списка из первого поста (взят с оф. сайта DLE)) Последний раз редактировалось Праведник; 26.07.2010 в 05:03. |
24.07.2010, 16:01 | #7 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
PHP код:
"SELECT count(`id`) FROM `account` как-бы так правильнее ) и дальше тоже через count PHP код:
а чем вас не устроила стандартная PHP функция date ( string $format [, int $timestamp ] ) |
24.07.2010, 16:40 | #8 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
Код:
SELECT COUNT(*) FROM account |
|
24.07.2010, 16:57 | #9 | |
Гость
Сообщений: n/a
|
Цитата:
Код:
SELECT COUNT(1) FROM account был бы смысл...экономия сотых процентов производительности в большинстве своём не стоит затрат на оптимизацию |
|
24.07.2010, 16:08 | #10 | ||
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
Цитата:
Цитата:
|
||
24.07.2010, 16:14 | #11 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Доказать быстродействие легко.
Что делает ваш запрос. Правильно он извлекает и передает список ID в скрипт на пхп который потом считает сколько записей ему вернул майскуль. а что делает запрос SELECT count(`id`) FROM `account`. Правильно он запрашивает у майскуля сколько записей и возвращает это число. Дальше сами подумайте что будет быстрее. |
24.07.2010, 16:23 | #12 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
думать можно по-разному и не всегда то, что кажется верным, таковым и является.
За пример взял таблицу с 19 тысячами записей и выбирал по 1 полю. Выборка с помощью mysql_num_rows занимает 0.0005 сек. С использованием count теже 0.0005 сек. Подсчитать кол-во строк для веб-сервера не займёт и тысячной доли секунды. Так что плюсы весьма и весьма сомнительные. |
24.07.2010, 16:31 | #13 | |
Пользователь
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
|
Цитата:
при использовании в запросе функции count() на веб-сервер придет только одна запись - количество записей в таблице. |
|
24.07.2010, 16:23 | #14 | |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Отгадайте что вернет
Цитата:
а ваш код с погрешностью работает притом нехилой UPD: SELECT SQL_NO_CACHE count(`guid`) FROM `creature`; и SELECT SQL_NO_CACHE `guid` FROM `creature`; Выполните эти 2 запроса и сравните время выполнения в томже навикате Последний раз редактировалось alien; 24.07.2010 в 16:32. |
|
24.07.2010, 16:33 | #15 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
Текущий аптайм: 0 д. 9 ч. 0 м.
значение в timestamp - 32403 PHP код:
ваш вариант, безусловно, лучший |
24.07.2010, 16:38 | #16 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
не поленился и выполнил ваши запросы.
|
24.07.2010, 16:41 | #17 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Почему некто нехочет читать дки.
date_default_timezone_set('UTC'); echo date("z(дней)-H(часов)-s(секунд)",32403); |
24.07.2010, 16:43 | #18 | ||
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
Цитата:
Цитата:
Считает-то он в любом случае всё. А выводит.. ну пускай выводит сколько хочет. Нам ведь не это главное, не правда ли? Последний раз редактировалось Праведник; 24.07.2010 в 16:48. |
||
24.07.2010, 16:41 | #19 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
LordJZ, выше результат выполнения 2х разных подходов. Быстрее?
|
24.07.2010, 16:42 | #20 | |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Цитата:
а вы не видите что пхпмай одмин дававил к запросу? |
|
24.07.2010, 16:45 | #21 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
LordJZ, согласен но тут разница в десятитысяцные )
|
24.07.2010, 16:48 | #22 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
http://img687.imageshack.us/gal.php?g=sqll.jpg
тогда выкиньте пхп май админ. |
24.07.2010, 16:50 | #23 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
alien, чего ради мне его выкидывать? Отлично зарекомендовавшее себя средство.
Не нужно переходить в крайности. И ваш бравый файловый хостинг увы не открывается. Закиньте во вложения. |
24.07.2010, 16:51 | #24 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Вот держите
|
24.07.2010, 16:56 | #25 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
Даже спрашивать не стану о столь существенной разнице выполнения между двумя вариантами (мой/ваш). Но, дабы положить конец этой бессмысленной теме, сейчас переделаю каунтом все запросы.
|
24.07.2010, 17:14 | #26 | ||
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
А вы поставьте Навикат и выполните запросы там.
Я вот поставил пхп май админ и вижу что он такую чушь делает Да и мне страшно представить сколько у вас страница грузилось если вы лимит убрали. Он же пробовал показать все ид) Цитата:
Но вот сервер ХРАНИТ у себя результат запроса. То есть все 100к строк. а представьте что у вас в секунду 50 таких запросов будет? Цитата:
Последний раз редактировалось alien; 24.07.2010 в 17:20. |
||
Пользователь сказал cпасибо: | Праведник (24.07.2010) |
24.07.2010, 17:20 | #27 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
|
24.07.2010, 17:24 | #28 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Ну вот а теперь представьте что вы сервер.
Вам говорят выдайка мне ид из таблички такойто но при этом всего 30 штук. Что сервер будет делать. Правильно он грубо говоря просто пробежит по 30 записям и вернет их. А теперь верника мне ВСЕ записи из таблици. Что будет делать сервер. Правильно он будет по всем записям бежать. А вот если мы запрашиваем. Сервер а скажи ка мне сколько у тебя там всего записей. Сервер же не дурак чтобы бежать по всем записям и считать их. Он просто(грубо говоря) возвращает число записей. |
Пользователь сказал cпасибо: | Праведник (24.07.2010) |
24.07.2010, 21:28 | #30 |
Гость
Сообщений: n/a
|
я хз почему...
непонимаю в чем собственно просак, я нашел тему от самого разработчика этих модулей....
меня беспокоит эта ошибка: 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, "игроков", "игрок", "игрока"); Последний раз редактировалось fr3ak; 24.07.2010 в 21:42. |
24.07.2010, 21:58 | #31 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
я как бы и есть разработчик этих модулей
в данной строке нет ошибок. |
24.07.2010, 22:09 | #32 |
Гость
Сообщений: n/a
|
RE:
В данной строке нет ошибок
а в целом в странице есть я все отредактировал, все работает, а мне нужна только таблица подобного рода под статистику ... Посмотри плз файл во вложении, это и есть тот самый файл php |
24.07.2010, 22:22 | #33 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
|
24.07.2010, 22:43 | #34 |
Гость
Сообщений: n/a
|
заполонил ошибками )
Код:
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 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 27 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\engine\modules\wow\short_stats.php on line 32 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\engine\modules\wow\short_stats.php on line 37 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 43 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 47 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\engine\modules\wow\short_stats.php on line 56 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 64 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 66 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 68 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\engine\modules\wow\short_stats.php on line 74 |
24.07.2010, 22:47 | #35 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
нету подключения к мускулю.
|
24.07.2010, 23:08 | #36 |
Гость
Сообщений: n/a
|
|
24.07.2010, 23:44 | #37 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
А на вашем скриншоте я вижу нули во всех полях, включая время, что так же может свидетельствовать о некорректном соединении. |
|
25.07.2010, 16:24 | #38 | |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
Просак
Цитата:
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
|
25.07.2010, 22:44 | #39 |
Гость
Сообщений: n/a
|
По поводу тестов... заинтересовали... )
Решил выяснить, какой способ быстрее подсчитывает данные. Тест проводился в php цикле. n - количество раз. Засекалось время в начале работы скрипта и в конце, после чего высчитывалось время выполнения запроса. Первый тест, выполнялся 200 раз. Код:
SELECT SQL_NO_CACHE count(`guid`) FROM `creature` Код работал 0.0197730064392с. SELECT SQL_NO_CACHE `guid` FROM `creature` Код работал 16.0518889427с. SELECT SQL_NO_CACHE count(1) FROM `creature` Код работал 0.0185179710388с. SELECT SQL_NO_CACHE count(*) FROM `creature` Код работал 0.0183970928192с. Второй тест, выполнялся 200000 раз. Код:
SELECT SQL_NO_CACHE count(`guid`) FROM `creature` Код работал 19.9426920414с. SELECT SQL_NO_CACHE count(1) FROM `creature` Код работал 19.7694129944с. SELECT SQL_NO_CACHE count(*) FROM `creature` Код работал 19.4894280434с. |
2 пользователя(ей) сказали cпасибо: | Праведник (25.07.2010) |
24.07.2010, 23:32 | #40 |
Пользователь
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
|
Последний раз редактировалось Праведник; 24.07.2010 в 23:34. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с MySQL через c++ | Hantet | Языки программирования | 54 | 10.04.2013 10:38 |
работа с базой characters извне | Energy | Флудильня | 15 | 31.08.2010 19:10 |
Работа с Mangos | Vampirenok | Корзина | 2 | 29.08.2010 05:00 |
ScriptDev2 Работа с ГО. | xmolex | Прочая документация | 9 | 04.08.2010 06:59 |