Аппараттық және бағдарламалық қамтамасыз етуді орнату

HTML, PHP, htaccess-те беттерді кэштеуге тыйым салу. CSS және JS файлдарын кэштеуді қалай жоюға болады CSS кэштеуді өшіру

Кэш деректер базасымен, веб-серверлермен, сонымен қатар клиентте жұмыс істеу деңгейінде кез келген дерлік веб-қосымшаның жұмысында маңызды рөл атқарады.

Бұл мақалада біз клиенттік кэштеумен айналысуға тырысамыз. Атап айтқанда, браузерлер мен веб-серверлер қандай http тақырыптарын қолданатынын және олардың нені білдіретінін қарастырайық.

Бірақ алдымен анықтап алайық неге клиенттік кэштеу керек?.

Web-беттер көптеген әртүрлі элементтерден тұрады: суреттер, CSS және JS файлдары және т.б. Бұл элементтердің кейбірі сайттың бірнеше (көп) беттерінде қолданылады. Клиенттік кэштеу - браузерлердің файлдардың көшірмелерін (сервер жауаптары) оларды қайта жүктеп алмау үшін сақтау мүмкіндігі. Бұл беттерді қайта жүктеуді айтарлықтай жылдамдатуға, трафикті үнемдеуге, сонымен қатар сервердегі жүктемені азайтуға мүмкіндік береді.

Клиенттік кэштеуді басқару үшін бірнеше түрлі HTTP тақырыптары бар. Олардың әрқайсысына тоқталайық.

Клиенттік кэштеуді басқаруға арналған Http тақырыптары

Біріншіден, кез келген кэштеу болмаған кезде сервер мен шолғыш қалай әрекеттесетінін көрейік. Көрнекі түсіну үшін мен олардың арасындағы қарым-қатынас процесін мәтіндік чат түрінде елестетіп, елестетуге тырыстым. Бірнеше минутқа сервер мен браузер бір-бірімен сәйкес келетін адамдар екенін елестетіп көріңіз :)

Кэшсіз (http тақырыптарын кэштеу болмаған жағдайда)

Көріп отырғанымыздай, cat.png кескіні көрсетілген сайын браузер оны серверден қайтадан жүктеп алады. Менің ойымша, бұл баяу және тиімсіз екенін түсіндірудің қажеті жоқ.

Жауап тақырыбы соңғы рет өзгертілген және сұрау тақырыбы if-Modified-Since болып табылады.

Идея мынада: сервер браузерге беретін файлға (жауап) Соңғы өзгертілген тақырыпты қосады.

Браузер енді файлдың 2014 жылдың 1 желтоқсанында жасалғанын (немесе өзгертілгенін) біледі. Келесі жолы шолғышқа бірдей файл қажет болғанда, ол if-Modified-Since тақырыбымен сұрау жібереді.

Егер файл өзгертілмеген болса, сервер браузерге 304 (Өзгертілмеген) күйімен бос жауапты жібереді. Бұл жағдайда браузер файлдың жаңартылмағанын біледі және соңғы рет сақталған көшірмені көрсете алады.

Осылайша, Last-modified көмегімен біз жүктеуді үнемдейміз үлкен файл, серверден бос жылдам жауап алу.

Etag жауап тақырыбы және If-None-Match сұрау тақырыбы.

Etag жұмыс принципі Соңғы модификацияға өте ұқсас, бірақ одан айырмашылығы уақытпен байланысты емес. Уақыт салыстырмалы нәрсе.

Идея мынада: жасау және әрбір өзгерту кезінде сервер файлды ETag деп аталатын арнайы тегпен белгілейді, сонымен қатар браузерге беретін файлға (жауап) тақырып қосады:

ETтегі: "686897696a7c876b7e"

Енді браузер бұл файлды біледі ағымдағы нұсқасы"686897696a7c876b7e" тең ETag бар. Браузерге келесі жолы бірдей файл қажет болса, ол If-None-Match: "686897696a7c876b7e" тақырыбымен сұрау жібереді.

Сәйкестік жоқ болса: "686897696a7c876b7e"

Сервер белгілерді салыстыра алады және егер файл өзгертілмеген болса, 304 (Өзгертілмеген) күйімен шолғышқа бос жауапты жібере алады. Соңғы өзгертілген сияқты, браузер файлдың жаңартылмағанын анықтайды және кэштелген көшірмені көрсете алады.

Тақырыптың мерзімі аяқталды

Бұл тақырыптың жұмыс істеу жолы жоғарыдағы Etag және Last-modified қолданбаларынан ерекшеленеді. Expired көмегімен файлдың «жарамдылық мерзімі» («өзектілігі») анықталады. Анау. бірінші жүктеуде сервер браузерге файлды Мерзімі біткенге дейін өзгертуді жоспарламайтынын білуге ​​мүмкіндік береді:

Келесі жолы браузер «жарамдылық мерзімінің» әлі келмегенін біле тұра, серверге сұрау салуға тырыспайды және файлды кэштен көрсетеді.

Кэштің бұл түрі әсіресе мақалаларға, белгішелерге, фавикондарға, кейбір CSS және JS файлдарына және т.б. иллюстрацияларға қатысты.

Максималды жас директивасы бар кэш-басқару тақырыбы.

Кэш-басқару әдісі: максималды жас жұмысы мерзімі біткенге өте ұқсас. Файлдың «жарамдылық мерзімі» де осында анықталады, бірақ ол секундтарда орнатылады және белгілі бір уақытқа байланысты емес, бұл көп жағдайда әлдеқайда ыңғайлы.

Анықтама үшін:

  • 1 күн = 86400 секунд
  • 1 апта = 604800 секунд
  • 1 ай = 2629000 секунд
  • 1 жыл = 31536000 секунд

Мысалыға:

Cache-Control: max-age=2629000;

Cache-control тақырыбында max-age дегеннен басқа басқа да директивалар бар. Ең танымалдарын жылдам қарастырайық:

қоғамдық
Өйткені, пайдаланушының (браузердің) соңғы клиенті ғана емес, сонымен қатар әртүрлі аралық проксилер, CDN желілері және т.б. сұрауларды кэштей алады. Осылайша, жалпы директива кез келген прокси-серверге браузермен бірдей кэштеуді орындауға мүмкіндік береді.

жеке
Директивада осылай делінген берілген файл(сервер жауабы) соңғы пайдаланушыға тән және әртүрлі аралық проксилермен кэштелмеуі керек. Дегенмен, ол соңғы клиентке кэштеуге мүмкіндік береді (пайдаланушы браузері). Мысалы, бұл үшін өзекті ішкі беттерпайдаланушы профилі, сеанстағы сұраулар және т.б.

Клиент серверге әр жолы сұрау жасау керектігін көрсетуге мүмкіндік береді. Кейде жоғарыда сипатталған Etag тақырыбымен қолданылады.

дүкен жоқ
Клиентке сұраныстың көшірмесін немесе сұраудың бөліктерін ешбір жағдайда сақтамауы керектігін көрсетеді. Бұл кез келген кэштерді қайта анықтайтын ең қатаң тақырып. Ол құпия ақпаратпен жұмыс істеу үшін арнайы жасалған.

қайта тексеру қажет
Бұл директива шолғышқа мазмұнды қайта растау үшін серверге міндетті сұрау салуды ұсынады (мысалы, eTag пайдалансаңыз). Белгілі бір конфигурациядағы http кэшке ескірген мазмұнды сақтауға мүмкіндік береді. must-revalidate браузерді кез келген жағдайда серверге сұрау арқылы мазмұнның жаңалығын тексеруге міндеттейді.

прокси-қайта тексеру
Бұл must-revalidate параметрімен бірдей, бірақ тек прокси-серверлерді кэштеу үшін қолданылады.

s-макс
max-age сияқты дерлік, тек бұл директиваны пайдаланушы браузерінің өзі емес, әртүрлі прокси кэштері ғана сақтайды. Хат" с-» сөзінен шыққан сортақ» (мысалы, CDN). Бұл директива арнайы CDN және басқа делдалдық кэштерге арналған. Оны көрсету max-age директивасын және Мерзімі өткен тақырыпты қайта анықтайды. Дегенмен, егер сіз CDN желілерін құрмасаңыз, сізге s-maxage қажет болуы екіталай.

Сайтта қандай айдарлар қолданылатынын қалай көруге болады?

Таңдаулы шолғыштың отладчикінде http сұрау тақырыптары мен жауап тақырыптарын көруге болады. Міне, оның хромда қалай көрінетінінің мысалы:

Дәл осындай нәрсені кез келген өзін-өзі құрметтейтін браузерде немесе http sniffer-де көруге болады.

Apache және Nginx жүйелерінде кэштеуді орнату

Біз танымал серверлерді орнатуға арналған құжаттаманы қайталамаймыз. Сіз оны әрқашан көре аласыз және. Төменде біз конфигурация файлдарының қалай көрінетінін көрсету үшін нақты өмірден мысалдар келтіреміз.

Expires басқаруына арналған Apache конфигурациясының мысалы

Біз файлдардың әртүрлі түрлері үшін басқа «жарамдылық мерзімін» орнаттық. Суреттер үшін бір жыл, сценарийлер, стильдер, pdf файлдары және белгішелер үшін бір ай. Қалғаны үшін - 2 күн.

ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType plus 1 жыл" ExpiresByType plus 1 year" ай" ExpiresByType қолданбасы/pdf "қол жеткізу плюс 1 ай" ExpiresByType text/x-javascript "access плюс 1 ай" ExpiresByType image/x-icon "қол жеткізу плюс 1 жыл" ExpiresDefault "қол жеткізу плюс 2 күн"

Мысал Nginx конфигурациясын басқару мерзімі аяқталады

Біз файлдардың әртүрлі түрлері үшін басқа «жарамдылық мерзімін» орнаттық. Суреттер үшін бір апта, стильдер мен сценарийлер үшін бір күн.

Сервер ( #... орны ~* \.(gif|ico|jpe?g|png)(\?+)?$ ( мерзімі 1w; ) орын ~* \.(css|js)$ ( мерзімі 1d; ) #...)

Кэш-басқаруға арналған Apache конфигурациясының мысалы (ең үлкен жас және жалпы/жеке/кэш жоқ)

Тақырып жинағы кэш-басқару "max-age=2592000, public" Тақырып жинағы кэш-басқару "max-age=88000, жеке, қайта тексеру керек" Тақырып жинағы Cache-Control "жеке, дүкенсіз, кэш жоқ, қайта тексеру керек, трансформациясыз, макс-жас=0" Тақырып жинағы Прагма "кэш жоқ"

Кэш-басқару статикалық файлдары үшін Nginx конфигурациясының мысалы

сервер ( #... орны ~* \.(?:ico|css|js|gif|jpe?g|png)$ ( add_header Cache-Control "max-age=88000, public"; ) #... )

Қорытындылай келе

«Кэштеуге болатын барлық нәрсені кэштеу»веб-әзірлеуші ​​үшін жақсы ұран болып табылады. Кейде сіз конфигурацияға бірнеше сағат жұмсай аласыз және әлі де сайтыңыздың пайдаланушы тәжірибесін айтарлықтай жақсарта аласыз, сервер жүктемесін айтарлықтай азайтып, трафикті үнемдей аласыз. Ең бастысы, оны асыра алмау және ресурсыңыздың сипаттамаларын ескере отырып, бәрін дұрыс орнату.

  • htaccess кэштеу веб-беттің мазмұнын сақтайды жергілікті компьютерпайдаланушы оған кірген кезде;
  • Браузер кэшін пайдалану - Веб-шебер браузерлерге ресурстарды қалай қарау керектігін нұсқайды.

Браузер веб-бетті көрсеткенде, ол логотипті, CSS файлын және басқа ресурстарды жүктеуі керек:

Браузердің кэші браузер жүктеп алған ресурстарды «есте сақтайды». Келуші сайттың басқа бетіне өтсе, логотип, CSS файлдары және т.б. қайта жүктеп алмау керек, себебі браузер оларды әлдеқашан «есте сақтаған» (сақталған). Бұл веб-беттің қайта кіруге қарағанда бірінші рет кірген кезде жүктелуі ұзағырақ болуының себебі.

Кэштеуді пайдаланған кезде веб-бет файлдары шолғыштың кэшінде сақталады. Қайталанатын сапарларда беттер бірнеше есе жылдам жүктеледі. Ол сол ресурстарды пайдаланатын басқа беттермен де болады.

Браузерде кэштеуді қалай қосуға болады

  • Кэштеуді пайдалану үшін ресурс сұрауының тақырыптарын өзгертіңіз;
  • Кэштеу стратегияңызды оңтайландырыңыз.

Сұраныс тақырыптарын өзгерту

Көптеген адамдар үшін htaccess сайтын кэштеудің жалғыз жолы веб-сервердегі .htaccess файлына код қосу болып табылады.

.htaccess файлы сайтыңыздың көптеген маңызды параметрлерін басқарады.

.htaccess файлы арқылы шолғышты кэштеу

Төмендегі код браузерге нені кэштеу керектігін және қанша уақыт «есте сақтау» керектігін айтады. Ол .htaccess файлының жоғарғы жағына қосылуы керек:

## КЕШТЕУ МЕРЗІМІ БІТЕДІ ## ExpiresActive On ExpiresByType image/jpg "кіру 1 жыл" ExpiresByType image/jpeg "1 жылға кіру" ExpiresByType сурет/gif "кіру 1 жыл" ExpiresByType суреті/png "1 жылға кіру" ExpiresByType мәтін/c1T ай ​​"кіру" ExpiresByType сурет/gif html "1 айға қол жеткізу" ExpiresByType қолданбасы/pdf "қолжетімділік 1 ай" ExpiresByType text/x-javascript "кіру 1 ай" ExpiresByType қолданбасы/x-shockwave-flash "қолжеткізу 1 ай" ExpiresByType суреті/x-icon "кіру 1 жыл" Мерзімі аяқталадыӘдепкі "қолжетімділік 1 ай"## КЕШТЕУ МЕРЗІМІ БІТЕДІ ##

.htaccess файлын сақтап, веб-бетті жаңартыңыз.

Әр түрлі файл түрлері үшін кэш уақытын қалай орнатуға болады

Жоғарыдағы кодта уақыт аралығы орнатылған. Мысалы, 1 жыл (1 жыл) немесе 1 ай (1 ай). Олар файл түрлерімен байланысты. Жоғарыдағы кодта .jpg файлдары (суреттер) бір жыл бойы кэштелуі керек екенін айтады.

Егер сіз мұны JPG кескіндері де бір айға кэште болатындай етіп өзгерткіңіз келсе, «1 жыл» сөзін жай ғана «1 айға» ауыстырар едіңіз. Жоғарыда келтірілген htaccess кэштеу мәндері көптеген веб-беттер үшін оңтайлы болып табылады.

.htaccess үшін балама кэштеу әдісі

Жоғарыда аталған әдіс « Мерзімі бітеді«, бұл көптеген жаңадан бастаушылар үшін кэштеуге көмектеседі. Кэштеу ыңғайлы болғаннан кейін, басқа кэштеу әдісін қолдануға болады, Cache-Control, ол сізге көбірек опцияларды береді.

Expires әдісі серверіңізде жұмыс істемеуі мүмкін, бұл жағдайда Cache-Control параметрін пайдаланып көргіңіз келуі мүмкін.

Кэш-басқару

Бұл әдіс браузердің беттерін кэштеуді көбірек бақылауға мүмкіндік береді, бірақ көптеген адамдар барлық параметрлерді бір рет жазуды жеңілдетеді.

.htaccess файлындағы пайдалану мысалы:

#1 ай көпшілігі үшінстатикалық активтер Тақырып жинағы кэш-басқару "max-age=2592000, public"

Жоғарыдағы код файл түріне байланысты Cache-Control тақырыбын орнатады.

Кэшті басқару қалай жұмыс істейді

htaccess ішіндегі шолғышты кэштеу кодының жоғарыдағы жолын қарастырыңыз:

Көптеген статикалық активтер үшін №1 ай

Бұл жол жай ғана ескерту. .htaccess файлы # әрпінен басталатын жолдарды елемейді. Бұл ескертпе ұсынылады, себебі сізде бірнеше болуы мүмкін әртүрлі жиынтықтарфайлдарды кэштеу шешімі ретінде деректер:

Жоғарыда айтылған жолда « егер файл осы түрлердің бірі болса, біз онымен бірдеңе жасаймыз...»

Бұл жолдағы ең маңызды нәрсе - оның тізімі әртүрлі түрлеріфайлдар ( css, JS, JPEG, PNGжәне т.б. ) және кэштеу нұсқаулары осы файл түрлеріне қолданылуы керек. Мысалы, JPG файлдарының белгілі бір уақыт аралығында кэштелуін қаламасаңыз, жоюға болады " JPG«. Егер сіз HTML қосқыңыз келсе , онда осы жолда көрсетуіңіз керек » HTML«:

Тақырып жинағы кэш-басқару "max-age=2592000, public"

Жоғарыда аталған жолда нақты тақырыптар мен мәндер орнатылған:

  • Бөлім" Тақырып жинағы Cache-Control» - тақырыпты белгілейді;
  • Айнымалы» максималды жас = 2592000' - кэштеу процесінің қанша уақытқа созылатынын көрсетеді (секундтармен). Бұл жағдайда біз бір айға кэштеудеміз (2592000 ) секунд;
  • Бөлім" қоғамдық' жалпыға ортақ екенін көрсетеді.

Бұл htaccess арқылы кэштеу сызығы мәлімдемені жабады және код блогын аяқтайды.

Жалпы кэштеу мәселесі

Бір жыл немесе одан да көп кэште сақталатын кескіндерді тізімдейтін болсаңыз, беттеріңізге өзгертулер енгізсеңіз, олар барлық пайдаланушыларға көрінбеуі мүмкін екенін есте сақтаңыз. Өйткені пайдаланушылар бар файлдарға емес, кэштелген файлдарға сілтеме жасайды. Мерзімді түрде өңдейтін файл болса ( мысалы - CSS файлы), URL саусақ ізін пайдалану арқылы кэш мәселесін жеңуге болады.

URL саусақ ізі

Жаңа (кэштелмеген) файл ресурсын алу бірегей атау болған жағдайда мүмкін болады. Мысалы, CSS файлы "main.css" деп аталса, оның орнына "main_1.css" деп атауға болады. Келесі жолы оның атын өзгерткен кезде файлды "main_2.css" деп атауға болады. Бұл кезеңді түрде өзгеретін файлдар үшін пайдалы.

HTML5 тіпті интернет қосылымынсыз жұмыс істейтін веб-қосымшаларды жасауға мүмкіндік берді.

Жақсартылған бет кэштеу

Назар аударыңыз: IE10+, Chrome, Firefox, Opera және Safari бұл технологияны қолдайды.

HTML5 браузерді кэштеу мүмкіндіктерін кеңейтеді. Енді веб-беттерге тіпті интернет қосылымынсыз да пайдаланушылар толық қол жетімді болады.

HTML5 кэштеуді пайдалану келесі артықшылықтарды береді:

  • Интернетке қосылмай-ақ пайдаланушылардың веб-беттерді көру мүмкіндігі.
  • Беттің жүктелу жылдамдығын арттырыңыз - беттер пайдаланушының компьютерінде жергілікті түрде сақталады және сондықтан әлдеқайда жылдамырақ жүктеледі.
  • Сервердегі жүктемені азайту – серверге кейбір пайдаланушы сұрауларын өңдеу қажет болмайды.

HTML5 кэштеуді пайдалану мысалы

...Құжат мазмұны...

HTML5 кэштеуді жариялау

Веб-беттеріңізде кэштеу механизмін пайдалану үшін тегке қосу керек манифест төлсипаты және оның мәнін жолға орнатыңыз арнайы файл, ол кэштеу опцияларын жариялайды.

Бұл төлсипат веб-бетте орнатылмаған болса және оған сілтеме кэш файлында болмаса, бет кэштелмейді.

Кэш файлында кез келген кеңейтім болуы мүмкін (мысалы, .appcache немесе .mf), бірақ арнайы MIME түрі болуы керек: "мәтін/кэш-манифест".

Кейбір жағдайларда веб-сервер қажет болуы мүмкін қосымша параметрберілген MIME түріне қызмет көрсету үшін. Мысалы, Apache веб-серверін орнату үшін .htaccess файлыңызға келесі кодты қосу керек:

AddType мәтіні/кэш-манифест .appcache

Кэш файлының мазмұны

Кэш файлы қалыпты мәтіндік файл, ол браузерге қай файлдарды кэштеу керектігін айтады.

Файл үш бөлімнен тұруы мүмкін:

  • КЕШ МАНИФЕСТІ – бұл бөлімде кэштелуі қажет файлдарға сілтемелер бар. Браузер бірінші жүктеп алғаннан кейін бірден барлық тізімделген файлдарды автоматты түрде кэштейді.
  • ЖЕЛІ - бұл бөлім қажет файлдарды көрсетеді тұрақты байланысинтернетке. Браузер осы бөлімде тізімделген файлдарды кэштемейді.
  • FALLBACK - егер осы бөлімде көрсетілген файлдар қандай да бір себептермен қолжетімсіз болса, пайдаланушылар басқа көрсетілген файлға автоматты түрде қайта бағытталады.

КЕШ MANIFEST бөлімі барлық кэш файлдарында болуы керек. NETWORK және FALLBACK бөлімдері жоқ болуы мүмкін.

Кэш файлының мысалы:

КЕШ МАНИФЕСТІ #Бұл бөлімде кэштелетін файлдар тізімі берілген index.html flower.png ЖЕЛІ #Бұл интернетке қосылуды қажет ететін файлдарды тізімдейді login-page.php ҚАЙТҚА #Егер mob.html қолжетімді болмаса, пайдаланушы келесіге қайта бағытталады. offline.html /mob .html /offline.html #HTML файлдарының кез келгені қолжетімсіз болса, пайдаланушы offline.html *.html /offline.html бетіне қайта бағытталады.

Назар аударыңыз:кэш файлына сілтеме жасайтын веб-бет автоматты түрде кэштеледі, сондықтан оны кэш файлына қосу міндетті емес, бірақ соған қарамастан ұсынылады.

Назар аударыңыз:кейбір браузерлерде бір сайттағы кэштелген мазмұн өлшеміне шектеу болуы мүмкін.

Кэштелген файлдарды жаңарту

Файлдар кэштелгеннен кейін, сервердегі файлдардың мазмұнын өзгертсеңіз де, шолғыш олардың кэштелген нұсқасын қайта-қайта көрсетуді жалғастырады.

Кэштелген мазмұнды жаңарту үшін келесі әрекеттердің бірін орындау керек:

  • Пайдаланушы браузеріндегі кэшті тазалаңыз
  • Кэш файлының мазмұнын жаңартыңыз
  • Браузер кэшін бағдарламалы түрде жаңарту (JavaScript арқылы)

Файлдың мазмұнын жаңарту үшін келесі трюкті қолдануға болады: файлдың мазмұнын тікелей жаңартудың орнына өзгерту күні және/немесе файл нұсқасы бар түсініктеме қосуға болады және болашақта тек өзгертуге болады. сол пікірдің мазмұнын қалағаныңызда. кэштелген мазмұнды жаңартыңыз.

Кейде браузердің бетті кэштеуіне жол бермеу қажет болуы мүмкін, өйткені ондағы ақпарат әр уақытта жаңартылады. Бұл таңдалған сүзгілерге сәйкес деректерді құру немесе әр жолы жаңа жолмен жасалатын басқа мазмұн болуы мүмкін. Қысқасы, зиянды бағдарламаның бетті кэштеуіне жол бермеу қажет болатын жағдайлар болады. Бүгін біз оны қалай жүзеге асыру керектігін үйренеміз әртүрлі жолдар, PHP немесе HTML немесе .htaccess арқылы.

HTML-де бетті кэштеуді өшіріңіз

Мұны мета тегтер арқылы жасауға болады. Енді кэштеуге тыйым салудың әртүрлі нұсқаларын талдаймыз.

Браузер мен прокси-сервер арқылы кэштеуге тыйым салу

Бетті кэштеуді өшіріңіз, тек браузер

Кэштеу параметрі белгілі бір уақыт, браузер үшін

Төмендегі код арқылы біз браузерге құжатты кэште қанша уақыт сақтау керектігін айта аламыз. Осыдан кейін кэш жаңартылады.

Прокси сервер үшін белгілі бір уақытқа кэштеуді орнату

Іс жүзінде, алдыңғы кодтағыдай, тек прокси-серверге арналған көрсеткіш.

PHP көмегімен бетті кэштеуді болдырмаңыз

Іс жүзінде бәрі HTML жағдайындағыдай, тек біз тақырып тақырыптары арқылы ақпаратты шығарамыз. Міне, абсолютті кэшсіз енгізу жолы:

", күні("H:i:s"), ""; ?>

Сондай-ақ, кэштеуді белгілі бір уақытқа рұқсат ете аласыз. Мысалы, кэштеуге тек 1 сағат рұқсат етейік.

", күні("H:i:s"), ""; ?>

.htaccess көмегімен бетті кэштеуді болдырмаңыз

Идеяны жүзеге асырудың қарапайымдылығы үшін барлығын конфигурация деңгейінде жасауға болады Apache сервері. Бұған дейін біз қажетті модульдердің жұмыс тәртібінде екеніне көз жеткізуіміз керек. ашамыз конфигурация файлы Apache және келесі суретті қараңыз:

LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so ... AddModule mod_expires.c AddModule mod_headers.c

Енді .htaccess файлында біз шығыс деректерін кэштеуге тыйым саламыз. Біз білетіндей, .htaccess файлы ол орналасқан каталогқа және барлық ішкі каталогтарға таратылады.

# Кэш-басқару тақырыбы Тақырыпқа Cache-Control қосымшасы "сақтау жоқ, кэш жоқ, қайта тексеру қажет"# Тақырыптың мерзімі аяқталады ExpiresActive On ExpiresӘдепкі "қазір"

Кэштеуге толық тыйым салу сервердегі жүктемені арттыратынын ескеру маңызды. Сондықтан онымен мұқият ойнаңыз! Жақсырақ, құжаттарды кэштеуге болатын нақты уақытты белгілеңіз. Мысалы, кэштеуді 1 сағатқа орнатайық:

# Кэш-басқару тақырыбы Тақырыпқа кэш-басқару "қоғамдық" қосу# Тақырыптың мерзімі аяқталады ExpiresActive On ExpiresDefault "қол жеткізу плюс 1 сағат"

Қорытынды

Сыртқы CSS және Javascript қосу арқылы біз қажетсіз HTTP сұрауларын барынша азайтқымыз келеді.

Ол үшін .js және .css файлдары сенімді кэштеуді қамтамасыз ететін тақырыптармен бірге беріледі.

Бірақ әзірлеу кезінде осы файлдардың бірі өзгерген кезде не істеу керек? Кэштегі барлық пайдаланушылардың ескі нұсқасы бар - кэш ескіргенге дейін сервер мен клиент бөліктерінің бұзылған интеграциясы туралы көптеген шағымдар болады.

Кэштеу мен нұсқалаудың дұрыс әдісі бұл мәселені толығымен жояды және стиль/скрипт нұсқаларының сенімді, мөлдір синхрондалуын қамтамасыз етеді.

Қарапайым ETag кэштеу

Статикалық ресурстарды кэштеудің ең оңай жолы - ETag пайдалану.

Сәйкес сервер параметрін қосу жеткілікті (ол Apache үшін әдепкі бойынша қосылған) - және әрбір файл тақырыптарында ETag беріледі - жаңарту уақытына, файл өлшеміне және (inode негізіндегі) байланысты хэш. файлдық жүйелер) инод.

Браузер мұндай файлды кэштейді және кейінгі сұрауларда кэштелген құжаттың ETag белгісімен If-None-Match тақырыбын көрсетеді. Мұндай тақырыпты алғаннан кейін сервер 304 кодымен жауап бере алады - содан кейін құжат кэштен алынады.

Бұл келесідей көрінеді:

Серверге бірінші сұрау (кэш тазалау) GET /misc/pack.js HTTP/1.1 Хост: веб-сайт

Жалпы, шолғыш әдетте User-Agent, Accept және т.б. сияқты тақырыптарды қосады. Қысқалық үшін олар кесілген.

Сервер жауабы Сервер 200 коды және ETag бар құжатты кері жібереді: HTTP/1.x 200 OK Content-Coding: gzip Content-Type: text/javascript; charset=utf-8 Этег: "3272221997" Қабылдау диапазоны: байт Мазмұн ұзындығы: 23321 Күні: жұма, 02 мамыр 2008 ж. 17:22:46 GMT Сервер: lighttpd Келесі шолғыш сұрауы Келесі сұрауда шолғыш If-None қосады -Сәйкестік: (кэштелген ETag): GET /misc/pack.js HTTP/1.1 Хост: сайт If-None-Match: "453700005" Сервер жауабы Сервер іздеп жатыр - иә, құжат өзгерген жоқ. Сондықтан сіз 304 кодын шығарып, құжатты қайта жібермеуіңізге болады. HTTP/1.x 304 Өзгертілмеген мазмұн-кодтау: gzip Этег: "453700005" Мазмұн түрі: мәтін/javascript; charset=utf-8 Қабылдау диапазоны: байт Күні: сейсенбі, 15 сәуір 2008 ж. 10:17:11 GMT

Сонымен қатар, егер құжат өзгерсе, сервер жаңа ETag көмегімен жай ғана 200 жібереді.

Соңғы өзгертілген + If-өзгертілгеннен бері жинағы ұқсас жұмыс істейді:

  1. сервер соңғы өзгерту күнін Соңғы өзгертілген тақырыпта жібереді (ETag орнына)
  2. шолғыш құжатты кэштейді және сол құжаттың келесі сұрауында кэштелген нұсқаның күнін If-Modified-Since тақырыбына жібереді (If-None-Match орнына)
  3. сервер күндерді тексереді, ал егер құжат өзгермесе, мазмұны жоқ тек 304 кодын жібереді.

Бұл әдістер тұрақты және жақсы жұмыс істейді, бірақ браузер әлі де әрбір сценарий немесе стиль үшін сұрау бойынша орындауы керек.

Смарт кэштеу. Нұсқа жасау

Нұсқалаудың жалпы тәсілі - қысқаша айтқанда:

  1. Нұсқа (немесе өзгерту күні) барлық сценарийлерге қосылады. Мысалы, http://website/ my.js http://web-сайт/ болады my.v1.2.js
  2. Барлық сценарийлер браузерде қатты кэштелген
  3. Сценарийді жаңарту кезінде нұсқа жаңасына өзгереді: http://website/ my.v2.0.js
  4. Мекенжай өзгерді, сондықтан браузер файлды қайтадан сұрайды және кэштейді
  5. Ескі нұсқасы 1.2 бірте-бірте кэштен шығады

Қатты кэштеу

Қатты кэштеу- кэштелген құжаттар үшін серверге сұрауларды толығымен шегелейтін балға түрі.

Мұны істеу үшін, Expires және Cache-Control: max-age тақырыптарын қосыңыз.

Мысалы, PHP-де 365 күндік кэштеу үшін:

Тақырып("Мерзімі аяқталады: ".gmdate("D, d M Y H:i:s", time()+86400*365)." GMT"); header("Кэш-басқару: max-age="+86400*365);

Немесе Apache ішіндегі mod_header көмегімен мазмұнды тұрақты кэштеуге болады:

Мұндай тақырыптарды алғаннан кейін браузер ұзақ уақыт бойы құжатты қатты кэштейді. Құжатқа барлық әрі қарай кірулер серверге қоңырау шалусыз браузер кэшінен тікелей қызмет көрсетеді.

Көптеген браузерлер (Opera, Internet Explorer 6+, Safari) Егер мекенжайда болса, құжаттарды кэштеуге БОЛМАЙДЫ сұрақ белгісі, өйткені олар динамикалық болып саналады.

Сондықтан файл атауына нұсқаны қосамыз. Әрине, мұндай мекенжайлармен mod_rewrite сияқты шешімді пайдалану керек, біз оны кейінірек мақалада қарастырамыз.

P.S Бірақ Firefox сұрақ белгілері бар мекенжайларды кэштейді.

Атауларды автоматты түрде шешу

Файлдардың атын өзгертпей, нұсқаларды автоматты түрде және мөлдір түрде қалай өзгерту керектігін көрейік.

Нұсқамен атау -> Файл

Ең оңай нұсқа - файл атауын түпнұсқаға айналдыру.

Apache деңгейінде мұны mod_rewrite арқылы жасауға болады:

RewriteRule жүйесіндегі RewriteEngine ^/(.*\.)v+\.(css|js|gif|png|jpg)$ /$1$2 [L]

Мұндай ереже барлық css/js/gif/png/jpg файлдарын өңдеп, нұсқаны атаудан алып тастайды.

Мысалға:

/images/logo.v2.gif -> /images/logo.gif
/css/style.v1.27.css -> /css/style.css
/javascript/script.v6.js -> /javascript/script.js

Бірақ нұсқаны кесіп тастаудан басқа, файлдарға қатты кэштеу тақырыптарын қосу керек. Ол үшін mod_header директивалары пайдаланылады:

Тақырып қосу "Мерзімі аяқталады" "Дүйс, 28 шілде 2014 ж. 23:30:00 GMT" тақырыбы "Кэш-басқару" қосу "max-age=315360000"

Барлығы бірге ол келесі Apache конфигурациясын жүзеге асырады:

RewriteEngine параметрі # нұсқаны жояды және сонымен бірге файл нұсқасы болып табылатын айнымалы мәнді орнатады RewriteRule ^/(.*\.)v+\.(css|js|gif|png|jpg)$ /$1$2 # қатты кэш нұсқалы файлдар Тақырып "Мерзімі аяқталады" қосу "Дүйсенбі, 28 шілде 2014 ж. 23:30:00 GMT" env=VERSIONED_FILE Тақырып "Кэш-басқару" қосу "max-age=315360000" env=VERSIONED_FILE

mod_rewrite модулінің жұмыс істеу тәсіліне байланысты, RewriteRule негізгі httpd.conf конфигурация файлына немесе онымен бірге қамтылған файлдарға орналастырылуы керек, бірақ ешбір жағдайда .htaccess ішінде, әйтпесе VERSIONED_FILE айнымалы мәнін орнату алдында тақырып пәрмендері бірінші орындалады. .

Тақырып директивалары кез келген жерде, тіпті .htaccess ішінде болуы мүмкін - бұл маңызды емес.

HTML бетіндегі файл атына нұсқаны автоматты түрде қосыңыз

Нұсқаны скрипт атына қалай қою сіздің үлгі жүйеңізге және жалпы сценарийлерді (стильдерді және т.б.) қосу жолыңызға байланысты.

Мысалы, модификация күнін нұсқа және Smarty үлгі механизмі ретінде пайдаланған кезде сілтемелерді келесідей орнатуға болады:

Нұсқа функциясы нұсқаны қосады:

Функция smarty_version($args)( $stat = stat($GLOBALS["config"]["site_root"].$args["src"]); $version = $stat["mtime"]; echo preg_replace("! \.(+?)$!", ".v$version.\$1", $args["src"]); )

Беттегі нәтиже:

Оңтайландыру

Статистикаға қажетсіз қоңырауларды болдырмау үшін ағымдағы нұсқалар тізімі бар массивті бөлек айнымалы мәнде сақтауға болады.

$versions["css"] = массив("group.css" => "1.1", "other.css" => "3.0", )

Бұл жағдайда массивтің ағымдағы нұсқасы жай ғана HTML-ге ауыстырылады.

Сіз екі тәсілді де қиып өтіп, өңдеу кезінде өзгерту күні бойынша нұсқаны шығаруға болады - өзектілік үшін және өндірісте - өнімділік үшін массив нұсқасы.

Қолдану мүмкіндігі

Бұл кэштеу барлық жерде жұмыс істейді, соның ішінде Javascript, CSS, кескіндер, флэш-фильмдер және т.б.

Бұл құжат өзгерген сайын пайдалы, бірақ браузерде әрқашан ағымдағы жаңартылған нұсқасы болуы керек.

Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
Рақмет сізге. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!