如何缓存脚本和模块?
How do scripts and modules get cached?
我知道对于像图片这样的资产,有一个 src
与之关联,这意味着浏览器将在 [=10] 对该资产发出新请求之前检查该资产的到期日期=] 再次下载该资产,然后将其呈现到页面上。这如何与 React 等脚本或模块一起工作?如果是 CDN,浏览器是否会先下载脚本,然后在第一次遇到脚本时 运行 下载它?然后每次之后当它再次需要这个脚本时,它是否只是从它的缓存中加载它(而不是从源代码中再次下载它)并 运行ning 它?如果您将 React 作为节点模块,会发生同样的事情吗?
这是一个很大的话题,基本的答案是浏览器也会按照您告诉它们的方式缓存资产。您提到图像有过期日期,这些日期在服务器发送的 HTTP headers 中设置。您可以为 javascript 和您从服务器请求的任何其他文件设置相同的 headers,浏览器将以相同的方式缓存它们。
在(从服务器或缓存中)获取 javascript 资产后,浏览器解析并 运行 发送您的 javascript。
节点模块位于节点区域。通常,在浏览器中使用 node_modules 中的代码之前,您需要通过 webpack 或 browersify 等工具 运行 它。这些工具将所有代码(您的应用程序+反应+其他任何东西)捆绑到一个文件(通常)中,然后将其提供给浏览器。浏览器对 node_modules 一无所知。它只是解析并 运行s 您提供的 javascript。
一个捆绑文件根据发送的 headers 进行缓存。 CDN(基本上)只是一个在快速提供资产方面经过优化的特殊服务器。
我知道对于像图片这样的资产,有一个 src
与之关联,这意味着浏览器将在 [=10] 对该资产发出新请求之前检查该资产的到期日期=] 再次下载该资产,然后将其呈现到页面上。这如何与 React 等脚本或模块一起工作?如果是 CDN,浏览器是否会先下载脚本,然后在第一次遇到脚本时 运行 下载它?然后每次之后当它再次需要这个脚本时,它是否只是从它的缓存中加载它(而不是从源代码中再次下载它)并 运行ning 它?如果您将 React 作为节点模块,会发生同样的事情吗?
这是一个很大的话题,基本的答案是浏览器也会按照您告诉它们的方式缓存资产。您提到图像有过期日期,这些日期在服务器发送的 HTTP headers 中设置。您可以为 javascript 和您从服务器请求的任何其他文件设置相同的 headers,浏览器将以相同的方式缓存它们。
在(从服务器或缓存中)获取 javascript 资产后,浏览器解析并 运行 发送您的 javascript。
节点模块位于节点区域。通常,在浏览器中使用 node_modules 中的代码之前,您需要通过 webpack 或 browersify 等工具 运行 它。这些工具将所有代码(您的应用程序+反应+其他任何东西)捆绑到一个文件(通常)中,然后将其提供给浏览器。浏览器对 node_modules 一无所知。它只是解析并 运行s 您提供的 javascript。
一个捆绑文件根据发送的 headers 进行缓存。 CDN(基本上)只是一个在快速提供资产方面经过优化的特殊服务器。