【问题标题】:How do scripts and modules get cached?脚本和模块如何被缓存?
【发布时间】:2017-06-23 03:37:28
【问题描述】:

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

【问题讨论】:

    标签: performance caching browser assets browser-cache


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!那么我是否正确地说,无论缓存如何,每次访问不同的 URL 时都必须运行所有资产(图像和脚本),即使它们是来自同一主机的页面?例如,如果您在访问 www.examplepage.com/cups 时需要运行鸭子图像和 react 脚本,而在访问 www.examplepage.com/cup/1 时需要运行完全相同的资产,这些资产会运行两次吗?
    • 正确!如果您考虑一下,需要运行 javascript 才能实际执行任何操作。甚至注册事件监听器等也需要从某种命令式过程开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多