36 советов. Как писать быстрые PHP скрипты - Visavi.net https://visavi.net/ RSS - Visavi.net https://visavi.net/assets/img/images/logo_small.png RSS - Visavi.net https://visavi.net/ [email protected] (admin) [email protected] (admin) Sun, 22 Dec 2024 23:13:14 +0300 <blockquote class="blockquote"><strong>Azzido</strong> (12 Июля 2010 / 21:44)<br> В статьи это лучше добавь, да и не согласен, что не уделяется внимание оптимизации... Кстати, вот за эту мысль<br> if (!isset($password{8})) { <br> echo &#039;Your password is too short.&#039;; <br> }<br> спасибо, хорошая идея, не приходило в голову что можно длину не измерять, но кстати тут оговорочка, для текста, где используется например utf-8 и длина измеряется mb_strlen например, такое проблемно сделать, так что наверно это отпадает.<br> И кстати, mod_gzip не определяет поддерживает ли браузер сжатие, так что лучше это с помощбю ob_gzhandler делать</blockquote> ну статьи,так статьи <img src="https://visavi.net/uploads/stickers/smile.gif" alt="smile"> https://visavi.net/topics/11490/203030 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:47:54 +0400 Сообщения https://visavi.net/topics/11490/203030 <span style="font-size:large">хех, вроди все))))) </span><img src="https://visavi.net/uploads/stickers/krut.gif" alt="krut"> https://visavi.net/topics/11490/203027 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:45:01 +0400 Сообщения https://visavi.net/topics/11490/203027 В статьи это лучше добавь, да и не согласен, что не уделяется внимание оптимизации... Кстати, вот за эту мысль<br> if (!isset($password{8})) { <br> echo &#039;Your password is too short.&#039;; <br> }<br> спасибо, хорошая идея, не приходило в голову что можно длину не измерять, но кстати тут оговорочка, для текста, где используется например utf-8 и длина измеряется mb_strlen например, такое проблемно сделать, так что наверно это отпадает.<br> И кстати, mod_gzip не определяет поддерживает ли браузер сжатие, так что лучше это с помощбю ob_gzhandler делать https://visavi.net/topics/11490/203024 36 советов. Как писать быстрые PHP скрипты Azzido Mon, 12 Jul 2010 21:44:07 +0400 Сообщения https://visavi.net/topics/11490/203024 Не стоит использовать ООП там где без него можно обойтись. Создание объектов и обращение к их методам создают дополнительную нагрузку.<br> Не стоит создавать классы в качестве контейнеров для данных. Массивы прекрасно справляются с этой задачей.<br> Не создавайте слишком много методов (хотя само по себе количество методов не отражается на времени обращения к каждому отдельному методу – быстрее будет работать тот скрипт, который использует меньшее количество вызовов.<br> По возможности используйте те функции, которые уже есть в языке PHP.<br> Если в вашем коде есть функции, которые сильно нагружают систему, подумайте – может есть смысл переписать их на C и подключить как расширение?<br> Используйте профайлер во время отладки кода. Он покажет вам самые узкие места в вашей программе.<br> Установите mod_gzip. Этот модуль Апача сжимает данные на лету и может уменьшить объем передаваемых данных на 80%<br> <br> Фух, хватит на сегодня <img src="https://visavi.net/uploads/stickers/klass.gif" alt="klass"> https://visavi.net/topics/11490/203019 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:38:36 +0400 Сообщения https://visavi.net/topics/11490/203019 Не используйте функции там, где можно использовать встроенные конструкции языка PHP. Например, вместо <br> <pre class="prettyprint"> if (strlen($password) &lt; 8 ) { echo &#039;Your password is too short.&#039;; } </pre> можно написать:<br> <pre class="prettyprint"> if (!isset($password{8})) { echo &#039;Your password is too short.&#039;; } </pre> Постинкремент ($i++) намного медленнее чем преинкремент (++$i). Это связано с особенностями реализации языка PHP. Постинкремент создает одну временную переменную, в то время как постинкремент изменяет саму переменную непосредственно. Примечание: известно, что использование Zend Optimizer устраняет этот недостаток. Но, поскольку Зенд Оптимайзер установлен не на всех хостингах, лучше учесть этот момент во время создания скрипта… <img src="https://visavi.net/uploads/stickers/smile.gif" alt="smile"> https://visavi.net/topics/11490/203017 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:37:56 +0400 Сообщения https://visavi.net/topics/11490/203017 Если в строке не используются имена переменных, то лучше использовать одинарные кавычки, чем двойные (не тратится время на поиск переменных в строке).<br> При выводе нескольких строк при помощи echo лучше перечислить их через запятую чем использовать конкатенацию.<br> Веб-серверу Apache потребуется как минимум в два раза больше времени чтобы отдать по запросу скрипт php, чем статичную страницу html.<br> PHP скрипты заново компилируются при каждом обращении к ним. Установите какое-нибудь кеширующее расширение на сервер (например, eAccelerator) – обычно это увеличивает производительность в 1-10 раз.<br> Включайте кеширование везде где это возможно. Используйте такие программы как memcached – высокопроизводительная система кеширования, предназначенная для увеличения производительности динамических веб-приложений, которое достигается за счет снижения нагрузки на базу данных.<br> Если нужно определить длину строки – используйте strlen(). Эта функция работает очень быстро потому что на самом деле она не выполняет подсчет символов. Она берет уже готовый результат из структуры zval (внутрення C-структура, которая используется для хранения переменных в PHP). https://visavi.net/topics/11490/203016 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:36:51 +0400 Сообщения https://visavi.net/topics/11490/203016 Инкремент (i++) для локальной переменной выполнится в два раза быстрее чем для глобальной.<br> Инкремент для свойства объекта ($this-&gt;property++) выполняется в три раза медленнее чем для простой локальной переменной.<br> Инкремент для неинициализированной переменной будет выполняться в 9-10 раз дольше чем для инициализированной.<br> Одно только объявление глобальной переменной, которая в дальнейшем не используется, также замедляет работу (отнимает приблизительно столько же времени сколько и инкремент локальной переменной.<br> Методы из классов-потомков вызываются быстрее чем из классов-предков. (Мораль – не создавайте без нужды громоздкую иерархию классов.)<br> Вызов одной функции с передачей одного аргумента (тело функции пустое) занимает столько же времени сколько и 7-8 инкрементов для локальной переменной. Вызов такого же метода отнимет время равное 15 инкрементам. https://visavi.net/topics/11490/203015 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:36:15 +0400 Сообщения https://visavi.net/topics/11490/203015 switch() работает быстрее чем конструкции вида <br> <pre class="prettyprint"> if(...) {...} elseif (...) {...} elseif (...) ... </pre> Подключите модуль апача – mod_deflate.<br> Закрывайте неиспользуемые соединения с базой данных.<br> Ошибки, которые возникают при работе скрипта, тоже замедляют работу. Старайтесь их избегать <br> Не используйте функции при определении цикла. Пример: <br> <pre class="prettyprint"> for ($i=0; $i &lt; count($longlongarray); $i) </pre> Функция count() будет вызываться при каждой итерации массива. https://visavi.net/topics/11490/203013 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:35:28 +0400 Сообщения https://visavi.net/topics/11490/203013 Избегайте “магических” методов (__get, __set и пр.)<br> В вызовах include и require лучше использовать полный путь к скрипту.<br> Если вы хотите измерить время работы скрипта, то лучше использовать $_SERVER[’REQUEST_TIME’] чем time()<br> Заменяйте regex() на strncasecmp, strpbrk и stripos.<br> Если функция принимает аргументы как в виде массива, так и отдельные переменные, то быстрее будет вызывать ее несколько раз, чем передавать сразу все значения в виде массива. https://visavi.net/topics/11490/203011 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:34:35 +0400 Сообщения https://visavi.net/topics/11490/203011 По возможности объявляйте методы как статические. Они вызываются в 4 раза быстрее.<br> echo быстрее чем print<br> Быстрее вызвать echo с несколькими аргументами – строковыми переменными – чем сначала склеивать их в одну.<br> Устанавливайте максимальное значение для счетчика цикла for вне цикла.<br> Выполняйте unset для ненужных больше переменных. Особенно это касается больших массивов. https://visavi.net/topics/11490/203008 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:33:46 +0400 Сообщения https://visavi.net/topics/11490/203008 Странно, что в русскоязычном интернете так мало внимания уделяется оптимизации быстродействия пхп-скриптов… Может быть, те кому важно быстродействие, вообще не пишут на пхп? Шутка Пожалуй, буду исправлять ситуацию… и начну с публикации этой небольшой подборки советов. Перечисленные в ней факты следует знать каждому пхп-программисту, который собирается писать скрипты хоть немного сложнее чем форма обратной связи на сайте https://visavi.net/topics/11490/203007 36 советов. Как писать быстрые PHP скрипты XoPyC Mon, 12 Jul 2010 21:33:33 +0400 Сообщения https://visavi.net/topics/11490/203007