|
|
|
| Предстоит написать довольно обширное вебприложение
Одно из ключевых требований быстродействие и небольшая нагрузка при большом количестве пользователей.
Все моменты по оптимизации php скриптов я уже давно изучил.
Интересует ещё 1 вопрос, ответ на который я нигде не нашёл.
Количество строк кода и быстрота выполнения скрипта.
Как быстро интерпретатор php производит разбор скрипта и влияет ли количество строк на скорость работы и нагрузку сервера. Если влияет то как сильно и при каком примерно количестве строк это может быть принято к сведению. | |
|
|
|
|
|
|
|
для: skinny
(02.01.2012 в 06:09)
| | Вопрос сложный, но по моему, всеравно сколько строчек в коде.
Что писать весь код в одну строчку что встолбик без разницы.
Лично я не видел никогда PHP кода, написанного в одну строчку в целях оптимизации. | |
|
|
|
|
|
|
|
для: skinny
(02.01.2012 в 06:09)
| | Если требуется большая производительность, то помимо оптимизации кода стоит уделить внимание и оптимизации софта на сервере. Например использовать php-fpm. Настроить максимальное количество процессов php, кеширование вывода. | |
|
|
|
|
|
|
|
для: Dr Lines
(02.01.2012 в 06:29)
| | я имел в виду не конкретно написание кода в строчку или в столбик а количество текста для парсинга.
Т.е. сильно будет отличаться по скорости допустим выполнение 1 и той же функции в составе скрипта со 100 строками и с 10 000 строками.
Планируется все основные функции разместить в 1 файле и вызывать ту или иную функцию в ходе выполнения отдельных скриптов. Имеет ли смысл разбивка на несколько файлов и включение нужных а не хранение всего в одном.
Ожидается не более 10 000 строк. | |
|
|
|
|
|
|
|
для: skinny
(02.01.2012 в 10:40)
| | Безусловно, чем меньше кода придется обработать php интерпретатору, тем меньше времени на это уйдет, это же очевидно.
И да, конечно не стоит писать в одном файле все функции. В идеале, при загрузке страницы должен обрабатываться только тот php код, который необходим для вывода данных на странице. Обычно функционал сайта разделяют по отдельным модулям, и пишут их в отдельных файлах.
Модуль личного кабинета
Модуль работы с комментариями
Модуль работы с файлами
Модуль вывода новостей
и т.д. | |
|
|
|
|
|
|
|
для: skinny
(02.01.2012 в 06:09)
| | В общем не поленился я и провёл тестирование
вот что выяснилось
При большом количестве кода - время на его выполнение не увеличивается, а увеличивается только объём используемой памяти.
Вот как я провёл текст:
Был написан простой скрипт в котором были только функции измерения времени выполнения скрипта и памяти, плюс просто функция вывода текста - echo 'test';
Также он соединялся с базой но это не важно.
В общем в чистом виде небольшой скрипт потреблял
88 кбайт памяти и выполнялся за: 0.000150-0.000500 сек.
после включения функцией include в него ещё одного скрипта
размером 18 строк (файл содержал просто функцию, которая не выполнялась) (728 байт)
скрипт потреблял
94 кбайт памяти и выполнялся за 0.000150 - 0.000500 сек.
после включения функцией include в него ещё одного скрипта
размером 7300 строк (файл содержал просто набор функций, которые не выполнялись) (321 КБ)
скрипт потреблял
1 850 кбайт памяти и выполнялся за 0.000150 - 0.000550 сек.
в этом большом файле были самые различные функции и работа с базой и с изображениями и всякие циклы и обходы, но ещё раз повторюсь это просто набор функций - не одна из них не выполнялась. | |
|
|
|
|
|
|
|
для: skinny
(04.01.2012 в 15:30)
| | Так не пойдет... код должен быть мегабайтным, причем из разных участков этого кода вы должны вызывать различные функции. Собственно, после того, как интерпретатор разобрал и провел предкомпиляцию, скорость не должна меняться и вы это показали. Скорость меняется в момент разбора. В цикле гонять простецкую функцию бесполезно. Нужны 100Кб, код, 500Кб код, 1Мб код, 2Мб код, 4Мб код и 8Мб код. Из всего этого кода нужно вызывать штук 5 простых функций без всяких циклов, так, чтобы они практически не потребляли времени. Нужно замерить первое обращение к каждому из скриптов (сразу после перезапуска сервера). А также организовать 10-50-100-200-400 одновременных обращений к скриптам (например, при помощи cron или какого-то планировщика заданий) и мерять нагрузку на систему в целом, процессор, среднее время выполнения скрипта, потребление памяти. Тогда картина будет хоть и более сложная, но зато более близкая к истине.
Пока вы просто измерили одно и то же и получили одно и тоже. Нужный параметр не был нагружен, в цикле вращался другой параметр, который в этих условиях не мог изменяться. | |
|
|
|
|
|
|
|
для: cheops
(04.01.2012 в 15:39)
| | не знаю
я именно то о чём спросил то и подтвердил
как повлияет большое количество кода на общее быстродействие
выяснилось что большой объём даже неиспользуемого кода съедает много памяти
отсюда вывод: стараться так скомпоновать функции в различных файлах чтобы оптимально их использовать. Это не говорит о том что для каждой нужно создавать свой файл, просто сгруппировать их и подключать по необходимости. | |
|
|
|
|
|
|
|
для: skinny
(04.01.2012 в 15:58)
| | Ну да все так и должно быть, интерпретатор сначала предкомпилирует PHP-код, поэтому в объем скрипта попадает все, в том числе и не используемое. Далее скорость не меняется, так как идет работа с байт-кодом и адресами функций, чтобы замедлить обращения к таблице адресов функций - нужны миллионы функций. Поэтому скорость практически не падает. Более того, скрипту все-равно выделяется ограниченный объем, скажем 8 или 32Мб. Больше он использовать не сможет. Поэтому проблемы с производительностью на серверах начинаются, когда у вас заканчивается память и её не хватает другим сервисам и они начинают использовать медленную подкачку с диска. Пока у вас есть память и это оперативная, а не буферная память - скорость у вас меняться практически не будет.
>Это не говорит о том что для каждой нужно создавать свой файл, просто сгруппировать их и
>подключать по необходимости.
Это зависит от того, где вы, если это ваш личный выделенный сервер, да, это позволит сэкономить вам память. Если вы в условиях виртуального хостинга - вы сэкономите память своему хост-провайдеру, который вам сунет на сервер еще один сайт. Лично на вас эта экономия скорее всего не отразится, провайдер ограничивает вас сверху при помощи директив php.ini - это и есть ваши потолки. | |
|
|
|