iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Angular中怎么开启Ivy编译
  • 909
分享到

Angular中怎么开启Ivy编译

2024-04-02 19:04:59 909人浏览 薄情痞子
摘要

angular中怎么开启Ivy编译,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。AngularAngular是目前全球最受欢迎的框架之一,但由

angular中怎么开启Ivy编译,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Angular

Angular是目前全球最受欢迎的框架之一,但由于在框架中有许多库以及编译知识需要学习,在国内的使用率并不高。同时由于加载时间长,因为Angular生成的项目文件较大也被React以及Vue更优秀的打包体积以及更好的开发体验所打败。

但如果掌握了Angular的原理之后,我们也能开发出与React应用性能所差无几的WEB App。而由于之前Angular 8.0版本之前使用的是View Engine编译器来对Angular项目文件进行编译,造成了打包体积较大以及不容易追踪bug。于是Angular团队推出了Ivy编译器。

什么是Ivy编译

Ivy是下一代模板编译引擎以及渲染的管道工具,他非常先进,并提供了以前没有的高级功能以及更快的编译速度。实际是IvyAngular之前渲染引擎的完全重写,具体来说是第四次重写,使用Ivy可以独立得编译组件,同时对于热更新也支持的更好,在重写编译应用程序时会只涉及编译发生更改的组件。

下面是一个angular使用Ivy编译前后的体积变化对比:

Angular中怎么开启Ivy编译

可以看出经过Ivy优化,打包体积减少了不少。

treeshakable

同时Ivy另一个重要的点是对于项目文件的treeshaking,意思是在编译打包过程中删除未使用的代码,这也可以通过一些工具如Rollup以及Uglify来完成。在构建的过程中,treeshaking工具使用静态分析消除未使用以及未引用的代码。由于代码的静态分析依赖与引用,当有条件的逻辑判断代码存在的时候,工具不能正确识别,会出现失败的情况。

局部性

局部性指的是在使用本地代码独立的编译每个组件的过程,通过对于修改部分的重编译而不是整个项目文件的重新编译来更快地构建,这会显著的提升构建速度。在之前的Angular代码中,每个组件都存在它的父信息,这就导致了编译依赖,从而编译的文件变多。而在Ivy中,每个组件只会生成关于该组件自身的信息,除去了可申明依赖项的名词和包的名称。

Ivy编译样例

在Angular中尝试编写如下代码:

    <div>
        <p>ivy works</p>
        <app-child></app-child>
    </div>

这里的app-child代表一个引用的子组件。通过Ivy编译得到的Ivy.component.js如图

Angular中怎么开启Ivy编译

而我们再通过在未开启Ivy的条件下进行再一次编译,这一次得到如下的目录结构:

Angular中怎么开启Ivy编译

这里挑两个主要的文件ivy.component.jsivy.component.ngfactory.js来展示View Engine编译后的文件

Angular中怎么开启Ivy编译

Angular中怎么开启Ivy编译

可以看到,编译后的文件种类以及代码量相较于Ivy编译都变多了不少。

AOT编译和JIT编译

Angular 应用主要由组件及其 html 模板组成。组件是由typescript语言编写以及使用装饰器定义而成,由于浏览器无法直接理解 Angular 所提供的组件和模板,因此 Angular 应用程序需要先进行编译才能在浏览器中运行。

这里有一张angular的编译过程图示:

Angular中怎么开启Ivy编译

在浏览器下载和运行代码之前的编译阶段,Angular 预先(AOT)编译器会先把你的 Angular HTML 和 TypeScript 代码转换成高效的 javascript 代码。 在构建期间编译应用可以让浏览器中的渲染更快速。而在官方文档中给出了使用AOT的部分原因:

  • 更快的渲染

  • 更少的异步请求

  • 较小的 Angular 框架下载大小

  • 尽早检测模板错误

  • 更高的安全性( AOT 在将 HTML 模板和组件提供给客户端之前就将其编译为 JavaScript 文件。没有要读取的模板,没有潜藏风险的客户端 HTML 或 JavaScript eval,受到注入攻击的机会就更少了。)

在早期的Angular8版本之前,Angular并没有采用AOT编译的方法,而是采用了JIT(即时编译)编译来生成应用,它会在运行期间在浏览器中编译你的应用。JIT编的一般步骤是、 首先将Typescript代码(包括用户编写的代码,以及Angular框架、Angular编译器代码)编译成JavaScript代码。接着将这些代码部署到服务器端然后浏览器发起请求下载代码开始执行,接着Angular启动,Angular调用Angular编译器。对于每个组件类、ngModule、Pipe等都需要编译,之前typescript代码编译为javascript代码所保存的metadata,根据metadata编译出浏览器可以执行的Javascript代码前面图里的NgFactory文件。接着通过NgFactories文件来构建整个应用的具体组件。

这里有对AOT与JIT编译详解的文章:Angular编译机制AOT和JIT

开启Ivy编译

Ivy编译默认采用的是AOT编译方法,在之前angular主要使用的都是JIT编译,如果需要使用Ivy编译,需要修改tsconfig.app.ts中添加angularCompilerOptions选项以及开启enableIvy

{
   "compilerOptions": { ... },
  "angularCompilerOptions": {
    "enableIvy": true
  }
}

其次要确认的是angular配置文件angular.JSONaot设置为true

Ivy运行时

新的运行时引擎基于increnmental DOM的概念。这是一种使用指令表达和应用更新到 DOM 树的方法。DOM 更新是 Angular 中变化检测的主要部分,因此这个概念可以方便地应用到框架中。在在这篇文章中可以了解更多关于它的内容,它解释了这个概念背后的推理,并将它与React 中的Virtual DOM进行了对比。增量 DOM 也恰好是一个库,但是新的 Ivy 引擎没有使用它,而是实现了自己的增量DOM版本。

在之前Angular的主要实现逻辑是实例化组件、创建DOM节点以及进行更改检测,而这个整体是通过一个很小的原子单元实现的(atomic unit)。编译器只是生成有关的组件以及组件中定义元素的元数据meta data。如下图

Angular中怎么开启Ivy编译

而新的Ivy引擎下的步骤如下:

Angular中怎么开启Ivy编译

可与看出模板指令是实例化组件、创建 DOM 节点和运行变更检测的逻辑所在。但是它已经从整体的解释器转移到了单个的指令中。而Ivy带来的另一个优点是对于变更检测(change detection)的调试。新的Ivy编译环境下可以直接在模板函数中放置断点即可调试组件的变更检测。

新的编译器还会将一组独立的Typescript类转换编译为表示Class组件的的AST。这些转换都会被实现为一种纯函数,这个函数接受表示装饰器的元数据meta data并将该定义作为静态字段添加到组件类中。

看完上述内容,你们掌握Angular中怎么开启Ivy编译的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网VUE频道,感谢各位的阅读!

--结束END--

本文标题: Angular中怎么开启Ivy编译

本文链接: https://www.lsjlt.com/news/76764.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Angular中怎么开启Ivy编译
    Angular中怎么开启Ivy编译,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。AngularAngular是目前全球最受欢迎的框架之一,但由...
    99+
    2024-04-02
  • Ivy编译器中增量DOM的示例分析
    这篇文章主要为大家展示了“Ivy编译器中增量DOM的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Ivy编译器中增量DOM的示例分析”这篇文章吧。作为“...
    99+
    2024-04-02
  • Angular怎么编译打包并使用Docker发布
    这篇文章给大家分享的是有关Angular怎么编译打包并使用Docker发布的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。环境:Angular CLI: 11.0.6Angular: 11.0.7Node: 12....
    99+
    2023-06-15
  • Python中怎么实现编译和反编译
    这篇文章将为大家详细讲解有关Python中怎么实现编译和反编译,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、用Pyinstaller打包python代码1. 安装Pyinstaller安...
    99+
    2023-06-16
  • IDEA中怎么开发Angular
    本文小编为大家详细介绍“IDEA中怎么开发Angular”,内容详细,步骤清晰,细节处理妥当,希望这篇“IDEA中怎么开发Angular”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • Ubuntu中怎么编译openssl
    这篇“Ubuntu中怎么编译openssl”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Ubuntu中怎么编译openssl...
    99+
    2023-07-04
  • c语言编译器怎么打开
    要打开 c 语言编译器,请先安装编译器,然后在命令提示符或终端中导航到源代码文件所在的目录,最后使用相应的命令编译源代码并运行可执行文件。 如何打开 C 语言编译器 第一步:安装 C ...
    99+
    2024-04-05
    linux c语言 c++ macos
  • Android 11编译第三弹 ADB开启ROOT权限
    一、为什么需要adb root权限 问题:Relese版本,默认adb访问会降级到shell权限,一些敏感操作不能进行,远程调试比较麻烦。且Release版本没有su模块,不能切换Root用户。 开启adb调试以后,默认进入adb是syst...
    99+
    2023-10-05
    android adb
  • Ubuntu中怎么编译zlib库
    本篇内容主要讲解“Ubuntu中怎么编译zlib库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu中怎么编译zlib库”吧!Ubuntu编译zlib库的方法:下载zlib软件包,然后在...
    99+
    2023-07-04
  • linux下将编译安装的服务怎么设置为开机启动
    这篇文章主要介绍“linux下将编译安装的服务怎么设置为开机启动”,在日常操作中,相信很多人在linux下将编译安装的服务怎么设置为开机启动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux下将编译安装...
    99+
    2023-06-13
  • vue2.6.10+vite2开启template模板动态编译的过程
    在从vue-cli迁移到vite2的时候,之前在代码中使用的模板编译遇到了问题: 我在项目中会根据后台返回的内容动态渲染,如果返回内容中有<el-image>等标签,v-...
    99+
    2023-02-03
    vue开启template模板动态编译 vue template模板编译 vue vite动态编译
  • c++怎么编译
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • 怎么编译Oozie
    本篇内容介绍了“怎么编译Oozie”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是工作流?工作流(WorkFlow)就是工作流程的计...
    99+
    2023-06-02
  • c#怎么编译
    要在 windows 上编译 c# 代码,您可以使用:visual studio:创建 c# 项目,输入代码,并生成解决方案。.net cli 工具包:安装工具包,导航到代码目录,并使用...
    99+
    2024-04-04
    c#
  • ubuntu中怎么用vi编译器
    这篇文章主要讲解了“ubuntu中怎么用vi编译器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ubuntu中怎么用vi编译器”吧!ubuntu使用vi编译器的示例:比如使用vi编译器编辑c...
    99+
    2023-07-04
  • ubuntu中怎么编译fortran代码
    这篇文章主要介绍“ubuntu中怎么编译fortran代码”,在日常操作中,相信很多人在ubuntu中怎么编译fortran代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ubuntu中怎么编译fortra...
    99+
    2023-07-04
  • FreeBSD中怎么编译安装mysql5.5
    FreeBSD中怎么编译安装mysql5.5,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 如果您的系统没有安装cmake,首先,cma...
    99+
    2024-04-02
  • Ubuntu9.10中怎么编译Android源码
    这篇文章将为大家详细讲解有关Ubuntu9.10中怎么编译Android源码,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在 Ubuntu8.04下,应该一切很顺利,但是我装的是9.10版本...
    99+
    2023-06-17
  • Ubuntu中怎么编译安装QGit
    本篇内容主要讲解“Ubuntu中怎么编译安装QGit”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu中怎么编译安装QGit”吧!QGit是一款由Marco Costalba用Qt和C+...
    99+
    2023-06-27
  • Ubuntu中怎么编译安装Xfce4.14
    这篇文章主要介绍“Ubuntu中怎么编译安装Xfce4.14”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Ubuntu中怎么编译安装Xfce4.14”文章能帮助大家解决问题。Xfce 是类 UNIX...
    99+
    2023-06-27
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作