Вопросы производительности PHP?

Я строюPHP сайт, но пока единственныйPHP Я использую полдюжины или около того, включает в себя на определенных страницах. (Я, вероятно, буду использовать некоторые запросы к базе данных в конце концов.)

Простыinclude() заявления о скорости или масштабировании, в отличие от статическогоHTML? Какие вещи могут вызвать срыв сайта?

Ответы на вопрос(7)

Нах включает, ничего страшного, не о чем беспокоиться.

Возможно, вам захочется немного подправить заголовки кэширования, но если вы не получили значительных попаданий, это не должно быть проблемой. Предполагая, что это все статические данные, вы могли бы даже подумать о преобразовании всего сайта в статический HTML (самый простой способ: написать скрипт, который захватывает каждую страницу через веб-сервер и выводит ее в соответствующую структуру dir)

Большинство веб-приложений ограничены скоростью их базы данных (или какой бы ни была их внешняя память, но в 9/10 раз больше, чем «база данных»), код приложения редко вызывает беспокойство, и он не похож на вас ». делаю все, что вам нужно беспокоиться еще.

Прежде чем принимать какие-либо долгосрочные решения о том, как структурировать код для вашего сайта, я бы порекомендовал вам немного почитать оModel-View-Controller дизайн шаблона. В то время как есть другие, этот, кажется, получает большой успех в кругах веб-разработки и, безусловно, будет некоторое время. Возможно, вы захотите взглянуть на некоторые другие шаблоны проектирования, предложенные Мартином Фаулером в егоШаблоны корпоративной архитектуры приложений прежде чем принимать какие-либо окончательные решения о том, какой дизайн лучше всего соответствует вашим потребностям.

В зависимости от размера и масштаба вашего проекта, вы можете использовать готовые фреймворки для PHP, такие как Zend Framework или PHP On Trax, или вы можете решить создать собственное решение.

В частности, в отношении визуализации содержимого HTML, я настоятельно рекомендую вам использовать какую-либо форму шаблонов, чтобы отделить бизнес-логику от логики отображения. Я обнаружил, что это одно простое правило в моей разработке сэкономило мне часы работы, когда нужно было изменить одно или другое. Я использовал http://www.smarty.net/">Smarty, и я знаю, что большинство фреймворков либо имеют собственную систему шаблонов, либо предоставляют архитектуру плагинов, которая позволяет вам использовать ваши собственный предпочтительный метод. Когда вы смотрите на возможные решения, я бы порекомендовал вам найти решение, способное создавать кэшированные версии.

И наконец, если вы обеспокоены скоростью работы серверной части, я настоятельно рекомендую вам поискать способы минимизации вызовов в вашем внутреннем хранилище данных (будь то база данных или просто системные файлы). Старайтесь избегать загрузки и рендеринга слишком большого количества контента (скажем, большого отчета, хранящегося в таблице, содержащей сотни записей) одновременно. По возможности ищите способы заставить пользовательский интерфейс загружать меньшие биты данных за раз. И если вас особенно беспокоит фактическое время загрузки вашего html-контента и его CSS, Javascript или других зависимостей, я бы порекомендовал вам просмотретьэти предложения от ребят из Yahoo !.

 22 сент. 2008 г., 09:41
исправить ссылки в этом ???

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

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

 22 сент. 2008 г., 13:13
Фактически, использование кэша кода операции значительно ускоряет включение и уменьшает объем дискового ввода-вывода, поскольку код уже находится в памяти и нет необходимости обращаться к HD.

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

Включает в себя факт жизни. Не беспокойтесь о количестве, заботьтесь о том, чтобы ваш код был хорошо организован (структура папок PEAR - это прекрасно, если вы не знаете, о чем я говорю, посмотрите на структуру файлов классов Zend Framework).

Сосредоточьтесь на том, чтобы приложение было написано с достаточным количеством абстракций. Сгруппируйте все ваши вызовы БД в класс (или классы), чтобы минимизировать дублирование кода (принципы KISS и все), а когда придет время для рефакторинга и оптимизации ваших запросов, они будут расположены в центре. Также начните тестирование, чтобы предотвратить регрессию.

Как только приложение будет запущено и запущено, не спрашивайте нас, что быстрее или лучше, поскольку от каждого приложения зависит ваше узкое место. Может получиться так, что даже если у вас много включений, ваши циклы поглощают ваше время или что-то еще. использованиеXDebug а такжепрофиль вашего кода как только его и работает. Ищите сегменты кода, которые потребляют непропорционально много времени, а затем рефакторинг. Если вы слишком сосредоточитесь сейчас на снижении производительности между include и include_once, вы в конечном итоге будете гоняться за призраком, когда эти синхронные запросы curl съедают ваш завтрак.

Хотя, в то же время, лучшие предложения - это просмотреть руководство php.net и убедиться, что встроенная функция выполняет то, что вы пытаетесь сделать, используйте ее! PHP-расширения на основе C всегда будут быстрее любого PHP-кода, который вы могли бы написать, и вы будете удивлены тем, сколько из того, что вы пытаетесь сделать, уже сделано.

Но опять же, я не могу подчеркнуть это достаточно,premature optimization is BAD!!! Просто поднимите свое приложение с нуля с хорошими уровнями абстракции, профилируйте его, затем исправьте то, что на самом деле тратит ваше время, а не то, что, по вашему мнению, может съесть ваше время.

Конечно, include () медленнее, чем статические страницы. Однако с современными системами вы вряд ли будете рассматривать это как узкое место в течение длительного времени - если вообще когда-либо. На мой взгляд, преимущества использования в том, чтобы поддерживать общие части вашего сайта в актуальном состоянии, перевешивают крошечный удар по производительности (из-за разной навигации на одной странице, потому что вы забыли обновить ее, это приводит к плохому восприятию пользователя и, следовательно, к плохим чувствам к сайт / компания / все).

Использование кеширования тоже не поможет - кеширование кода будет медленнее, чем просто include (). Единственное время, которое принесет вам пользу, - это если вы выполняете вычисления с интенсивными вычислениями (очень редко, на веб-страницах) или извлекаете данные из базы данных.

Чтобы добавить то, что упоминал JayTee - загрузка функциональности, когда вам это нужно. Если вы не используете какие-либо фреймворки, которые делают это автоматически, вы можете захотеть изучить функциональность __autoload (), которая была представлена в PHP5 - в основном, ваша собственная логика может быть вызвана, когда вы создаете конкретный класс, если он & apos; не загружены Это дает вам возможность включить () файл, который определяет этот класс по требованию.

Решение Вопроса

Строго говоря, прямой HTML всегда будет работать быстрее, чем подход на стороне сервера, поскольку серверу не требуется выполнять какую-либо интерпретацию кода.

Чтобы ответить на большой вопрос, естьare ряд вещей, которые приведут к падению вашего сайта; просто нет конкретного порогового значения, когда ваш код вызывает проблему по сравнению с PHP. (имейте в виду, что многие сайты Yahoo основаны на PHP, поэтому не думайте, что PHP не может масштабироваться).

Одна вещь, которую я заметил, состоит в том, что самые медленные сайты, управляемые PHP, - это те, которые содержат больше, чем необходимо для отображения конкретной страницы. OSCommerce (oscommerce.com) - одна из самых популярных тележек для покупок на PHP. Однако он имеет дурную привычку включать все свои основные функции (на всякий случай, если это необходимо) на каждую страницу. Таким образом, даже если вам не нужно отображать «информационное окно», функция загружается. С другой стороны, существует множество PHP-фреймворков (таких как CakePHP, Symfony и CodeIgniter), которые принимают «загружают его по мере необходимости». подход.

Я бы посоветовал следующее:

Don't include more functionality than you need for a specific page Keep base functions separate (use an MVC approach when possible) Use require_once instead of include if you think you'll have nested includes (e.g. page A includes file B which includes file C). This will avoid including the same file more than once. It will also stop the process if a file can't be found; thus helping your troubleshooting process ;) Cache static pages as HTML if possible - to avoid having to reparse when things don't change
 13 июл. 2010 г., 23:42
Хотите знать, является ли "require_once" медленнее, чем «включить»; поскольку PHP должен отслеживать включенные файлы и выполнять перекрестную проверку каждый раз, когда вы вызываете «require_once».

Ваш ответ на вопрос