Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

  1. Не включайте больше функций, чем необходимо для конкретной страницы.
  2. Сохраняйте базовые функции отдельными (по возможности используйте подход MVC)
  3. Используйте require_once вместо include, если вы считаете, что у вас будут вложенные включения (например,страница A включает файл B, который включает файл C).Это позволит избежать повторного включения одного и того же файла.Это также остановит процесс, если файл не может быть найден;тем самым помогая вам в процессе устранения неполадок ;)
  4. Кэшируйте статические страницы как HTML, если это возможно, чтобы избежать необходимости повторного анализа, если что-то не меняется.

Другие советы

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

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

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

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

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

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

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

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

Нет, с включением все в порядке, здесь не о чем беспокоиться.

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

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

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

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

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

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

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

Самое важное, что вы можете сделать для ускорения вашего приложения, — это использовать кеш кода операции, например БТР.Отличный список и описание доступны на Википедия.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top