【问题标题】:How does differential loading in Angular 8 manages size of two separate bundles?Angular 8 中的差异加载如何管理两个单独包的大小?
【发布时间】:2020-03-29 09:58:05
【问题描述】:

差异加载是一种策略,其中 CLI 构建两个单独的包作为已部署应用程序的一部分。

Angular CLI 8 及更高版本默认支持差异加载。对于工作区中的每个应用程序项目,您可以根据应用程序项目中的 browserslist 和 tsconfig.json 文件配置生成构建的方式。

如果我们有两个具有不同加载特性的独立包,是否会导致构建大小问题和应用程序性能问题?

请分享您的建议,以便我可以在当前项目中选择此功能。

【问题讨论】:

  • 您可以编辑您的帖子以使其清晰吗? “导致尺寸问题?”令人困惑,“或将导致应用程序性能”也是如此。

标签: angular angular8


【解决方案1】:

差异加载是浏览器根据自己的能力在现代或旧版 JavaScript 之间进行选择的过程。现在,我们默认通过执行应用程序的现代构建 (es2015) 和旧版构建 (es5) 来利用这一点。当用户加载您的应用程序时,他们会自动获得所需的捆绑包。

https://blog.angular.io/version-8-of-angular-smaller-bundles-cli-apis-and-alignment-with-the-ecosystem-af0261112a27

简而言之,它将使较新的浏览器获得具有较新功能的捆绑包,而较旧的浏览器将获得转换后的版本。所以是的,它会增加您的应用程序在服务器上的大小,但不会增加将要下载的捆绑包(您不会同时下载两个捆绑包等)。

如果查看生成的 index.html 例如:

<script src="runtime-es2015.33c6d44d6f111520cede.js" type="module"></script>
<script src="runtime-es5.33c6d44d6f111520cede.js" nomodule defer></script>

带有type="module&lt;script&gt; 标签将被较新的浏览器下载,它们将忽略带有nomodule 属性的&lt;script&gt;

nomodule 属性是一个布尔属性,用于防止脚本在支持模块脚本的用户代理中执行。

What’s the purpose of the HTML “nomodule” attribute for script elements if the default is text/javascript?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2020-06-21
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2020-04-05
    相关资源
    最近更新 更多