我仍然在努力如何避免渐进式 Web 应用程序中的缓存问题。任何 PWA 缓存的关键是能够更新 ServiceWorker 文件(我们称之为 sw.js)。但细节让我有点困惑:
可以navigator.serviceWorker.register('sw.js')在每个页面加载时执行,因为register()更新应用程序缓存,或者如果一切都是最新的,则什么都不做——对吗?
做一些类似navigator.serviceWorker.register('sw.js?' + Date.now())避免 HTTP 缓存的事情有意义吗?或者,如果服务器使用 ETags,我是否安全?
浏览器是否在每次页面加载时检查网络是否有更新的 sw.js?我有时在网络检查器选项卡中看不到它。
如果 sw.js 在应用程序缓存中,浏览器是否会在不检查服务器更新的情况下从那里获取它?
我有时会看到像这样缓存自己的 ServiceWorker 演示脚本:
self.addEventListener('install', ev => {
const myCaches = {
app: {...},
sw: {
files: [
'/sw.js'
],
version: '1'
}
}
for (let name in myCaches) {
const cacheName = name + '-' + myCaches[name].version
ev.waitUntil(
caches.has(cacheName).then(uptodate => {
if (uptodate) return true
caches
.open(cacheName)
.then(cache => {
cache.addAll(myCaches[name].files)
})
})
) …Run Code Online (Sandbox Code Playgroud)我为我的Node.js项目编写了一个模块,它处理一些数据并且应该返回结果,如下所示:
var result = require('analyze').analyzeIt(data);
Run Code Online (Sandbox Code Playgroud)
问题在于analyze.js取决于异步功能.基本上它看起来像这样:
var analyzeIt = function(data) {
someEvent.once('fired', function() {
// lots of code ...
});
return result;
};
exports.analyzeIt = analyzeIt;
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用,因为result返回时仍然是空的.但是我该怎么解决呢?
我已经使用Node.js / npm已有一段时间了,但是我从未使用过npm脚本。我很惊讶地发现我无法在Windows / Cygwin系统上完全使用它们。像这样的package.json ...
{
"name": "demo",
"scripts": {
"env": "env",
"hello": "echo Hello!",
"crap": "I am complete nonsense."
}
}
Run Code Online (Sandbox Code Playgroud)
...所有三个npm run命令都不起作用。npm run crap执行并立即返回OK状态(我使用-dd参数进行了测试);npm run doesntexist引发预期的错误。在常规Windows shell上不使用Cygwin进行测试没有区别。
我尝试为网页设置推送消息。虽然我了解前端部分(Push API)并且有一个工作的本地主机演示应用程序,但我只是不明白服务器如何将消息推送到浏览器。
推送服务中的包如何路由到客户端?客户端没有域名,通常也没有固定的IP地址,那怎么可能呢?
我已经阅读了Google 的 Web Push Libraries 指南和RFC 8030的部分内容,但如果他们有这个问题的答案,我却无法理解。