node.js - 为我的 Service Worker 构建一个 App Shell 以使用 Handlebars 进行缓存
问题描述
我正在使用 express-handlebars 构建 PWA。我正在尝试遵循 Google 设计实践并构建一个应用程序外壳,以便与服务人员一起缓存。但是,我有点难过,因为 Handlebars 是一个生成 html 的模板引擎。有没有更好的方法来构建一个用于服务工作者缓存的 express 应用程序外壳?示例将不胜感激。
解决方案
“有没有更好的方法”取决于您项目中的许多变量,并且确实没有答案。
至少在我看来,这里更重要的是了解应用程序外壳的基本概念。当您意识到您将能够调整变量并自由选择正确的技术时。如果它适合您的应用程序,则使用 Handlebars 生成 HTML 是完全可以的。HTML 对于浏览器来说是快速渲染的(相对于 JS 重的东西),所以它完全符合 shell 的想法。
使用应用程序外壳,您的应用程序的结构不是不断变化的静态(ish)布局(菜单、页眉、页脚等)和动态部分。通过这种分离,app shell 的想法可以这样使用 Service Worker:
- 服务器提供应用程序外壳(通常只有 HTML/CSS)
- 浏览器渲染速度非常快,并通过 Service Worker 将其缓存以供离线使用
- 显示外壳后,JS 接管并开始获取动态内容(外壳“内部”显示的内容)
- 浏览器使用一些 JS 框架渲染动态部分(通常)
这些单独的部分可能非常松散耦合。您可以使用任何您想要创建应用程序外壳的方式和完全不同的方式来创建动态部分。或者,您可以使用相同的前端框架来实现它们。从应用程序外壳架构的角度来看,这并不重要。关键是,shell 应该可以超快速地使用,当您只发布 HTML/CSS 时,您将更容易实现这一点。
推荐阅读
- google-sheets-formula - 我正在尝试将大型(14k)数据从网页收集到我的谷歌表格。IMPORTXML 返回我“超过数据量”的消息。我怎么能通过它?
- android - 尝试从 Godot 导出到 Android 时出错
- android - 在 Android 中访问与 OTG 适配器连接的 USB 驱动器上的文件
- azure-devops - 如何使用 Azure Pipelines 触发驻留在单独存储库中的 terraform 部署?
- c# - 通过c#调用rest WS
- arrays - 如何在ruby中执行哈希数组重新排序
- go - 戈朗 | 处理进口重复申报
- sql-server - 如何使用 Entity Framework Core 检测 SQL Server 数据库表中的更改?
- c - 从 Wavefront .obj 文件中提取人脸顶点索引
- react-native - 如何在 RSA 加密中使用密钥文件作为公钥?