Еще один способ ускорить ваш сайт, работающий на PHP — использовать расширение php-apc.
Это раширение PHP для кэширования и оптимизации промежуточного кода. Кроме того оно кэширует уже откомпилированный код. Таким образом, при повторном обращении к php-скрипту он не будет тратить время на чтение с диска, а также на компиляцию. Наш сервер работает на Debian, используя стандартный PHP и Apache, установленные из репозиториев, поэтому будем рассматривать установку расширения php-apc в этом дистрибутиве.
Установим:
aptitude install php53-apc aptitude install php-apc
Включим его в конфигурационном файле и настроим:
echo " [APC] extension=apc.so apc.enabled=1 apc.shm_segments=1 apc.shm_size=32 // -- количество памяти под кэш, в МБ. apc.ttl=7200 apc.user_ttl=7200 apc.num_files_hint=1024 apc.mmap_file_mask=/tmp/apc.XXXXXX apc.max_file_size = 200M apc.post_max_size = 200M apc.upload_max_filesize = 200M apc.enable_cli=1 apc.rfc1867=1" >> /etc/php5/apache2/php.ini
Рассмотрим основные настройки, на которые стоит обратить внимание:
- apc.enabled – использовать apc или нет.
- apc.shm_segments – количество сегментов shared memory, которые будет использовать apc. Некоторые системы имеют ограничение на максимальный размер сегмента, поэтому можно настроить apc на использование нескольких сегментов.
- apc.shm_size – размер одного сегмента shared memory, используемого apc.
- apc.ttl – сколько секунд должны отсутствовать обращения к записи кэша прежде, чем apc перезапишет ее.
- apc.user_ttl – по описанию тоже самое, что и apc.ttl. Обычно устанавливается равным apc.ttl.
- apc.stat – указывает, нужно ли apc проверять время модифицирования php-скрипта. Если установить в 0, то apc не будет проверять изменения на диске и будет выдавать кэшированную копию.
Перезапустим Apache:
service apache2 restart
Проверяем, насколько быстей стал работать наш сайт. Например, вот сравнение производительности по basicstate.com - daily uptime and performance report.
ДО
---------------------------------------------------------------------- date uptime dns connect request ttfb ttlb 2012-02-21 97.94 0.090 0.208 0.208 0.689 0.799 2012-02-20 100.00 0.042 0.159 0.159 0.612 0.719 2012-02-19 97.94 0.037 0.395 0.395 0.897 1.187 2012-02-18 97.94 0.072 0.274 0.274 1.106 1.479
ПОСЛЕ
---------------------------------------------------------------------- date uptime dns connect request ttfb ttlb 2012-03-22 100.00 0.013 0.113 0.114 0.320 0.516 2012-03-21 100.00 0.015 0.115 0.115 0.318 0.514 2012-03-20 100.00 0.012 0.112 0.112 0.315 0.511 2012-03-19 100.00 0.012 0.111 0.112 0.315 0.511
ttfb — time to first byte (время, затраченное до загрузки первого байта)
ttlb — time to last byte (время, затраченное до загрузки последнего байта)