0

这是逻辑上遵循这个问题的问题:

HTML5 应用程序缓存是否相关?

很明显,流行的站点没有使用 HTML 5 应用程序缓存来保存其设计的静态资源。

只需检查<html>标签中的清单属性。它不在那里。

进一步研究 HTML5 localStorage 也没有被使用。

作为一个测试用例,我看了

  • www.google.com
  • www.twitter.com
  • www.facebook.com

只需进入控制台并输入

localStorage.

控制台应该会弹出一个键列表。

这些站点都没有将其静态数据保存到磁盘吗?

为什么是这样?

访问网络以获得未更改的资源似乎是一种资源浪费。

详细说明。如果点击重新加载,页面会重新下载静态资源。使用 Google,您甚至可以看到 URL 路径中使用的静态一词。但是对于这个问题,我使用这个词的概念含义。

4

1 回答 1

6

很明显,流行的站点没有使用 HTML 5 应用程序缓存来保存其设计的静态资源。

您误解了应用程序缓存的设计目的。这是应用程序缓存规范的第一段:

为了使用户即使在网络连接不可用时也能继续与 Web 应用程序和文档进行交互——例如,因为他们在 ISP 的覆盖范围之外旅行——作者可以提供一个清单,其中列出了 Web 所需的文件应用程序脱机工作,这会导致用户的浏览器保留文件的副本以供脱机使用。

http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#introduction-5

因此,应用程序缓存旨在允许 Web 应用程序作者在网络连接不可用时使他们的应用程序工作。

我无法想象 Google、Twitter 或 Facebook 在没有网络连接的情况下如何有效地工作。它们都依赖于用户与其服务器上的大量数据(在 Twitter 和 Facebook 的情况下,是关于其他用户的数据)进行交互。如果没有网络连接,它们本质上是无用的。

同样,localStorage不是为存储可能更改的页面资源而设计的。(我猜你是在暗示这些网站可以将 CSS、JavaScript 和图像文件存储在 localStorage 中——如果我误解了,请道歉。)

本规范介绍了两种相关机制,类似于 HTTP 会话 cookie,用于在客户端存储结构化数据...

第一个是为用户执行单个事务但可能同时在不同窗口中执行多个事务的场景设计的......

第二种存储机制是为跨多个窗口的存储而设计的,并且持续时间超过当前会话。特别是,出于性能原因,Web 应用程序可能希望在客户端存储数兆字节的用户数据,例如整个用户创作的文档或用户的邮箱……

http://www.w3.org/TR/webstorage/#introduction

为了localStorage用于 CSS、JavaScript 和图像文件,您需要页面中的一些 JavaScript 来检查页面localStorage所需的每个资源,然后(以某种方式)检查服务器以查看是否有更新的版本,如果必要时,然后将资源添加到页面的 DOM 中(如果它是新的,则将其存储在 localSorage 中)。

基本上复制 Web 浏览器已经完成的缓存需要大量代码。当您的 JavaScript 正在检查localStorage服务器时,页面会停止呈现。而当浏览器自己下载 CSS 和图像文件时,页面可以同时进行渲染。

于 2013-03-20T23:24:44.753 回答