Какво е кеширане? Ръководство с прости думи за създатели на приложения
Кеширането означава съхраняване на готово копие на нещо, което е било бавно или скъпо за получаване, така че следващата заявка за него може да бъде отговорена бързо от това копие. Запазеното копие се нарича кеш. Браузърът ви кешира изображенията, за да се зарежда сайтът по-бързо при второто ви посещение; сървърът кешира резултата от бавна заявка към базата данни, за да не я изпълнява за всеки посетител.
Кеширането прави приложенията по-бързи и по-евтини за работа. Единственият голям компромис е, че копието може да остарее.
Защо кеширането е важно, когато създаваш с ИИ
Ще се сблъскате с кеширане в приложения, създадени с ИИ, по три начина:
- „Актуализирах приложението, но виждам старата версия.“ Това е най-честият случай и обикновено е безобиден – браузърът или CDN мрежа показва запазено копие.
- Скорост. Ако една страница е бавна, защото преизчислява едни и същи числа за всеки посетител, кеширането на резултата може да я направи почти мигновена.
- Разход. Много ИИ инструменти и хостинг услуги таксуват изчисления, време в базата данни и външни API заявки. Ако хиляда посетители задействат една и съща скъпа заявка, кеширането ви позволява да платите за нея веднъж.
Знаенето на основите ви позволява да поискате кеширане там, където помага, и да го разпознаете, когато е причината нещо да изглежда грешно.
Ежедневна аналогия
Представете си кухнята на заето кафене.
Всяка сутрин готвачът би могъл да приготвя всяко кафе от току-що смлени зърна, когато бъде поръчано. Това е бавно. Вместо това той държи готова канна филтърно кафе на котлона. Повечето клиенти получават чаша за секунди – това е попадение в кеша. Когато канната свърши, някой приготвя нова – промах в кеша.
Но кафето, стояло твърде дълго, остарява, затова кафенето има правило: изхвърля всяка канна, по-стара от 30 минути. Това правило е времето на изтичане на кеша. Никой не би държал една и съща канна цял ден, а и никой не би предварително сварил поръчка по поръчка с овесено мляко и три захара – някои неща изобщо не бива да се кешират.
Къде живеят кешовете
Едно зареждане на страница може да премине през няколко кеша – от най-близкия до потребителя до най-отдалечения:
| Кеш | Къде се намира | Какво обикновено съхранява | Пример |
|---|---|---|---|
| Кеш на браузъра | На устройството на посетителя | Изображения, стилове, скриптове, шрифтове | Логото ви се зарежда мигновено на втората страница |
| CDN кеш | Сървъри по целия свят, близо до посетителите | Статични файлове и понякога цели страници | Посетител в Токио получава файлове от близък сървър, а не от вашия оригинален сървър |
| Кеш на приложението | На или до вашия сървър, често в паметта или в Redis | Резултати от бавни заявки или външни API извиквания | Днешните валутни курсове, извлечени веднъж на час |
| Кеш на базата данни | Вътре в базата данни | Скоро използвани данни и планове за заявки | Популярните редове остават в бърза памет |
CDN (мрежа за доставка на съдържание) е по същество световна мрежа от кешове за файловете на вашия сайт.
Как кешът решава какво да пази
Всеки кеш трябва да отговори на едни и същи въпроси:
- Какво може да се кешира? Публични, споделени данни (изображение на продукт, блог пост) – да. Лични данни (страницата с акаунта на потребител, съобщенията му) – никога в споделен кеш.
- За колко време? Това е TTL (time to live – време на живот). Логото може да се кешира една година; наличността – 30 секунди.
- Как се актуализира? Или копието изтича и се взема отново, или приложението умишлено го премахва, когато данните се променят – това се нарича инвалидация.
За уебсайтовете сървърът казва на браузърите и CDN мрежите как да кешират всеки файл чрез заглавката Cache-Control. Например Cache-Control: max-age=3600 означава „можеш да използваш това копие един час“.
Съвременните инструменти за изграждане се справят с най-трудната част за статичните файлове чрез cache busting: всеки път, когато файл се промени, той получава ново име с отпечатък, например app.3f9a2c.js. Браузърите могат да кешират старото име дълго време, тъй като новата версия просто има различно име.
Практически пример: каталог с продукти
Имате малък онлайн магазин. Началната страница показва 50 продукта с цени и наличности от базата данни, както и списък „популярни“, който изисква бавно изчисление върху всички поръчки.
- Изображенията и скриптовете се кешират от браузъра и CDN мрежата за дълго време. Всеки нов build дава на променените файлове нови имена, така че актуализациите все пак се виждат.
- Списъкът с популярните се изчислява веднъж на всеки 10 минути и се съхранява в кеш на приложението. Всеки посетител през тези 10 минути получава запазения резултат мигновено.
- Цените се кешират за кратко време, а кешът се изчиства всеки път, когато редактирате продукт, така че клиентите никога не виждат стара цена за дълго.
- Наличността при плащане никога не се кешира. Когато някой натисне „Купи“, приложението проверява реалната база данни, така че не може да продаде артикул, който току-що е свършил.
- Страниците с количката и акаунта никога не се съхраняват в споделени кешове, защото са лични.
Резултатът: началната страница е бърза, базата данни върши много по-малко работа и нищо, което е важно за пари или поверителност, никога не е остаряло.
Ключови термини
| Термин | Значение |
|---|---|
| Попадение / промах в кеша | Данните са намерени в кеша / трябвало е да бъдат взети от източника. |
| TTL (time to live) | Колко време запазеното копие се смята за актуално. |
| Остарели данни | Кеширано копие, което не е актуално. |
| Инвалидация | Умишлено премахване на кеширано копие, защото оригиналът се е променил. |
| Cache busting | Смяна на името или адреса на файл при промяна, така че кешовете да взимат новата версия. |
| Cache-Control | HTTP заглавката, която казва на браузърите и CDN мрежите как да кешират отговор. |
| Твърдо обновяване | Презареждане на страница, като се казва на браузъра да игнорира кеша си. |
| Redis | Популярно хранилище за данни в паметта, често използвано като кеш на приложение. |
Често срещани заблуди
- „Кеширането винаги е добро.“ Кеширането на грешното нещо причинява реални проблеми: стари цени, липсващи нови публикации или – в най-лошия случай – личната страница на един потребител се показва на друг. Кеширайте умишлено.
- „Ако виждам старата версия, актуализацията ми е неуспешна.“ Обикновено не е. Опитайте твърдо обновяване (Ctrl+Shift+R или Cmd+Shift+R на Mac) или прозорец за поверителен режим, преди да смятате, че нещо е счупено.
- „Кеширането оправя бавно приложение.“ То прикрива бавността при повтарящи се заявки. Първата заявка си остава бавна, а ако основният проблем е липсващ индекс в базата данни, оправете и него.
- „Трябва да кеширам всичко колкото може по-дълго.“ Дългите времена на кеширане подхождат за файлове, които получават нови имена при промяна. За HTML страници и данни по-краткото време е по-безопасно.
- „Изчистването на моя кеш оправя проблема за всички.“ То изчиства само вашия браузър. Посетителите и CDN кешовете все още имат собствени копия.
Какво да попитате вашия ИИ инструмент
- „Кои части от това приложение са бавни и кои могат безопасно да се кешират?“
- „Кеширай [популярния списък / резултата от API] за [N] минути и го изчиствай, когато основните данни се променят.“
- „Увери се, че никоя страница с лични данни или данни от акаунт не може да бъде кеширана от CDN или споделен кеш.“
- „Задай дълги времена на кеширане за статични файлове с отпечатъци и кратки за HTML.“
- „Кеширай отговорите от [външно API], така че да не го извикваме при всяко зареждане на страница – и ми кажи колко стари могат да станат тези данни.“
- „След публикуване виждам стара версия. Това е кешът на моя браузър или нещо не е разгърнато?“
Кеширане в Mythex
След като публикувате актуализация на приложение в Mythex, документацията отбелязва, че CDN кешовете могат да закъснеят за кратко, а твърдо обновяване на публичния адрес показва новата версия – вижте Как да публикувате. Страницата Лимити на хостинга също препоръчва кеширане на статичните ресурси, тъй като хостингът, времето в базата данни и трафикът се плащат от вашия кредитен баланс. Всичко отвъд това – кеширане на резултати от заявки или отговори на API – е нещо, което поисквате от агента да вгради във вашето приложение.
Свързано четиво: какво е CDN, как да направите сайта си по-бърз и какво е ограничаване на заявки (rate limiting).
Въпроси
Какво е кеширане с прости думи?
Кеширането означава запазване на копие на нещо, което е било бавно или скъпо за получаване, така че при следващата нужда да може да бъде предоставено бързо от запазеното копие. Браузърите, CDN мрежите, сървърите и базите данни използват кешове, за да правят приложенията по-бързи и по-евтини за работа.
Защо все още виждам старата версия на сайта си след актуализация?
Вероятно браузърът ви или CDN мрежа показва запазено копие на старите файлове. Твърдо обновяване (Ctrl+Shift+R в Windows, Cmd+Shift+R на Mac) обикновено решава проблема. За посетителите добре изградените сайтове дават на обновените файлове нови имена, така че кешовете автоматично изтеглят новата версия.
Какво прави изчистването на кеша?
Изчистването на кеша на браузъра изтрива запазените копия на файлове и страници, които браузърът е съхранил, така че следващият път всичко се изтегля наново. Може да оправи страници, които изглеждат счупени или остарели, а след това страниците се зареждат малко по-бавно за първи път.
Може ли кеширането да причини проблеми?
Да. Основният риск е показването на остарели данни – стара цена, неактуално наличие – или, още по-лошо, кеширане на личната страница на един потребител и показването ѝ на някой друг. Добрите правила за кеширане решават какво може да се кешира, за колко време, и никога не кешират лични данни в споделени кешове.