この記事では、Angular の新しいコンパイル エンジン Ivy について説明し、Ivy コンパイルとは何か、および Ivy コンパイルを有効にする方法を紹介します。
Angular
Angular は現在世界で最も人気のあるフレームワークの 1 つですが、多くのライブラリとコンパイルにより、このフレームワークは知識を習得する必要があり、中国での利用率は高くありません。同時に、Angular によって生成される長いロード時間と大きなプロジェクト ファイルにより、React
と Vue
の優れたパッケージング量と優れた開発エクスペリエンスにも負けます。
しかし、Angular
の原理をマスターすれば、React アプリケーションとほぼ同じパフォーマンスを持つ Web アプリ
を開発することもできます。以前の Angular 8.0
バージョンでは、View Engine コンパイラを使用して Angular
プロジェクト ファイルをコンパイルしていたため、パッケージ化の量が多く、バグの追跡が困難でした。そこで Angular
チームは Ivy
コンパイラを起動しました。 [関連チュートリアルの推奨事項: "angular チュートリアル"]
Ivy コンパイルとは
Ivy
は次世代のテンプレートのコンパイル エンジンとレンダリング パイプライン ツールは非常に高度で、これまで利用できなかった高度な機能と高速なコンパイル速度を提供します。実際、Ivy
は、Angular
の以前のレンダリング エンジンを完全に書き直したもので、具体的には 4 回目の書き直しです。Ivy
を使用すると、コンポーネントを個別にコンパイルできますコンパイル済みのアプリケーションを書き直す場合、変更されたコンポーネントのみがコンパイルに関与します。
以下は、angular
Ivy
を使用したコンパイル前後のボリューム変化の比較です。
あなたプロセスを確認できます
Ivy
treeshakable
同時に
Ivyもう 1 つの重要な点は、プロジェクト ファイル 、コンパイルおよびパッケージ化プロセス中に未使用のコードを削除することを意味します。これは、
Rollup や
Uglify などのいくつかのツールを通じて行うこともできます。ビルド プロセス中に、
treeshaking ツールは静的分析を使用して、未使用および参照されていないコードを排除します。静的解析の依存関係やコードの参照により、条件論理判定コードが存在する場合、ツールが正しく認識できずエラーが発生します。
ローカリティ
ローカリティとは、変更された部分を再修復することにより、ネイティブ コードを使用して各コンポーネントを個別にコンパイルするプロセスを指します。プロジェクト ファイル全体を再コンパイルしてビルドを高速化すると、ビルド速度が大幅に向上します。前のAngular コードでは、各コンポーネントに親情報があるため、コンパイルの依存関係が生じ、より多くのコンパイル済みファイルが生成されます。
Ivy では、各コンポーネントは、依存関係を宣言できる名詞とパッケージ名を除き、コンポーネント自体に関する情報のみを生成します。
Ivy コンパイルの例
Angular で次のコードを書いてみます:<div> <p>ivy works</p> <app-child></app-child> </div>Here
app-child は参照される子コンポーネントを表します。
Ivy を通じて取得した
Ivy.component.js は、図
Ivy の条件で再度コンパイルすると、今度は次のディレクトリ構造が得られます。
ivy.component。 js および
ivy.component.ngfactory.js を使用して、
View Engine コンパイル済みファイルを表示します
のコンパイルに比べて、ファイルの種類とコンパイル後のコード量が大幅に増加していることがわかります。
Angular
アプリケーションは主にコンポーネントとその HTML
テンプレートで構成されます。コンポーネントは Typescript
言語で記述され、デコレータを使用して定義されます。ブラウザは Angular
によって提供されるコンポーネントとテンプレートを直接理解できないため、Angular
アプリケーションは、ブラウザで実行する前にコンパイルする必要があります。 これは、
のコンパイル プロセスの図です:
在浏览器下载和运行代码之前的编译阶段,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.json
中aot
设置为true
。
Ivy运行时
新的运行时引擎基于increnmental DOM的概念。这是一种使用指令表达和应用更新到 DOM 树的方法。DOM 更新是 Angular
中变化检测的主要部分,因此这个概念可以方便地应用到框架中。在在这篇文章中可以了解更多关于它的内容,它解释了这个概念背后的推理,并将它与React 中的Virtual DOM进行了对比。增量 DOM 也恰好是一个库,但是新的 Ivy 引擎没有使用它,而是实现了自己的增量DOM版本。
在之前Angular
的主要实现逻辑是实例化组件、创建DOM节点以及进行更改检测,而这个整体是通过一个很小的原子单元实现的(atomic unit)。编译器只是生成有关的组件以及组件中定义元素的元数据meta data
。如下图
而新的Ivy
引擎下的步骤如下:
可与看出模板指令是实例化组件、创建 DOM 节点和运行变更检测的逻辑所在。但是它已经从整体的解释器转移到了单个的指令中。而Ivy
带来的另一个优点是对于变更检测(change detection)的调试。新的Ivy
编译环境下可以直接在模板函数中放置断点即可调试组件的变更检测。
新的编译器还会将一组独立的Typescript类转换
编译为表示Class组件
的的AST。这些转换都会被实现为一种纯函数,这个函数接受表示装饰器的元数据meta data
并将该定义作为静态字段添加到组件类中。
上記は Ivy
コンパイル エンジンの紹介であり、新しい Ivy
は元の変更検出にも変更を加えます。これについては、変更に関する次の記事で説明します。検出、要約。
参考記事:
- Angular の Ivy エンジン: コンパイル、ランタイム、変更検出についての最初の詳細
- Ivy を理解するための 5 分
- Angular Ivy ライブラリのコンパイルを理解する
- ##DOM を直接操作するレンダラーと ViewContainerRef を理解する
- Eliran Eliassy — Ivy の準備をしましょう — Angular の第 3 世代レンダラー エンジン
EliassyIvy の兄貴分 の紹介で、Angular アプリケーションのデバッグのブラック テクノロジを示します。
元のアドレス: https://juejin.cn/post/6988811689344892941著者: edisonプログラミング関連の知識について詳しくは、次のサイトをご覧ください。 :
プログラミングビデオ! !
以上がAngular の Ivy コンパイルとは何ですか? Ivy コンパイルを有効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
