Насколько важно кэширование для скорости сайта с помощью PHP? - PullRequest
2 голосов
/ 03 марта 2011

Я только что создал сайт, ориентированный на пользовательский контент .

Это делается в PHP, MySQL и AJAX в jQuery. На данный момент есть только дюжина или около того представлений, и я уже чувствую, что он немного отстает, когда переходит на новую страницу (поэтому запускает новый запрос MySQL)

Это наиболее важно для меня, чтобы попытаться оптимизировать мои запросы MySQL (с помощью подготовленных операторов), или стоит взглянуть на статические HTML-файлы CDN (Amazon S3) и кэшировать (так же, как плагин WordPress WP Super Cache), когда новый контент не был отправлен.

Какой маршрут является наиболее выгодным для меня как разработчика, т.е. где мне лучше сосредоточить свои усилия на ускорении сайта?

Ответы [ 6 ]

4 голосов
/ 03 марта 2011

Преждевременная оптимизация - корень всего зла

-Дональд Кнут

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

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

Это сделано в PHP, MySQL и JQuery AJAX, на данный момент есть только дюжина или около того заявок, и я уже чувствую, что это немного отстает, когда он переходит на новую страницу (следовательно, запускает новый запрос MySQL)

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

Как говорится ...

CDN в

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

Кэширование контента

Самый простой способ реализовать кэширование контента - это что-то вроде Varnish . В основном сидит перед вашим сайтом и повторно отображает контент, который не был обновлен. Минимально навязчивый и простой в настройке, но при этом удивительно эффективный.

База данных

Самое важное для меня - попытаться оптимизировать свои запросы MySQL (по подготовленным инструкциям)

Почему ад вы уже не используете подготовленные заявления? Если вы выполняете необработанные SQL-запросы , всегда используйте подготовленные операторы , если вы не абсолютно доверяете содержанию в запросах. Учитывая сайт на основе пользовательского контента, я не думаю, что вы можете с уверенностью сказать это. Если вы заметили, что время выполнения запросов велико, взгляните на схему базы данных, запросы, которые вы выполняете на странице, и объем вашего контента. С несколькими десятками записей вы не должны замечать никаких проблем даже с худшими запросами.

2 голосов
/ 03 марта 2011

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

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

http://getfirebug.com/

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

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

http://dev.mysql.com/doc/refman/5.0/en/explain.html

и ведение журнала драйвера MySQL (если ваш драйвер его поддерживает).

Если сайт все еще работает медленно и вы сузили его до использования базы данных, я предлагаю сначала выполнить простую оптимизацию.Кэширование данных БД, если это возможно, может принести вам неплохой результат.Одним из очень простых решений в этом направлении, особенно с учетом упомянутого выше стека, является использование Memcached:

http://memcached.org/

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

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

1 голос
/ 03 марта 2011

Есть несколько областей, которые можно оптимизировать.

  1. Сервер
  2. CSS / JS / Изображения
  3. PHP Code / Setup
  4. MySQL Code / Setup

Во-первых, я бы использовал firefox и тег yslow, чтобы оценить производительность вашего сайта, и он даст рекомендации на основе сервера.

Другое решение, которое я использовал, это аддон.

http://aciddrop.com/php-speedy/

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

2-й, я бы создал статическое доменное имя, например static.yourdomainane.com, в другой папке и переместил туда все ваши изображения, css, js. Затем укажите весь свой код в этом домене, а затем настройте параметры веб-сервера для кэширования всех этих файлов.

3-ий, я бы посмотрел статьи / методы, подобные этой, http://www.catswhocode.com/blog/3-ways-to-compress-css-files-using-php, чтобы помочь сжать / оптимизировать ваши статические файлы, такие как css / js.

В-четвертых, просмотрите все ваши изображения и их размеры, и убедитесь, что они полностью оптимизированы. Или преобразовать в использование CSS спрайтов.

http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/ http://css -tricks.com / CSS-спрайты /

В основном для всех ваших изображений основного сайта, переместите их в 1 спрайт css, затем измените ваш css, чтобы ссылаться на различные места на этом спрайте для отображения необходимого изображения.

В-пятых, просмотрите свои контентные страницы, какие страницы часто меняются, а какие редко меняются, а какие редко меняются, превращают их в статические html-страницы. Те, которые часто меняются, вы можете оставить как страницы php, или создать cron или запланированную задачу с помощью командной строки php для создания новых статических html-версий страницы php.

6-е, для mySQL я рекомендую включить медленный вход в систему запросов, чтобы помочь идентифицировать медленные запросы. Просмотрите структуру таблиц, убедитесь, что они оптимальны, и имейте таблицы, которые хорошо спроектированы. Используйте представления и хранимые процедуры, чтобы перенести сложную логику SQL или функционирование с php на mySQL.

Я знаю, что это много, но я надеюсь, что это полезно.

1 голос
/ 03 марта 2011

Для меня - оптимизация БД стоит на первом месте - потому что любое кэширование может привести к тому, что, когда вы обнаружите какую-то проблему, вам нужно перестроить весь кеш

0 голосов
/ 03 марта 2011

Самое важное для меня - попытаться оптимизировать свои запросы MySQL (по подготовленным инструкциям)

Конечно.
Но подготовленные заявления не имеют ничего общего с оптимизацией.

Почти 99% сайтов работают без кеша. Так что я не думаю, что тебе это действительно нужно.
Если ваш сайт работает медленно, вы должны сначала профиль , а затем оптимизировать определенное место , которое оказалось узким местом.

0 голосов
/ 03 марта 2011

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

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

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

...