{"id":1535,"date":"2024-09-11T11:41:51","date_gmt":"2024-09-11T14:41:51","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=1535"},"modified":"2025-11-25T16:07:43","modified_gmt":"2025-11-25T19:07:43","slug":"cache-pwa","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/","title":{"rendered":"Cache PWA"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Cache PWA<\/strong>: O <strong>armazenamento em cache<\/strong> \u00e9 o que transforma um website comum em um <strong>Progressive Web App (PWA)<\/strong> confi\u00e1vel. Em vez de depender exclusivamente da rede, o PWA salva c\u00f3pias de seus recursos (assets) diretamente no dispositivo do usu\u00e1rio.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Essa capacidade \u00e9 fundamental para alcan\u00e7ar o princ\u00edpio de <strong>Confiabilidade (<em>Reliable<\/em>)<\/strong>, garantindo que o aplicativo carregue e funcione <em>instantaneamente<\/em>, mesmo com a conex\u00e3o ausente ou inst\u00e1vel (o chamado <em>offline-first<\/em>).<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. \ud83d\udce6 Fundamentos da Cache API<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A API utilizada pelo Service Worker para gerenciar recursos chama-se <strong>Cache API<\/strong>. Ela \u00e9 um armazenamento chave-valor onde a <strong>chave<\/strong> \u00e9 o objeto <code>Request<\/code> (ou URL) e o <strong>valor<\/strong> \u00e9 o objeto <code>Response<\/code>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A. Quando o Cache Ocorre<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Existem dois momentos principais para armazenar recursos em cache:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Pr\u00e9-caching (Evento <code>install<\/code>):<\/strong> Armazenar ativos est\u00e1ticos cr\u00edticos imediatamente ap\u00f3s a instala\u00e7\u00e3o do Service Worker. Essencial para o &#8220;App Shell&#8221; (<em>offline shell<\/em>).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Runtime Caching (Evento <code>fetch<\/code>):<\/strong> Armazenar ativos sob demanda, conforme o usu\u00e1rio os solicita pela primeira vez. Ideal para imagens din\u00e2micas ou p\u00e1ginas que n\u00e3o s\u00e3o cr\u00edticas no in\u00edcio.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. Download e Armazenamento<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O Service Worker gerencia a Cache API atrav\u00e9s de m\u00e9todos expostos no objeto global <code>caches<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-table has-medium-font-size\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>M\u00e9todo<\/strong><\/td><td><strong>Prop\u00f3sito<\/strong><\/td><\/tr><\/thead><tbody><tr><td><code>caches.open(cacheName)<\/code><\/td><td>Abre (ou cria) um cache com um nome espec\u00edfico (ex: <code>'v1-assets'<\/code>).<\/td><\/tr><tr><td><code>cache.addAll(urls)<\/code><\/td><td>Faz o <em>download<\/em> de uma lista de URLs e armazena as respostas no cache aberto.<\/td><\/tr><tr><td><code>cache.match(request)<\/code><\/td><td>Procura uma <code>Request<\/code> espec\u00edfica dentro do cache.<\/td><\/tr><tr><td><code>cache.delete(request)<\/code><\/td><td>Remove um recurso espec\u00edfico do cache.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. \ud83d\udc77 Implementando o Pr\u00e9-caching no Service Worker<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O pr\u00e9-caching \u00e9 a t\u00e9cnica que garante que os recursos b\u00e1sicos (o &#8220;esqueleto&#8221; do aplicativo) estejam dispon\u00edveis desde o primeiro uso <em>offline<\/em>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">JavaScript<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ service-worker.js\n\nconst CACHE_STATIC_NAME = 'static-v1'; \nconst OFFLINE_URLS = &#91;\n  '\/',\n  '\/index.html',\n  '\/styles.css',\n  '\/script.js'\n];\n\nself.addEventListener('install', (event) =&gt; {\n  \/\/ event.waitUntil garante que o SW n\u00e3o ative at\u00e9 que o cache esteja preenchido\n  event.waitUntil(\n    caches.open(CACHE_STATIC_NAME)\n      .then((cache) =&gt; {\n        console.log('Cache preenchido com App Shell.');\n        \/\/ Faz o download e armazena todos os recursos da lista\n        return cache.addAll(OFFLINE_URLS); \n      })\n  );\n});\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. \ud83d\udd04 Atualizando e Removendo o Cache<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O cache n\u00e3o deve ser est\u00e1tico. A maneira mais segura de garantir que os usu\u00e1rios obtenham a vers\u00e3o mais recente dos recursos \u00e9 por meio do <strong>Controle de Vers\u00e3o do Cache<\/strong>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A. Atualiza\u00e7\u00e3o do Cache (Evento <code>activate<\/code>)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A melhor pr\u00e1tica para atualiza\u00e7\u00e3o \u00e9 criar um <strong>novo cache<\/strong> com um novo nome (<code>v2<\/code>, <code>v3<\/code>, etc.) no evento <code>install<\/code>, e usar o evento <code>activate<\/code> para deletar os caches antigos.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">JavaScript<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ service-worker.js\n\nconst CACHE_STATIC_NAME = 'static-v2'; \/\/ NOME FOI ALTERADO para for\u00e7ar atualiza\u00e7\u00e3o\n\nself.addEventListener('activate', (event) =&gt; {\n  event.waitUntil(\n    caches.keys().then(cacheNames =&gt; {\n      return Promise.all(\n        cacheNames.map(cacheName =&gt; {\n          \/\/ Se o nome do cache N\u00c3O for o nome atual (v2), ele \u00e9 antigo e deve ser deletado\n          if (cacheName !== CACHE_STATIC_NAME) {\n            console.log('Deletando cache antigo:', cacheName);\n            return caches.delete(cacheName);\n          }\n        })\n      );\n    })\n  );\n});\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. Remo\u00e7\u00e3o de Recursos Espec\u00edficos<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Se voc\u00ea precisar remover um \u00fanico recurso (ex: ap\u00f3s a refatora\u00e7\u00e3o), use o m\u00e9todo <code>cache.delete(request)<\/code> no momento apropriado (geralmente durante o <code>activate<\/code> ou o <code>fetch<\/code> para limpeza).<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. \ud83d\udee0\ufe0f Depura\u00e7\u00e3o e Inspe\u00e7\u00e3o do Cache<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A depura\u00e7\u00e3o \u00e9 feita diretamente nas ferramentas do navegador:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Chrome\/Edge DevTools:<\/strong> V\u00e1 para a aba <strong>Application<\/strong> (Aplicativo). Na se\u00e7\u00e3o <em>Storage<\/em> (Armazenamento), voc\u00ea encontrar\u00e1 <strong>Cache Storage<\/strong> e <strong>Service Workers<\/strong>.\n<ul class=\"wp-block-list\">\n<li>Voc\u00ea pode inspecionar o conte\u00fado de cada cache e simular o funcionamento <strong>offline<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Lighthouse:<\/strong> A ferramenta de auditoria autom\u00e1tica do Google verifica se o PWA est\u00e1 <strong>registrando<\/strong> e <strong>ativando<\/strong> um Service Worker e se ele est\u00e1 gerenciando os eventos <code>start_url<\/code> para o modo <em>offline<\/em>.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">\u2705 Conclus\u00e3o<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O cache \u00e9 o motor que impulsiona a <strong>confiabilidade e a velocidade<\/strong> de um PWA. Ao utilizar o Service Worker para gerenciar a <strong>Cache API<\/strong>, voc\u00ea pode definir exatamente quais recursos s\u00e3o pr\u00e9-armazenados (<code>install<\/code> para o App Shell) e como o controle de vers\u00e3o (<code>activate<\/code> para limpeza) garante que o usu\u00e1rio sempre tenha acesso \u00e0 vers\u00e3o mais recente e a uma experi\u00eancia <em>offline<\/em> robusta. Dominar as estrat\u00e9gias de cache \u00e9 o passo final para entregar a experi\u00eancia de aplicativo nativo que os PWAs prometem.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Toda jornada tem um in\u00edcio, e o in\u00edcio para se tornar um desenvolvedor web \u00e9 dominar as seguintes tecnologias, que voc\u00ea encontra aqui mesmo:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/html\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/css\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/javascript\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Cache PWA: O armazenamento em cache \u00e9 o que transforma um website comum em um&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1497,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-1535","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pwa","wpcat-16-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cache PWA - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Cache PWA: Uma das caracter\u00edsticas mais marcantes das PWAs \u00e9 a capacidade de funcionar offline, gra\u00e7as ao armazenamento em cache...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cache PWA - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Cache PWA: Uma das caracter\u00edsticas mais marcantes das PWAs \u00e9 a capacidade de funcionar offline, gra\u00e7as ao armazenamento em cache...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-11T14:41:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-25T19:07:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Cache PWA\",\"datePublished\":\"2024-09-11T14:41:51+00:00\",\"dateModified\":\"2025-11-25T19:07:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/\"},\"wordCount\":612,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"articleSection\":[\"PWA\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/\",\"name\":\"Cache PWA - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"datePublished\":\"2024-09-11T14:41:51+00:00\",\"dateModified\":\"2025-11-25T19:07:43+00:00\",\"description\":\"Cache PWA: Uma das caracter\u00edsticas mais marcantes das PWAs \u00e9 a capacidade de funcionar offline, gra\u00e7as ao armazenamento em cache...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"width\":758,\"height\":426,\"caption\":\"PWA\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cache-pwa\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cache PWA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\",\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cache PWA - BLOG THIAGO ROSSI","description":"Cache PWA: Uma das caracter\u00edsticas mais marcantes das PWAs \u00e9 a capacidade de funcionar offline, gra\u00e7as ao armazenamento em cache...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/","og_locale":"pt_BR","og_type":"article","og_title":"Cache PWA - BLOG THIAGO ROSSI","og_description":"Cache PWA: Uma das caracter\u00edsticas mais marcantes das PWAs \u00e9 a capacidade de funcionar offline, gra\u00e7as ao armazenamento em cache...","og_url":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2024-09-11T14:41:51+00:00","article_modified_time":"2025-11-25T19:07:43+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","type":"image\/webp"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Cache PWA","datePublished":"2024-09-11T14:41:51+00:00","dateModified":"2025-11-25T19:07:43+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/"},"wordCount":612,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","articleSection":["PWA"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/","url":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/","name":"Cache PWA - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","datePublished":"2024-09-11T14:41:51+00:00","dateModified":"2025-11-25T19:07:43+00:00","description":"Cache PWA: Uma das caracter\u00edsticas mais marcantes das PWAs \u00e9 a capacidade de funcionar offline, gra\u00e7as ao armazenamento em cache...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","width":758,"height":426,"caption":"PWA"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/cache-pwa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Cache PWA"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \"GDD \u2013 O Guia Definitivo\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86","https:\/\/linkedin.com\/in\/thiagox86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/1535","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1535"}],"version-history":[{"count":2,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/1535\/revisions"}],"predecessor-version":[{"id":4980,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/1535\/revisions\/4980"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/1497"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}