Ускорьте сайт php - PullRequest
       21

Ускорьте сайт php

2 голосов
/ 28 ноября 2009

Каков наилучший способ (способы?) Ускорить веб-сайт php и насколько быстрее он может использовать тот или иной способ?

Ответы [ 6 ]

4 голосов
/ 28 ноября 2009

PHP на самом деле не тот язык, где вы можете выполнять микрооптимизацию или просто работать над одним кодом. Там действительно нет смысла. Хотя PHP не особенно быстр, сам PHP редко является узким местом на данном веб-сайте.

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

Первое хорошее место для поиска - на стороне клиента, а не на стороне сервера. Насколько велики ваши страницы (включая изображения, CSS, JavaScript и т. П.)? Сколько HTTP-запросов требуется для просмотра одной страницы? Используйте что-то вроде Firebug (и надстройку YSlow для Firebug), чтобы увидеть, сколько времени фактически занимает загрузка вашей страницы и какие биты вашей страницы вызывают проблему. Некоторые общие советы:

  • Разработайте способы сокращения CSS и JavaScript - удалите все, что вам не нужно, и запустите все остальное с помощью такого инструмента, как YUI Compressor.
  • Если у вас есть несколько файлов CSS и JavaScript, попробуйте объединить их в один файл.
  • Оптимизируйте все свои изображения, насколько это возможно, и посмотрите, сможете ли вы объединить любое из них в один файл, используя спрайты CSS или аналогичные. PunyPNG хорош для изображений без потерь. Приличный кодер JPEG (НЕ Photoshop) хорош для фотографий.
  • Переместите CSS в верхнюю часть страницы, а JavaScript - в нижнюю, чтобы браузер мог отобразить страницу до завершения загрузки JavaScript.
  • Убедитесь, что все ваши CSS, JavaScript и HTML обслуживаются в сжатом виде.
  • Убедитесь, что вы используете соответствующее кэширование - если файл не изменился, нет смысла повторно загружать его.

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

Установите кэш кода операции, такой как APC, XCache или Zend Optimizer. Это очень легко сделать и всегда обеспечит некоторое улучшение. Как только вы это сделаете, профилируйте свои страницы, чтобы узнать, где на самом деле тратится время.

Скорее всего, вы будете тратить большую часть времени на ожидание, пока база данных выдаст результаты. Итак, как минимум:

  • Определите, какие запросы занимают больше всего времени, и работайте над ними в первую очередь. Впрочем, будьте осторожны - запрос, который занимает пять секунд на странице администратора, на который никто не смотрит, не так важен, как запрос, который занимает одну секунду на первой странице.
  • Убедитесь, что в вашем запросе используются соответствующие индексы. Ни один общий запрос не должен выполнять полное сканирование таблицы. Некоторые виды сортировки или группировки могут не использовать индексы - старайтесь избегать их или измените запрос, чтобы он мог использовать индексы.
  • Убедитесь, что ваши запросы не используют временные таблицы.
  • Используйте ключевое слово EXPLAIN - это очень полезно.
  • Настройте сам сервер базы данных. MySQL, как правило, не оптимизирован для производительности.

Как только вы это сделаете, обычно лучше начать понимать, как использовать кэширование. Лучший способ ускорить работу PHP-кода - это сократить объем выполняемой им работы.

  • Убедитесь, что кеш запросов вашей базы данных работает правильно.
  • Используйте что-то вроде Memcached для хранения часто используемых результатов вместо того, чтобы получать их из базы данных.
  • Если у вас достаточно памяти, попробуйте сохранить все в Memcached, прибегая к базе данных, только когда чего-то нет в кэше.
  • Если у вас есть фрагменты страниц, которые являются динамическими, но одинаковыми для всех пользователей, попробуйте кэшировать эти фрагменты. Например, если два пользователя просматривают статью, сама статья будет одинаковой для каждого пользователя, даже если остальная часть страницы - нет. Сгенерируйте HTML-код статьи и поместите его в кеш.
  • Если у вас много неаутентифицированных пользователей, вполне возможно, что все они будут видеть одну и ту же страницу. Два неаутентифицированных пользователя, просматривающие вышеупомянутую статью, не увидят просто идентичную статью - они увидят идентичную страницу, вплоть до ссылок для входа в систему. Настройте свои PHP-скрипты так, чтобы вы могли использовать заголовки кэширования HTTP (проверьте дату последнего изменения и верните 304 Не изменено, если оно не было изменено) После этого установите обратный прокси-сервер Squid перед веб-сервером и разрешите Squid обслуживать страницы из своего кэша.

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

1 голос
/ 28 ноября 2009

Размер файла.

Загрузка файла размером 500 КБ занимает больше времени, чем загрузка файла размером 300 КБ. Так что оптимизируйте и обрезайте как можно больше.

Accelators

Самостоятельно объяснимо: Список ускорителей PHP

Обновление сервера

Хотя это стоит денег, при работе с большим объемом трафика это будет влиять на скорость обработки файлов .php и скорость передачи данных пользователю. Я не рекомендую это, хотя есть и другие (бесплатные) способы улучшить скорость.

Не использовать внешние ресурсы

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

Просмотрите и улучшите свой код

Поиск ярлыков, удаление ненужного кода, удаление неиспользуемых переменных, повторное использование других и т. Д.

Есть и другие способы, но я считаю, что приведенная выше информация больше всего влияет на вашу скорость

1 голос
/ 28 ноября 2009

Общий вопрос, который я бы сказал. Попробуйте найти советы по оптимизации онлайн ...

Вовлечено несколько параметров:

  • Доступ к вводу / выводу (его часто используют - file_exists, is_file overheads)
  • Доступ к базе данных (оптимизировать запросы, использовать хранимые процедуры, проверить кэш БД)
  • Использование кэша кода операции (например, APC)
  • Сжатие на выходе
  • Обслуживание сжатых и сжатых файлов js / css (и использование поддоменов для их доставки в браузер)
  • Использование memcache для кэширования данных в памяти для более быстрого доступа

Вы можете использовать инструменты тестирования для тестирования своей среды до и после оптимизации.

Попробуйте, например, Apache Bench.

1 голос
/ 28 ноября 2009

В одну сторону: php ускорители , например APC .

Другой; читать статьи в блоге, например обзор настройки производительности .

0 голосов
/ 28 ноября 2009

Yahoo получил несколько хороших базовых советов по ускорению веб-страниц, большая часть которых очень проста в реализации. Вы также можете скачать yslow + firebug для firefox; они помогут определить возможные основные узкие места с точки зрения клиентских запросов.

Остальные советы здесь хороши, поэтому я не буду добавлять ничего другого, кроме; не пытайтесь оптимизировать какой-либо код, пока не убедитесь на 100%, что нашли узкое место. Я не могу подчеркнуть это достаточно. Не тратьте время на настройку кода или реализацию новых вещей (например, кеширование), потому что вы «чувствуете», что сделает вещи быстрее, действуйте только на реальных доказательствах (например, профилирование производительности).

0 голосов
/ 28 ноября 2009

Возможно, вам следует поискать ответы на этот вопрос, однако ...

  • APC для кэширования кода операции
  • Memcached для хранения объектов (для уменьшения количества запросов к базе данных)
  • Проверка / оптимизация медленных запросов SQL
  • Измерьте и найдите узкие места
  • Не полагайтесь на (медленные) веб-сервисы при каждой загрузке страницы и т. Д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...