Динамик сайтда ҳар бир ташриф одатда бир хил йўлни босиб ўтади: веб-сервер сўровни PHP'га узатади, PHP базадан маълумот олади, шаблонларни йиғади ва охирида HTML саҳифа ҳосил бўлади. Агар саҳифа мазмуни ҳар бир ташрифчи учун бир хил бўлса, бу ишни ҳар сафар қайтадан бажариш ортиқча. Тўлиқ саҳифа кеши тайёр бўлган HTML натижани сақлаб қўяди ва кейинги сўровларга тўғридан-тўғри беради. Бунда PHP ҳам, база ҳам ишламайди, шунинг учун жавоб вақти кескин қисқаради ва сервер юкламаси камаяди.
Тўлиқ саҳифа кеши бошқа кеш турларидан нимаси билан фарқ қилади
Сайтларда бир нечта кеш қатлами бўлади ва уларни адаштирмаслик керак. Браузер кеши расм, CSS ва JavaScript файлларини фойдаланувчи компьютерида сақлайди. Object cache базадан олинган алоҳида маълумот бўлакларини хотирада ушлаб туради, лекин саҳифани барибир PHP йиғади. OPcache эса PHP кодининг компиляция қилинган ҳолатини сақлайди. Тўлиқ саҳифа кеши булардан энг юқори даражада ишлайди: у бутун жавобни сақлайди ва сўров PHP'гача етиб бормайди.
Шу сабабли тўлиқ саҳифа кеши энг катта тезлик берадиган, лекин энг эҳтиёткорлик талаб қиладиган усул ҳисобланади. Нотўғри созланса, бир фойдаланувчининг шахсий маълумотлари бошқасига кўриниб қолиши ёки ўзгартирилган нарх соатлаб янгиланмаслиги мумкин.
Қайси сайтлар учун айниқса фойдали
Энг яхши натижани мазмуни кам ўзгарадиган ва ташрифчиларнинг кўпчилиги тизимга кирмайдиган сайтлар беради. Буларга корпоратив сайтлар, янгиликлар порталлари, блоглар, хизматлар каталоги ва мактаб ёки клиника сайтлари киради. Масалан, Самарқанддаги хусусий клиниканинг сайти шифокорлар рўйхати, хизматлар нархи ва манзил саҳифаларидан иборат. Бу саҳифалар ҳафтада бир-икки марта янгиланади, лекин реклама кампанияси пайтида бир кунда минглаб одам уларни очади. Кеш ёқилганда ҳар бир саҳифа бир марта йиғилади ва кейин хотирадан ёки дискдан берилади, шунинг учун тўсатдан ошган трафик ҳам серверни оғирлаштирмайди.
Янгиликлар сайтида ҳам кеш жуда самарали, чунки энг кўп ўқилаётган мақола минглаб марта бир хил кўринишда очилади. Ҳатто кеш муддати бир-икки дақиқа бўлса ҳам, машҳур саҳифада PHP чақирувлари сони бир неча баробар камаяди.
Қачон кеш фойда эмас, зарар келтиради
Ҳар бир фойдаланувчига алоҳида кўринадиган саҳифаларни кешлаш мумкин эмас. Онлайн дўкондаги сават, буюртмани расмийлаштириш, шахсий кабинет, администратор панели ва тизимга кирган фойдаланувчилар учун саҳифалар кешдан чиқарилиши шарт. Акс ҳолда бир мижознинг савати ёки исми бошқа мижозга кўриниши мумкин. Шунингдек, POST сўровлари, яъни форма юбориш ҳам кешланмаслиги керак.
Мазмуни ҳар сонияда ўзгарадиган сайтлар, масалан валюта курслари ёки жонли натижаларни кўрсатадиган саҳифалар учун кеш муддати жуда қисқа бўлиши ёки умуман ишлатилмаслиги керак. Ташрифчиларнинг кўпчилиги тизимга кириб ишлайдиган ички тизимлар, CRM ёки ўқув платформаларида тўлиқ саҳифа кеши деярли фойда бермайди. Бундай лойиҳаларда object cache ва базани оптималлаштириш самаралироқ.
Nginx'да fastcgi_cache билан созлаш
Ўз VPS'ингизда Nginx ва PHP-FPM ишлатсангиз, тўлиқ саҳифа кешини плагинсиз, веб-сервер даражасида созлаш мумкин. Аввал http блокида кеш сақланадиган жой ва калит белгиланади:
fastcgi_cache_path /var/cache/nginx/fcgi levels=1:2 keys_zone=PAGECACHE:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Кейин сайт server блокида қайси сўровлар кешланмаслиги аниқланади. Қуйидаги мисол WordPress ва WooCommerce учун одатий истисноларни кўрсатади:
set $skip_cache 0;
if ($request_method = POST) { set $skip_cache 1; }
if ($query_string != "") { set $skip_cache 1; }
if ($request_uri ~* "/wp-admin/|/wp-login.php|/cart/|/checkout/|/my-account/") { set $skip_cache 1; }
if ($http_cookie ~* "wordpress_logged_in|wp-postpass|comment_author|woocommerce_items_in_cart") { set $skip_cache 1; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_cache PAGECACHE;
fastcgi_cache_valid 200 301 10m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-Cache-Status $upstream_cache_status;
}
Кеш папкасини яратинг, конфигурацияни текширинг ва Nginx'ни қайта юкланг. Сокет йўли серверингиздаги PHP версиясига мос бўлиши керак:
sudo mkdir -p /var/cache/nginx/fcgi
sudo nginx -t
sudo systemctl reload nginx
Кеш ишлаётганини текшириш
Юқоридаги конфигурация ҳар бир жавобга X-Cache-Status сарлавҳасини қўшади. Бир саҳифани кетма-кет икки марта сўрасангиз, биринчисида MISS, иккинчисида HIT кўриниши керак:
curl -sI https://example.uz/ | grep -i x-cache-status
curl -sI https://example.uz/ | grep -i x-cache-status
Агар сават ёки кабинет саҳифаларида BYPASS чиқса, истиснолар тўғри ишлаяпти. Тизимга кирган ҳолда браузерда саҳифани очиб, бошқа браузерда меҳмон сифатида текшириш ҳам фойдали: иккинчи ойнада администратор панели сатри ёки сизнинг исмингиз кўринмаслиги керак.
Кешни янгилаш ва муддатни танлаш
Кешнинг энг нозик томони янгилаш. Контент ўзгарганда эски саҳифа қанча вақт кўриниб туриши кеш муддатига боғлиқ. Кичик муддат, масалан бир неча дақиқа, деярли ҳар доим янги маълумот беради ва машҳур саҳифаларда барибир катта ютуқ қолдиради. Узоқ муддат серверни кўпроқ енгиллаштиради, лекин пост таҳрирланганда кешни қўлда ёки автоматик тозалаш механизми керак бўлади. WordPress учун кеш плагинлари одатда пост янгиланганда тегишли саҳифаларни ўзи тозалайди. Nginx кешида эса бу вазифани махсус плагин ёки кеш папкасини тозаловчи скрипт бажаради.
Нархлар тез-тез ўзгарадиган дўконда маҳсулот саҳифалари учун муддатни қисқа қилиб, бош саҳифа ва мақолалар учун узунроқ қолдириш мумкин. Қайси саҳифа қанча яшашини контент қанчалик тез-тез янгиланишига қараб белгиланг ва ўзгаришдан кейин натижани албатта текширинг.
Shared хостингда тўлиқ саҳифа кеши
Умумий хостингда веб-сервер созламаларини ўзгартира олмайсиз, шунинг учун тўлиқ саҳифа кеши одатда CMS плагинлари орқали қилинади. Бундай плагинлар тайёр саҳифаларни дискда статик файл сифатида сақлайди ва кейинги сўровларда уларни беради. Бу ҳам сезиларли тезлик беради, айниқса ташрифчилар кўп бўлган блог ёки корпоратив сайтда. sayt.uz хостингида қайси кеш усуллари қўллаб-қувватланишини кабинетдан ёки техник ёрдам орқали аниқлашингиз мумкин. Қайси усулни танламанг, сават, кабинет ва форма саҳифаларини кешдан чиқариш қоидаси ўзгармайди.