Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: количество строк кода и скорость выполнения скрипта
 
 автор: skinny   (02.01.2012 в 06:09)   письмо автору
 
 

Предстоит написать довольно обширное вебприложение
Одно из ключевых требований быстродействие и небольшая нагрузка при большом количестве пользователей.
Все моменты по оптимизации php скриптов я уже давно изучил.
Интересует ещё 1 вопрос, ответ на который я нигде не нашёл.
Количество строк кода и быстрота выполнения скрипта.
Как быстро интерпретатор php производит разбор скрипта и влияет ли количество строк на скорость работы и нагрузку сервера. Если влияет то как сильно и при каком примерно количестве строк это может быть принято к сведению.

  Ответить  
 
 автор: Dr Lines   (02.01.2012 в 06:20)   письмо автору
 
   для: skinny   (02.01.2012 в 06:09)
 

Вопрос сложный, но по моему, всеравно сколько строчек в коде.
Что писать весь код в одну строчку что встолбик без разницы.
Лично я не видел никогда PHP кода, написанного в одну строчку в целях оптимизации.

  Ответить  
 
 автор: Dr Lines   (02.01.2012 в 06:29)   письмо автору
 
   для: skinny   (02.01.2012 в 06:09)
 

Если требуется большая производительность, то помимо оптимизации кода стоит уделить внимание и оптимизации софта на сервере. Например использовать php-fpm. Настроить максимальное количество процессов php, кеширование вывода.

  Ответить  
 
 автор: skinny   (02.01.2012 в 10:40)   письмо автору
 
   для: Dr Lines   (02.01.2012 в 06:29)
 

я имел в виду не конкретно написание кода в строчку или в столбик а количество текста для парсинга.
Т.е. сильно будет отличаться по скорости допустим выполнение 1 и той же функции в составе скрипта со 100 строками и с 10 000 строками.
Планируется все основные функции разместить в 1 файле и вызывать ту или иную функцию в ходе выполнения отдельных скриптов. Имеет ли смысл разбивка на несколько файлов и включение нужных а не хранение всего в одном.
Ожидается не более 10 000 строк.

  Ответить  
 
 автор: Dr Lines   (02.01.2012 в 12:44)   письмо автору
 
   для: skinny   (02.01.2012 в 10:40)
 

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

  Ответить  
 
 автор: skinny   (04.01.2012 в 15:30)   письмо автору
 
   для: 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 сек.

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

  Ответить  
 
 автор: cheops   (04.01.2012 в 15:39)   письмо автору
 
   для: skinny   (04.01.2012 в 15:30)
 

Так не пойдет... код должен быть мегабайтным, причем из разных участков этого кода вы должны вызывать различные функции. Собственно, после того, как интерпретатор разобрал и провел предкомпиляцию, скорость не должна меняться и вы это показали. Скорость меняется в момент разбора. В цикле гонять простецкую функцию бесполезно. Нужны 100Кб, код, 500Кб код, 1Мб код, 2Мб код, 4Мб код и 8Мб код. Из всего этого кода нужно вызывать штук 5 простых функций без всяких циклов, так, чтобы они практически не потребляли времени. Нужно замерить первое обращение к каждому из скриптов (сразу после перезапуска сервера). А также организовать 10-50-100-200-400 одновременных обращений к скриптам (например, при помощи cron или какого-то планировщика заданий) и мерять нагрузку на систему в целом, процессор, среднее время выполнения скрипта, потребление памяти. Тогда картина будет хоть и более сложная, но зато более близкая к истине.

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

  Ответить  
 
 автор: skinny   (04.01.2012 в 15:58)   письмо автору
 
   для: cheops   (04.01.2012 в 15:39)
 

не знаю
я именно то о чём спросил то и подтвердил
как повлияет большое количество кода на общее быстродействие
выяснилось что большой объём даже неиспользуемого кода съедает много памяти
отсюда вывод: стараться так скомпоновать функции в различных файлах чтобы оптимально их использовать. Это не говорит о том что для каждой нужно создавать свой файл, просто сгруппировать их и подключать по необходимости.

  Ответить  
 
 автор: cheops   (04.01.2012 в 16:06)   письмо автору
 
   для: skinny   (04.01.2012 в 15:58)
 

Ну да все так и должно быть, интерпретатор сначала предкомпилирует PHP-код, поэтому в объем скрипта попадает все, в том числе и не используемое. Далее скорость не меняется, так как идет работа с байт-кодом и адресами функций, чтобы замедлить обращения к таблице адресов функций - нужны миллионы функций. Поэтому скорость практически не падает. Более того, скрипту все-равно выделяется ограниченный объем, скажем 8 или 32Мб. Больше он использовать не сможет. Поэтому проблемы с производительностью на серверах начинаются, когда у вас заканчивается память и её не хватает другим сервисам и они начинают использовать медленную подкачку с диска. Пока у вас есть память и это оперативная, а не буферная память - скорость у вас меняться практически не будет.

>Это не говорит о том что для каждой нужно создавать свой файл, просто сгруппировать их и
>подключать по необходимости.
Это зависит от того, где вы, если это ваш личный выделенный сервер, да, это позволит сэкономить вам память. Если вы в условиях виртуального хостинга - вы сэкономите память своему хост-провайдеру, который вам сунет на сервер еще один сайт. Лично на вас эта экономия скорее всего не отразится, провайдер ограничивает вас сверху при помощи директив php.ini - это и есть ваши потолки.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования