用Angular8引入PWA并验证Ivy的性能
在Angular8中引入PWA并验证Ivy的性能。
现在(2019年11月19日),Angular的版本为8.2.14。下面是创建PWA应用程序的新项目的步骤。
前提确认:所需的事物
在服务器端,
-
- HTTPS通信
-
- 支持HTTP/2协议
- HTTP/2压缩
Firebase Hosting现在已经支持HTTP/2,所以在Firebase Hosting上使用HTTP/2不需要做任何额外的配置。
如果在本地进行测试的话,
只需一种选择,请将以下内容以中文进行含义释义:
– HTTPS不需要 –
「在开发过程中,可以从http://localhost利用http通信来使用Server Worker,这是个例外」
已经安装了Node和npm。
$ node --version
v10.15.3
$ nmp --version
6.4.1
创建一个 Angular 项目。
- 下記コマンドでAngular CLIをインストール
$ npm install -g @angular/cli@latest
- プロジェクトフォルダに移動し新しいプロジェクトを作成
$ ng new my-app --routing --style=scss
若输出显示“成功初始化git”,则表示成功。
- プロジェクトができたら、プロジェクトフォルダに移動。
$ cd my-app
ng –versionでバージョンを確認。
$ ng --version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 7.1.4
Node: 10.15.3
OS: win32 x64
Angular: 7.1.4
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.11.4
@angular-devkit/build-angular 0.11.4
@angular-devkit/build-optimizer 0.11.4
@angular-devkit/build-webpack 0.11.4
@angular-devkit/core 7.1.4
@angular-devkit/schematics 7.1.4
@ngtools/webpack 7.1.4
@schematics/angular 7.1.4
@schematics/update 0.11.4
rxjs 6.3.3
typescript 3.1.6
webpack 4.23.1
哎?第七个版本?不管从头多少次重试,都会出现这种情况,只得通过下一个指令进行升级。
$ ng update @angular/cli @angular/core
版本确认。
$ ng --version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 8.3.19
Node: 10.15.3
OS: win32 x64
Angular: 8.2.14
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.803.19
@angular-devkit/build-angular 0.803.19
@angular-devkit/build-optimizer 0.803.19
@angular-devkit/build-webpack 0.803.19
@angular-devkit/core 8.3.19
@angular-devkit/schematics 8.3.19
@angular/cli 8.3.19
@ngtools/webpack 8.3.19
@schematics/angular 8.3.19
@schematics/update 0.803.19
rxjs 6.5.3
typescript 3.5.3
webpack 4.39.2
好的。
安装 Service Worker
以下的指令。
$ ng add @angular/pwa --project=my-app
安装后,可以通过ngsw-config.json文件来确认预取功能是否已设置(默认预取assets文件夹中的所有文件、app根目录下的index.html文件、所有CSS文件以及.JS文件)。

安装App Shell(可选)
App Shell是什么?自由选择,尝试搜索一下。
“App Shell是一种构建PWA(Progressive Web App)的架构,它可以像原生应用程序一样即时加载,并且不依赖于网络环境进行可靠的加载。
具体来说,首先构建应用程序的静态部分,例如导航等,在index.html中预先渲染并嵌入。(换句话说,这意味着对应用程序的某些部分进行了预渲染)
用户将感知到应用程序立即响应,并且体验响应时间得到了提升”来自于从零开始学习Angular Universal的SSR知识。
总之,似乎加载速度变快了。然而,根据《使用Angular开始App Shell》,加载时间从755毫秒改善为711毫秒。变化并不是很大。我决定不使用它了。如果想要安装,可以使用以下命令。
$ ng generate app-shell --clientProject=my-app --universalProject=my-app
由于想要使用Material,需要进行安装。
$ ng add @angular/material
如果问到以下问题,请选择自己喜欢的主题后按下回车。
? Choose a prebuilt theme name, or "custom" for a custom theme:
Indigo/Pink [ Preview: https://material.angular.io?theme=indigo-pink ]
Deep Purple/Amber [ Preview: https://material.angular.io?theme=deeppurple-amber ]
Pink/Blue Grey [ Preview: https://material.angular.io?theme=pink-bluegrey ]
Purple/Green [ Preview: https://material.angular.io?theme=purple-green ]
> Custom


暫時設定為自定義。
下一個問題是
兩個都輸入Y然後按下Enter鍵。
? Set up HammerJS for gesture recognition? Y
? Set up browser animations for Angular Material? (Y/n) Y
建造方法
首先,使用以下命令进行构建。
$ ng build --prod --output-path=dist --delete-output-path=true
如果已安装了App-shell,可以使用以下命令进行构建(即使安装了App-shell,也可以使用上述命令进行构建而不使用App-shell)。
$ ng run my-app:app-shell

如果构建了App-shell,则会创建一个名为dist/<ProjectName>的文件夹,其中包含一组文件。
确认行动
PWA开发有以下限制:
1. 无法通过ng serve命令进行功能验证。
2. 只有进行Production(生产环境)的构建才能进行功能验证。
这种方法可以如下所示。
- どのディレクトリからでもいいので次のコマンドでhttp-serverをインストール。
$ npm install -g http-server
- そしたら、プロジェクトルートのフォルダに移って、次のコマンドでhttp-serverを起動。
$ http-server ./dist -p9000 -c-1 -o
./dist:将dist文件夹放在根目录下
-p3000:将端口号指定为9000
-c-1:清空缓存后启动
-o:打开浏览器

-
- より簡単な方法
- つぎのコマンド
$ npx node-static ./dist --spa --port=9000
这也一样。
打开初始页面并访问http://127.0.0.1:9000/打开。


验证Ivy的表现
在Angular8中,默认情况下,Ivy是被关闭的。
没有Ivy的表演

在Ivy的表演中
在线的方式。
编辑以下文件。
//tsconfig.json
{
"compilerOptions": { ... },
"angularCompilerOptions": {
"enableIvy": true
}
}

脚本的改进使得剂量从614毫克减少到436毫克。
“dist”文件夹的大小为1,081,833字节。与之前相比几乎没有变化。
让我们来尝试用 Angular CLI v8 来制作 PWA!通过 Angular 使用 App Shell 来入门。Angular v8 已经发布了!它减小了捆绑大小,并且可使用新的渲染引擎 Ivy 的预览版本!