service-worker – 如何使用Service Worker和srcset创建脱机应用程序?

我希望我的应用程序(静态网站)使用服务工作者脱机运行.如果不缓存srcset属性中的所有图像,我看不到这样做的方法.我可以看到 client hints将如何解决问题,但除此之外是否有一个解决方案可以工作,而不涉及服务器做任何事情,但服务请求的文件

我可以看一下服务工作者如何根据img标签中的信息和图像的命名约定来计算要请求的图像……

有没有人解决这个问题,或者根本想过它?

解决方法

对于完整的srcset功能,您必须确实缓存所有分辨率.

虽然屏幕密度似乎是设备的固定属性,但它实际上是动态的,例如,智能手机可以投射/播放到电视屏幕.在具有多个显示器的桌面上(例如带有外部显示器的Retina MacBook),当浏览器窗口移动时,屏幕分辨率可能会改变.所有这些更改可能会在您完成缓存后很长时间内脱机,因此您无法确定将选择哪些解决方案.

一个简单的解决方案是始终使用2x图像.较高的DPI使图像失真不太明显,因此您可以compress them more heavily来抵消更高分辨率的成本.

另一种解决方案是捕获图像上的加载错误,并将srcset替换为您知道缓存的图像URL.顺便说一句:您可能需要在标记添加onerror =“…”,因为错误可能会在任何其他脚本有机会在页面上运行之前触发,或者在添加错误处理程序之前以编程方式检查img.complete&的所有图像元素. &安培; !img.naturalWidth检测错过的错误事件.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些