Ускорение сайта. Основа для нагруженных проектов


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

О ситуации, когда в нашем распоряжении не только логин и пароль от панели управления хостингом, но и доступ на сервер по ssh с правами root-пользователя.

Для ускорения отработки кода и запросов со стороны сервера существует много решений. Большинство специалистов предпочитают искать эти решения на просторах сети, меньшинство — разрабатывают собственные схемы, опираясь на знания и опыт. Однако, и в том, и в другом случае используются практически одинаковые инструменты. Разница в настройках и комбинациях. Я предлагаю сделать небольшую «серию» материалов, которая соберет если не все, то многие способы ускорения.

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

Кеширование байткода

Вы вдавались в подробности работы php-интерпретатора? В современном мире, наводненном CMS системами, которые устанавливаются в несколько кликов, а после так же в несколько кликов снабжаются шаблоном, скачанным из сети, нет необходимости задумываться о том «как это работает». А стоило бы 🙂

PHP — язык интерпритируемый, язык сценариев, скриптовой язык. Называйте как вам удобно, не вижу смысла точности определения. Зато вижу смысл в процессе отработки сценария, написанного на php. По своей сути его можно просто описать:

  1. Чтение сценария;
  2. Генерация байткода;
  3. Выполнение байткода;
  4. Получение результата.

Все просто, не так ли? Но вот в чем соль: в отличии от выполнения обычной скомпилированной программы, в выполнении сценария на php львиную долю времени забирает именно генерация байткода. Что тут можно поделать? Все просто — кешировать байткод. С этой целью на свете существуют акселераторы php, некоторые из которых я обязательно рассмотрю.

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

Кеширование сессий

Тут мы будем рассматривать только один инструмент и имя ему — memcached. Несмотря на мой подзаголовок, кешировать он умеет не только сессии, а все, что вы положите в кэш. Реализовывается поддержка memcached в коде вашего проекта. Однако, для наиболее популярных CMS имеются плагины, которые позволяют использовать memcached.

Настройка memcached для кеширования сессий

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

Вот это уж точно известно большинству. Самая распространенная связка, для кеширования статики — nginx+apache. В этом случае, nginx проксирует запросы на apache, при этом отдает статические элементы из своего кэша (это обычно js и css файлы, графика и т.д.). Увеличение скорости работы достигается за счет того, что nginx намного быстрее apache.

Тем не менее, есть и другие способы. Например, можно генерировать статический html, чтобы каждый раз не дергать php.

Сжатие статики

Тут я говорю в первую очередь о js и css. Сжатие может быть разным, но не по цвету, а по реализации. Часто используется gzip сжатие. В качестве примера чего-то необычного могу привести модуль mod_pagespeed для apache, который разработали ребята из google. Суть его в особой обработке файлов на стороне гугла и складывании их в папку с кэшем на вашем сервере. Скорость увеличивается, да. Мы используем этот модуль на некоторых из поддерживаемых проектах.

В общем, все что я хотел сказать в этом маленьком вступлении. Следите за нашим блогом. Я буду стараться как можно чаще готовить новые публикации, но все зависит от объемов работы с проектами. 🙂