问题 资产的HTML5 localStorage(样式表,JavaScript,图像等)


为了节省客户端下载时间和网络使用,是否可以使用HTML5的localStorage功能来存储链接的样式表,javascript文件和二进制数据(例如图像)的内容,而不是每次都点击服务器?

这会让事情变得复杂 - 因为我认为你必须通过JavaScript而不是仅仅添加链接资产 script 要么 link 元素,为没有启用JavaScript的人打破页面?除非您可以解析内容(使用 HEAD 请求在浏览器下载之前检查上次修改日期和其他标题。

或者最好只是坚持 304 Not Modified 和 eTag 头?


10354
2018-01-26 11:29


起源



答案:


我认为在这种情况下你应该考虑离线缓存:

您还可以将用户输入数据存储在localStorage或sessionStorage中:

不要使用globalStorage(不是标准)。

我写了一篇关于离线的文章,请参阅: http://hacks.mozilla.org/2010/01/offline-web-applications/

这是关于离线的,但这种机制可用于提升您的网络应用程序。


9
2018-01-26 16:32



在没有网站离线的情况下,您可以从缓存中受益吗?或者最好将它留给浏览器来为样式表和JavaScript(使用远期过期标题,并设置304标题 - 尽管这会在PHP或ASP.NET上进行额外的工作)。图像占用了大量带宽并且没有更改,但仍在下载(就好像浏览器缓存无法正常工作) - SamWM
仅当您更新清单时才会获取文件(无论客户端连接状态如何)。 - Paul Rouget


答案:


我认为在这种情况下你应该考虑离线缓存:

您还可以将用户输入数据存储在localStorage或sessionStorage中:

不要使用globalStorage(不是标准)。

我写了一篇关于离线的文章,请参阅: http://hacks.mozilla.org/2010/01/offline-web-applications/

这是关于离线的,但这种机制可用于提升您的网络应用程序。


9
2018-01-26 16:32



在没有网站离线的情况下,您可以从缓存中受益吗?或者最好将它留给浏览器来为样式表和JavaScript(使用远期过期标题,并设置304标题 - 尽管这会在PHP或ASP.NET上进行额外的工作)。图像占用了大量带宽并且没有更改,但仍在下载(就好像浏览器缓存无法正常工作) - SamWM
仅当您更新清单时才会获取文件(无论客户端连接状态如何)。 - Paul Rouget


您可以对您的图像/二进制数据进行base64编码并将其作为字符串存储在localStorage中,使用base64网址在少数浏览器中不起作用,因此它不是一个完美的解决方案。

CSS和js会很好,你可以将它们写入页面,或者也使用base64 url​​。

我不担心这会破坏非JS用户的网站,因为JS被禁用你无论如何都无法访问localStorage。


3
2018-06-06 14:06



不运行js的人应该期望大多数网站都能破解。开发人员必须提前考虑是否值得为此提供支持。 - Camilo Martin
我认为如果您要添加需要javascript的功能,则不要完全弃用原始回退行为。 - garrow
是的,我都是为了优雅的退化,但有时候会涉及单独的代码,而且这是额外的努力,有时候是不值得的,恕我直言。 IE6也是如此。 - Camilo Martin