Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Workbox在React SSR中缓存HTML页面_Javascript_Reactjs_Service Worker_Progressive Web Apps_Workbox - Fatal编程技术网

Javascript 如何使用Workbox在React SSR中缓存HTML页面

Javascript 如何使用Workbox在React SSR中缓存HTML页面,javascript,reactjs,service-worker,progressive-web-apps,workbox,Javascript,Reactjs,Service Worker,Progressive Web Apps,Workbox,我正在尝试使用Workbox将服务人员集成到我的web应用程序中。但是,我不确定如何缓存index.html文件,该文件现在是在服务器端动态生成的。我正在使用带有以下配置的workbox网页包插件 const {GenerateSW, InjectManifest} = require('workbox-webpack-plugin') plugins: [ new GenerateSW(), new InjectManifest({ swSrc: './

我正在尝试使用Workbox将服务人员集成到我的web应用程序中。但是,我不确定如何缓存index.html文件,该文件现在是在服务器端动态生成的。我正在使用带有以下配置的
workbox网页包插件

const {GenerateSW, InjectManifest} = require('workbox-webpack-plugin')
plugins: [
    new GenerateSW(),
    new InjectManifest({
            swSrc: './public/service-worker.js',
            include: [/\.html$/, /\.js$/, /\.svg$/, /\.css$/, /\.png$/, /\.ico$/]
        })
  ]
我能够成功注册服务工作者并缓存我的JS包。但是,我不确定缓存服务器端生成的index.html的最佳实践是什么

是构建PWA(以及使用React)的一个著名示例。您可以在“”上阅读本文。本文的“渐进加载”部分是您问题的解决方案

基于谷歌的PWA建议,可以对静态和动态内容进行应用程序缓存。继续读下去。Workbox只是构建在这些API之上的一个助手,所以原理是一样的

用于缓存的动态内容类型-说我们可以在PWA中缓存动态/服务器生成的数据,它可以有两种类型。从web服务调用中获取的JSON/XML内容,并将其缓存在IndexDB中,或者将其缓存为服务器生成的HTML文件(服务器端呈现)

您的用例正在缓存服务器端呈现的页面-index.html。虽然您可以通过使用workbox将其预缓存为单个文件来保持简单,然后在用户打开应用程序后立即显示相同的文件,然后让您的服务人员重新提取新的HTML,但当页面完全重新加载时,它可能无法提供良好的用户体验。。想想用户是否已经向下滚动并阅读了预加载的内容。当重新加载新的index.html时,它可能会突然消失,并导致用户混淆

Twitter Lite用例-如链接文章中所述,他们将登录页(您可以将其与index.html进行比较)分解为多个模块。把外壳分开。如通知、标题栏、菜单、侧导航等。页面中的内容块应进一步细分为推特流。因此,当用户打开应用程序时,它只加载预缓存的登录页模块,包括缓存的tweets,然后为用户获取新的tweets,作为预呈现的html页面,并注入到DOM中。因此,如果用户正在读一些预缓存的旧tweet,这种体验不会受到干扰


您的用例?如果您认为index.html与上述用例有显著不同,如果您列出了index.html组件,我们将很乐意将其分解为PWA缓存

如果index.html是在服务器端动态生成的,您确定要缓存它吗?内容是动态的,对吗?@pate SSR应用程序应该如何作为PWA构建?我听过一些人在使用Workbox,但我不确定如何在Workbox中使用它。@MRN下面的答案解决了这个问题吗?如果没有,请添加仍然存在的问题或接受答案以关闭它。