Время генерации обработки PHP скрипта

O
На сайте с 29.05.2008
Offline
195
1381

Здравствуйте.

Разрабатываю систему. Пока, кеш работает только в шаблонизаторе, Nginx не установлен, PHP установлен как модуль Apache. Время генерации страницы в среднем 0.02 секунды. Но функционала реализовано далеко даже не половина от запланированного. Сейчас идет борьба ООП против производительного кода. Естественно, подключу Memcached, и все такое, но...

Интересует, какие цифры считаются адекватными для заурядной системы блога без кеша и с полным динамическим кешированием. Может кто-то может посмотреть за сколько загружаются их сайты, указать систему, или проверить на самописах с различными типами оптимизации.

Вообще, я считаю нормальным число в 0.2 секунды. Ведь если учесть время на коннект, днс ресолв, это получиться заурядных 500-800 миллисекунд на вейт бифор ренд. Как вы считаете? Какие методы оптимизации для вас самые радикальные? Обращаете ли вы на это внимание? :popcorn:

CP
На сайте с 12.08.2009
Offline
101
#1

Можете с помощью гугла проследить время загрузки, получить рекомендации, сравнить с конкурентами, вообще для блога 1 секунды загрузки страницы просто за уши)

Профессиональный frontend: JS, html,css, Single-Page App (/ru/forum/964386)
O
На сайте с 29.05.2008
Offline
195
#2

Content-pro, спасибо, я использую WinGridCache для просмотра Xdebug карты выполнения скрипта. :) А HTML оптимизировать - дык, сразу пишу такой. А вот в PHP я еще новичок. Хочется красиво, кратко, абстрактно, а получается либо медленно, либо 3 цикла в цикле))).

---------- Добавлено 08.05.2013 в 01:08 ----------

Еще такой вопрос, может кто-то задумывался. У меня классы вынесены в отдельные файлы. Соответственно при запуске главного скрипта, подключаются все нужные классы через __autoload() во время выполнения тела скрипта. На подключение затрачивается больше 1 миллисекунды! Классов у меня не мало, но даже 30 миллисекунд потерять только на подключении кода я не хочу. Как можно оптимизировать это дело? Nginx делает это? Может можно кешировать в память файлы как-то? Memcached нормальный вариант? По идеи -3мб ОЗУ единожды при первом запуске сервера, это ведь не так много. А с памяти скрипт будет браться быстрее. Насколько это безопасно?

AI
На сайте с 02.04.2013
Offline
3
#3

Если не брать в расчет highload проекты, то на страницу допустимо время генерации до 0.05c. После могут появляться визуально различимые задержки. Для простого блога время работы php не должно превышать 0.01 и еще 0.01 на работу с базой.

Еще стоит обратить внимание, что время генерации на локолке и на сервере это две разные цифры.

Не стоит винить ООП в медлительности.

Слабое место это запросы к базе данных. Их должно быть мало и они по возможности должны быть простые. Например, при работе с большими таблицами чаще выгоднее сначала из одной выбрать все нужные записи и только потом одним запросом подтянуть мета-данные из второй.

Второе слабое место - это работа с большими массивами данных. Для блога их просто не должно быть.

Dreammaker
На сайте с 20.04.2006
Offline
569
#4

ortegas, по времени загрузки, сначала сделайте, что требуется, а потом уже думайте, что оптимизировать. С большой вероятностью самое узкое место окажется не там где вы думаете, и часто можно просто закешировать вывод тем или иным способом.

Ещё раз повторюсь - сначала сделайте, ибо можно столько думать, что так и не приступить к реализации.

По вопросам загрузки классов - гляньте в сторону lazy loading, а также установите на сервере, если нет какие-то кешеры байт-кода, например, APC.

AI
На сайте с 02.04.2013
Offline
3
#5
ortegas:
Еще такой вопрос, может кто-то задумывался. У меня классы вынесены в отдельные файлы. Соответственно при запуске главного скрипта, подключаются все нужные классы через __autoload() во время выполнения тела скрипта. На подключение затрачивается больше 1 миллисекунды! Классов у меня не мало, но даже 30 миллисекунд потерять только на подключении кода я не хочу. Как можно оптимизировать это дело? Nginx делает это? Может можно кешировать в память файлы как-то? Memcached нормальный вариант? По идеи -3мб ОЗУ единожды при первом запуске сервера, это ведь не так много. А с памяти скрипт будет браться быстрее. Насколько это безопасно?

APC кеш отлично справляется с этой проблемой. А сколько у вас файлов/классов подключается?

IL
На сайте с 20.04.2007
Offline
435
#6
Dreammaker:
ortegas, по времени загрузки, сначала сделайте, что требуется, а потом уже думайте, что оптимизировать. С большой вероятностью самое узкое место окажется не там где вы думаете, и часто можно просто закешировать вывод тем или иным способом.

А-ай.. он не слышит у него ж написано - идеалист... И про преждевременную оптимизацию, и про экономию на спичках..

Я искренне надеюсь, что "всё получится".. только чем-то напоминает про того Петю, который "делал всё правильно, но долго"

ortegas:
Соответственно при запуске главного скрипта, подключаются все нужные классы через __autoload() во время выполнения тела скрипта.

Если делать "правильно", то через _autoload классы подключаются только при необходимости. А время выполнения можно уменьшить, если "слить" все классы в один файл и использовать оп кэшер (APC, XCache, eaccelerator - для верности можно самостоятельно замеры провести)... Насчёт ускорения за счёт кэширования в память - файлы кэшируются на уровне файловой системы.

- просто для померяться...

Ещё можно получить статистику с любых сайтов - в т.ч. с gov, gov.ru, с блогов на вордпресс (лучше не первых попавшихся, а более-менее известно-популярных), сравнить время открытия страниц на хабре (можно считать, что оно допустимо) и прочих сайтах.

Что ДЛЯ ВАС является допустимым - решайте сами.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
O
На сайте с 29.05.2008
Offline
195
#7
Если не брать в расчет highload проекты, то на страницу допустимо время генерации до 0.05c

Это вы наверное о кэшированной версии говорите. А здесь может и вообще статик выводиться, а потом уже в отдельном потоке всякие формальности.

Andrej_in_ua:
Еще стоит обратить внимание, что время генерации на локолке и на сервере это две разные цифры.

Именно. Под виндовском файловая система медленная, а вот на сервере, на Debian, генерация происходит в 3 раза быстрее. Поэтому, я так понял файловая система сейчас является костылем.

А сколько у вас файлов/классов подключается?

12 классов, 4 конфигурационных файла, 2 файла локализации.

Насчёт ускорения за счёт кэширования в память - файлы кэшируются на уровне файловой системы.

Ну а без дополнительных модулей это можно реализовать, то-есть, на уровне кода? Именно только кеширование файлов?

Что ДЛЯ ВАС является допустимым - решайте сами.

:) Чем быстрее, тем лучше.

Вот у меня на Windows 8, Wordpress без кэша генерирует главную страницу за 4 секунды, а под Debian, 1 секунда. Вот такое вот.

IL
На сайте с 20.04.2007
Offline
435
#8
ortegas:
Ну а без дополнительных модулей это можно реализовать, то-есть, на уровне кода?

Слить все классы в один файл, убрать лишние пробелы.. - вполне на уровне кода.. поможет ли

Насчёт помещения в память:

http://www.phphighload.com/2012/06/blog-post_13.html

ещё одно подтверждение - мерять и мерять...

p.s. можно и демона написать, который будет постоянно в памяти висеть и соединение с БД открытым держать...

O
На сайте с 29.05.2008
Offline
195
#9

На Debian работа с файлами почти в 1000 раз быстрее. Поэтому, решил провести специфическую для Windows оптимизацию файлового кеширования. Единственным вариантом для PHP 5.5 оказалось включение Zend Optimizer Cache Ext. И действительно, в пару раз выросла производительность.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий