Эта тема на forum.dklab.ru


Punisher: Ресурсопотребление скриптов
Появился такой интересный вопрос, после того, как получил данные о потреблении ресурсов CMS. Полный цикл потребляет 4.274 мб. памяти и выполняется за 1.3 секунды.

Полный цикл это:

- разбор и проверка корректности УРЛа,
- контроль прав доступа,
- проверка на наличие кэша документа (на сервере),
- установка нужного языка интерфейса (парсинг ini-файла),
- передача данных нужному модулю,
- запрос модуля к БД и получение данных (100 кб.),
- вставка этих данных в локальный (просто разметка) шаблон (т.е. парсинг шаблона),
- передача из модуля этих данных назад,
- вставка полученных данных в глобальный (общий интерфейс) шаблон, (опять парсинг шаблона),
- кэширование готового документа (на сервере),
- вывод данных пользователю.

Примерно так. Много ли 4.274 мб. памяти и 1.3 секунды времени для такого скрипта? Это при одном отдельно взятом запросе… Сколько у кого потребляет подобного рода система? И сколько должна примерно при таком раскладе потреблять?
amikhailov:
Не знаю насчет памяти, но время выполнения подобного скрипта занимает у меня примерно 0.2 секунды. Ищите "лимитирующую стадию" и разбирайтесь, как уменьшить время выполнения этой стадии.
Дмитрий Котеров:
Если у Вас 1.3 с при каждом запросе, то, пожалуй, многовато. Хотя зависит от посещаемости сайта: если там у Вас 200-300 человек в день, то эту нагрузку сервер и не заметит. Если же 1.3 с только в случае, когда кэш невалидный, а когда валидный - гораздо быстрее, то - вполне нормально.
Punisher:
Дмитрий Котеров
Да, так и есть, когда читается из кэша, то время выполнения 0.003-0.007 секунды. Спасибо за оценку! Сегодня протестировал на несколько одновременных запросов - удивительно, но объём потребляемой памяти при этом не вырос, так и остался, как был при единичном запросе.

Кстати, насчёт тестирования потребления оперативной памяти - в win я это делаю путём сравнения потребления процессом apache.exe памяти до запуска скрипта и после? Насколько это правильно? Это даёт верное представление и результаты?
Дмитрий Котеров:
Скорее всего, у Вас будет различное потребление памяти в Windows и Unix. В общем, все, что меньше 15-20 М, можно считать малым потреблением. Этот форум, например, отжирает именно столько в среднем.

Для PHP под Unix в языке имеется специальная функция, определяющая размер использованной памяти, только не помню, как она называется. Ищите в документации среди posix-функций.
SNiP:
memory_get_usage()
Punisher:
Нашёл одну из проблем, исправление которой достаточно значительно повлияло на уменьшение времени выполнения: с 1.3 сек. до 0.68 сек. при идентичных запросах и условиях.

Заменил это:
call_user_func_array(array('my_class', 'function'), array($var1, $var2));

На это:

$my_class = new my_class();
$my_class->function($var1, $var2);


Использование call_user_func_array() сначала было просто необходимо, но потом был найден более рациональный вариант.
amikhailov:
уменьшение времени выполнения: с 1.3 сек. до 0.68 сек. при идентичных запросах и условиях

Все равно многовато, по-моему...
Punisher:
amikhailov
Мне и самому так кажется. Буду дальше искать "лимитирующие стадии"!
Rin:
Punisher
Ваш скрипт выполняется долго.
Какой отклик страницы из кэша?

Познавательная статья для чтения:
"Если сайт открывается медленно": http://1gb.ru/default.aspx?ti=6&hti=93

Эта тема на forum.dklab.ru