脚本和模块如何缓存?

时间:2017-02-06 08:51:15

标签: performance caching browser assets browser-cache

我理解像图片之类的资源,有src与之关联,这意味着浏览器会在src对该资产发出新请求之前检查该资产的到期日期再次下载该资产,然后将其呈现到页面上。如何使用React等脚本或模块?如果它是CDN,浏览器是否首先下载脚本,然后在第一次遇到脚本时运行它?然后每当它再次需要这个脚本时,是否只是从缓存中加载它(而不是从源代码再次下载)并运行它?如果将React作为节点模块,这会发生同样的事情吗?

1 个答案:

答案 0 :(得分:1)

这是一个非常大的主题,基本的答案是浏览器会缓存资产的方式。您提到图像具有过期日期,这些日期在服务器发送的HTTP标头中设置。您可以为javascript和您从服务器请求的任何其他文件设置相同的标头,浏览器将以相同的方式缓存它们。

在获取javascript资产后(从服务器或缓存中),浏览器会解析并运行您的javascript。

节点模块位于节点域中。通常,在浏览器中使用node_modules中的代码之前,可以通过webpack或browersify之类的工具运行它。这些工具将所有代码(您的应用程序+反应+其他任何内容)捆绑到一个文件中(通常),然后将其提供给浏览器。浏览器对node_modules一无所知。它只是解析并运行您提供的JavaScript。

根据发送的标头缓存一个捆绑文件。 CDN(基本上)只是一个在快速提供资产时优化的特殊服务器。