Оптимизация сайта на PHP - PullRequest
       5

Оптимизация сайта на PHP

26 голосов
/ 24 ноября 2011

У меня есть сайт с высоким трафиком, и мне нужно убедиться, что мой сайт достаточно быстрый, чтобы быстро показывать свои страницы всем.

Я искал в Google много статей о скорости и оптимизации, и вот что я нашел:

  • Кэширование страницы
  • Сохранение на диск

Кэширование страницы в памяти:

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

Сохранить его на диск

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

Какой метод мне выбрать?

Ответы [ 5 ]

41 голосов
/ 24 ноября 2011

Ян и Идм правы, но вот как:

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

Вы можете использовать PHP-ускоритель, если вам нужно запустить динамический контент:

Я рекомендую использовать Альтернативный PHP Cache (APC)

Вот несколько тестов:

Какой PHP-ускоритель лучше использовать?

Ускорители PHP: APC против Zend против XCache с Zend Framework

Lighttpd - тесты ускорения PHP

Для кэширования содержимого и даже страниц вы можете использовать: Memcached или Redis .

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

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

Оба являются очень хорошим инструментом для кэширования содержимого или переменных.

Вот некоторые тесты, и вы можете выбрать, какой из них вы предпочитаете:

Redis против Memcached

Redis против Memcached

Redis VS Memcached (немного лучшая скамейка)

На Redis, Memcached, Speed, тестах и ​​в туалете

Вы также можете установить Лак , nginx или G-Wan

Лак : Varnish - это HTTP-ускоритель, предназначенный для динамичных веб-сайтов с большим содержанием. В отличие от других ускорителей HTTP, таких как Squid, который начал свою жизнь в качестве кэша на стороне клиента, или Apache, который в первую очередь является исходным сервером, Varnish с самого начала был разработан как ускоритель HTTP.

Nginx nginx (произносится как «engine-x») - это легкий, высокопроизводительный веб-сервер / обратный прокси-сервер и прокси-сервер электронной почты (IMAP / POP3), лицензированный по лицензии BSD. Он работает на Unix, Linux, BSD, Mac OS X, Solaris и Microsoft Windows.

г-тусклый G-WAN - это веб-сервер со сценариями ANSI C и хранилищем значений ключей, которые превосходят все другие решения.

Вот некоторые тесты, и вы можете выбрать, какой из них вы предпочитаете:

Обслуживание статических файлов: сравнение между Apache, Nginx, Varnish и G-WAN

Тесты производительности веб-сервера

Nginx + лак по сравнению с Nginx

Apache, Varnish, nginx и lighttpd

G-WAN против Nginx

4 голосов
/ 24 ноября 2011

У вас есть хорошая идея, которая близка к тому, что я делаю сам.Если у меня есть страница, которая на 100% статична, я сохраню ее HTML-версию и передам ее пользователю вместо того, чтобы каждый раз генерировать контент снова.Это сохраняет как запросы MySQL, так и несколько операций ввода-вывода в некоторых случаях.Каждый раз, когда я делаю некоторые изменения, мой интерфейс администрирования просто удаляет html-файл и воссоздает его.

Этот метод оказался примерно в 100 раз быстрее на моем сервере.

3 голосов
/ 24 ноября 2011

Большой вопрос производительности веб-сайта: «Вы обслуживаете статические страницы или динамические страницы?».

Статические страницы

Лучший способ ускорить статические страницы - кэшировать их за пределами вашего сайта. Если вы можете себе это позволить, обслуживайте их из CDN (Akamai, Cotendo, Level3). В этом случае трафик никогда не попадает на ваш сайт. Существует несколько способов управления кешем - от фиксированной продолжительности до стандартных директив кеша HTTP.

Даже если вы не можете обслуживать свой HTML из CDN, хранение ваших изображений, javascript и других статических ресурсов на CDN может ускорить ваш сайт - для этого вы можете использовать облачный сервис, такой как Amazon.

Если вы не можете позволить себе CDN для своего HTML, вы можете использовать свой собственный прокси-слой кэширования, как предполагает книга Зевса. У меня были хорошие результаты с Varnish. В идеале вы должны запускать свой кеширующий прокси на его собственном оборудовании, но вы можете запустить его на своих существующих серверах.

Динамические страницы

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

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

2 голосов
/ 24 ноября 2011

Вы должны сначала профилировать свой сайт.

Вместо дикой догадки нужно определить определенные узкие места, а затем решить эту определенную проблему.

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

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

1 голос
/ 24 ноября 2011

Я могу добавить:

  • Кэшируйте все, что можете

  • Минимизировать количество включений

  • Использование ускорителя

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

Кроме того, если у вас есть тяжелые вычисления, вы можете написать расширение php для них, но я не думаю, что это ваш случай

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...