Различные методы кэширования файлов, плюсы и минусы

В настоящее время я студент (веб-разработчик), работающий в университете, и мне были назначены несколько крупных веб-проектов. Проекты включают в себя полную реконструкцию университета, который помогает сайту, который привлекает около 14 тыс. Хитов в месяц из университетского городка и около 4 тыс. Извне. У меня также есть второй проект, который является мобильной версией первого проекта. В рамках проектов будут использоваться некоторые ресурсы.

Чтобы обобщить этот вопрос, чтобы ответы могли быть полезны для большего количества людей:

  • У меня есть два веб-сайта, которые будут делиться некоторыми ресурсами, скажем, index.php, functions.js и style.css, и эти скрипты будут использоваться почти на всех страницах на веб-сайтах.
  • У меня есть две аудитории для обслуживания (с точки зрения скорости загрузки), пользователи в той же сети, на которых размещены сайты (100 Мбит / с) и внешние пользователи.

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

Примечание. Index.php – это динамическая страница, которая должна обновляться через кеш каждые 2 часа. Было бы здорово, если вы начнете свой ответ с помощью .js, .css, .php или комбинации, чтобы я мог легко увидеть, какой тип скрипта вы говорите о кешировании.

Спасибо всем!

Настройка производительности с помощью Cachine может быть разделена на несколько слоев:

  • Клиентская сторона (JS и CSS): добавьте истечение срока действия или заголовок Cache-Control Header , чтобы сделать это за вас. Но имейте в виду, что для улучшения производительности на стороне клиента есть больше возможностей, чем кэширование. Для подробностей проверьте лучшие практики для ускорения вашего веб-сайта
  • Серверная сторона: это может быть на многих уровнях веб-сервер, язык сценариев, база данных, операционная система, сеть и т. Д.

Хорошие примеры внедрения и практического кода можно найти в главе 9 (Производительность) – Разработка крупных веб-приложений . Он будет рассказывать о кешировании заголовков CSS, Javascript, модулей, страниц, Ajax и Expire.

Если нам нужно упростить задачу на стороне сервера, выполните следующие действия:

  1. Установите расширение APC, которое сделает PHP быстрее для вас через так называемое кэширование кода операции. Никакой специальной конфигурации, она будет работать тихо для вас.
  2. Загрузите полную страницу за два часа с помощью этой простой библиотеки Pear PEAR :: Cache_Lite .
  3. Для каждой базы данных SELECT запрос кэширует результат в APC с TTL из 5 мин, md5 хеширует оператор SELECT и использует его как ключ для кеша APC. Документы

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

  1. Общее кэширование памяти между серверами. Проверьте Memecache или даже Membase
  2. Вам нужно обратное прокси-решение: это в основном слой между вашим пользователем и сервером, чтобы он обслуживал HTTP-запросы вместо вашего сервера. Вы можете использовать для этого Varnish , Squid или Apache Traffic Server .
  3. Двигатель Mysql innoDB работает медленно, вам может потребоваться ускоренный движок, такой как XtraDB
  4. Тогда, возможно, вы обнаружите, что рациональные базы данных для вас медленны. Тогда вы пойдете на решение с ключевыми значениями, такое как MongoDB .

Наконец, как ссылки в производительности веб-приложений:

  1. Front-End Performance: высокопроизводительные веб-сайты , даже более быстрые веб-сайты и высокопроизводительный JavaScript .
  2. Базовая производительность: производительность PHP-приложений и высокая производительность MySQL

Ну, кеширование – это такой широкий спектр, который вам действительно должен быть более конкретным.

Например, если вы хотите снизить нагрузку на сервер, вы захотите кэшировать файлы PHP с помощью APC (например) [снижает диски для чтения файлов] .. или использовать memcache / redis / some other in-memory хранилище ключей для снятия стресса с сервера базы данных (кэширование уровня приложения).

Если мы говорим о статических файлах, вы можете сделать несколько операций, чтобы получить скорость сети:

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

  2. Если вы используете Apache + mod_php … apache запустит php-интерпретатор даже для запросов, которые предназначены для статического контента (css, js). Хотя, если вы поместите nginx раньше, это может быть кеш с помощью самого HTTP-сервера – намного быстрее, в качестве альтернативы перейдите к шагу 3 (ниже)

  3. Вы можете поместить Varnish infront на все ваши (/ оба) веб-сайты для статического контента / полустатического контента.

Еще одна распространенная «микро» -оптимизация … это обычно влияет на более крупные сайты. Ничто из того, что я беспокоился бы с вашим ~ 20K .., но если вы хотите, переместите статические файлы в другой домен, например, какой-то университетский-статический. com (а не субдомен). Таким образом, заголовки файлов cookie не отправляются с запросом статического файла, что приводит к меньшей пропускной способности и быстрой реакции для пользователя. (меньший запрос отправлен – быстро он добирается до места назначения – быстрее он возвращается)

Домой это дало вам некоторые начальные указатели, на которые нужно было смотреть.

Кен.

Для файлов .js и .css вы можете просто использовать expires HTTP-заголовки, что приведет к их кешированию.

Что касается .php, существует несколько вариантов.

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

Или вы можете использовать обратный прокси-сервер, такой как лак, для кэширования всей статической html-страницы, созданной из скрипта .php