Я смотрел на практику обслуживающего персонала и workbox.
О предварительном кэшировании говорится во многих статьях, в workbox даже есть специальный метод _1 _ именно для этого. Думаю, я понимаю концептуальную разницу между предварительным кешем и кешем времени выполнения, но меня смущает то, почему предварительное кэширование обрабатывается так особым образом?
Все статьи о предварительном кэшировании, которые я читал, подчеркивают, как он делает веб-приложение доступным, когда клиент находится в автономном режиме. Разве не для этого нужен кеш (даже не предварительный)? Я имею в виду, что кажется, что кеш времени выполнения также может достичь этого, если он настроен правильно. Требуется ли предварительное кеширование, чтобы веб-приложение работало в автономном режиме?
Единственная очевидная разница - когда должны создаваться кеши. Что ж, если клиент находится в автономном режиме, кеш не может быть создан, независимо от того, является ли это предварительный кеш или кеш времени выполнения, и если кеши были созданы во время последнего посещения, когда клиент был в сети, как имеет значение, был ли кеш для ответа для текущего посещения предварительный кэш или кеш времени выполнения?
Для сравнения рассмотрим 2 абстрактных случая. Допустим, у нас есть два разных сервис-воркера, один (/precache/sw.js
) выполняет только предварительное кэширование, а другой (/runtime/sw.js
) только выполняет кеширование, где /precache
и /runtime
размещают одно и то же веб-приложение (что означает, что кэшируются одни и те же ресурсы).
В каком сценарии веб-приложения /precache
и /runtime
могут работать по-разному из-за разных настроек ПО?
В моем понимании
- Если кеш не может быть создан (например, в автономном режиме при первом посещении), тогда предварительный кеш и кеш времени выполнения не должны отличаться.
- Если предварительное кэширование может быть успешно создано (т. Е. Клиент подключен к сети при первом посещении), кеш времени выполнения тоже должен быть. (Давайте не будем слишком увлекаться случаями, например, когда клиент может быть в сети только на определенный момент, они все равно должны быть такими же в моих примерах.)
- Если кеш доступен, то предварительный кеш и кеш времени выполнения не имеют ничего общего, следовательно, остаются одинаковыми.
Единственный сценарий, который я мог придумать, когда предварительное кэширование показывает преимущества, - это когда кеш необходимо обновить при текущем посещении, когда предварительное кеширование гарантирует, что текущее посещение получит актуальную информацию. Если это так, разве кеш времени выполнения NetworkFirst не будет делать примерно то же самое? И все же, нет ничего общего с офлайном, что упоминается почти в каждой статье о прекэшировании sw, которую я читал.
Как онлайн / офлайн делает прекэш героем?
Что я здесь пропустил, что такого особенного в прекэшировании?