Ускорение работы сайта

Ускорение работы сайта

На эту тему написаны массы статей, все идут к этому по своему, кто оптимизирует код, кто настраивает кеширование, кто настраивает распределенную нагрузку.

Мы не будем переписывать прописные истины, типа сокращения длины переменных...

Сервер

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

Что нужно нашаманить с сервером? Чтобы не дублировать страницу, перенесу сюда материал из статьи "Ускорение обработки данных и уменьшение нагрузки на жесткий диск":

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

Но мы люди экономные, так что будем работать с тем что есть... Мы перенесем папку tmp в оперативную память, так как в ОЗУ идет более быстрый процесс работы с данными... Такой метод я использовал еще во времена ДОС, разве что, тогда загружал в ОЗУ полностью операционную систему и программы, с которыми работал, уже тогда, мой древний жесткий диск отдыхал, пока я писал свои первые программы =) Разве что по окончании работы нужно было данные записать обратно на жесткий диск...

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

В современных условиях, когда мощь компов позволяет и так не плохо работать, это стало не актуально... Однако...

Однако, я все же решил использовать это на веб-сервере!

Хотя, у меня и так быстрый твердотелый жесткий диск (ssd), но он всего на 3 тысячи циклов перезаписи, по статистике, если каждый день на него закачивать и удалять по 40 гигабайт, то его хватит на 5 лет, да, это не мало! Но все равно, на веб-сервере пока не идет такого большого трафика, так что тут его придется менять (теоретически) лет через 20...

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

В Linux это делается элементарно, заходим с правами root, затем открываем на редактирование файл /etc/fstab

и добавляем строку:

tmpfs  /tmp tmpfs size=900M 0 0

Данная комманда создает RAM-диск объемом 900 мегабайт в ОЗУ и монтирует его в папку /tmp

Теперь все операции которые требуют обработки в моих скриптах я переместил в /tmp, что положительно сказалось на производительности и экономии ресурсов.

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

Если ОЗУ много, то можно не экономить на размере выделяемой под RAM-диск памяти.

ок, определились где будем хранить кэш и обрабатывать данные - типа ресайз картинок.

Шаблонизатор

Вы можете использовать любой шаблонизатор, по сути его задача отделить серверное программирование от верстки. Вы можете выбрать на свой вкус любой шаблонизатор, но мне нравится Smarty, он прост, легко конфигурируется, умеет кешировать (да, это важно, ведь кешировать будем в RAM-памяти!). Беда с ним только в том, что на нем не работают готовые движки - WP, Joomla и тп, но там (говорят) есть своя система кеширования, если так - тогда надо настроить так, чтобы кеш кидался в RAM.

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

Что здесь? здесь указан параметр compile_dir - туда будут кидаться "собранные шаблоны", надо таким же сделать параметр cache_dir, чтобы кеш так же был в ОЗУ.

Контент

Да, не сомненно он будет кешироваться, но в идеале, его тоже необходимо оптимизировать. Понятное, дело, что картинки необходимо уменьшать, но разговор не о них, а о "чужом контенте" - разные баннеры, инфомеры, реклама. выводим это в отдельные html-файлы и подключаем эти файлы с помощью JQuery функцией load - в нужное место на странице - например $("#banner").load('/content/banner.html');

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

Nginx

server{
    listen 80;
    server_name www.yurecnt.ru yurecnt.ru;
location / {
    proxy_pass http://backend;
    include /etc/nginx/proxy_params;
    proxy_send_timeout 600; # время ожидания при передаче запроса
    proxy_read_timeout 600; # время ожидания при чтении ответа
    proxy_cache static_cache;
    proxy_cache_valid 5d;
    proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";

}
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|txt|rar|zip|7z)$ {
root /home/yurec/www/yurecnt.ru/;
access_log off; # не пишем логи
expires 3d; # кешируем у клиента на 3 дня
}
}

Да, да, кешируем всю статику, опять же в RAM! Плюс сжимаем в gzip:

gzip on;
gzip_disable "msie6";
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Заголовки

Чтобы Nginx нормально кешировал - добавьте в скрипт PHP (до моментов вывода на страницу) код:

header("Cache-Control: public");
header("Expires: " . date("r", time() + 86400));
где указываем, сколько кешировать. После чего сжатые в Gzip странице будут тихо-мирно лежать в кеше Nginx.

Мелочи

Сжимаем CSS и JS файлы! Чтобы они мигом проскакивали через сетевую карту - убираем из них все что можно убрать - комменты, переносы, пробелы. Можно это делать с помощью PHP-скрипта, либо с помощью онлайн-сервиса

Комментарии

Дорогие посетители моего сайта, подпишитесь на мой канал в Дзене! Это стимулирует меня писать новые и новые познавательные статьи!