angular官网高级文档AngularUniversal部分的翻译总结,这东西在angular4开始正式被官方支持了,目前其实支持的服务器端还没有很多,但好歹包括了node和DotNetCore,算是个进一步优化应用以及扩展需求(强化服务端能力)的方案。

正文开始:

------------------- 手动分割线 ---------------------

注意: 本文属于实验性质,可能会更改。

Angular 统一平台

目录

  • 概述

    • 如何工作
    • 为何这么做
      • SEO / 无JavaScript
      • 启动性能
    • 例子
  • 准备
    • 安装工具
    • 相对组件的URL
    • 服务端转换
  • AOT配置
    • 主入口
    • 创建teconfig-aot.json
    • webpack配置
      • 加载器
      • 插件
      • 输入
      • 输出
  • AOT构建
    • 源映射
    • AOT服务端
  • 统一平台配置
    • 服务端代码

      • 应用服务器模块
      • Universal引擎
      • Web服务器
    • 创建tsconfig-uni.json
    • 创建webpack.config.uni.js
      • 入口
      • 输出文件
  • Universal的构建与服务
    • 运行

      • 禁用客户端App
      • 节流
  • 总结

一、概述

Angular统一平台(Universal)是一项让angular应用运行在浏览器之外的技术。使用Universal你可以运行你的angular应用在一个基于node的服务器中,你可以用它来按需生成html输出或预先生成html文件。

如何工作

angular统一平台通过编译app来让其能运行在服务器端,也可以是预先在服务器端编译好(AOT编译)。这跟传统的AOT不同因为应用是使用platform-server来编译而不是platform-browser。这一更改会让app有能力在服务端先渲染好HTML字符串而不是在浏览器端操作DOM。
这样的app有一些限制。比如,它不能处理浏览器事件(比如鼠标或键盘输入,也不能发送ajax请求)。

一个已存在的叫做Preboof的工具可以记录浏览器事件以便能在整个angular应用加载完成时执行它们

本文中我们将使用webpack来创建一个AOT编译的app,然后将创建一个Universal服务器来构建这个app。

为何这么做

有两个主要的原因:

SEO / 无JavaScript

你的高度互动的angular应用可能不会很容易被搜索引擎找到,你可以生成一个静态版本的app。这会让你的app更容易被搜索到,链接到以及导航到。同时能让搜索引擎或社交媒体可以提供网站预览快照这些能力。

启动性能

应用的启动时间对留住用户来说很重要。尽管AOT编译能加快应用的启动时间,这还不是足够的,尤其是第网速下的手机设备。有53%的手机端访问会被放弃如果页面花费了超过三秒的时间来加载。你的应用必须加载快一点来留住用户防止他们想做点别的。
使用angular Universal的话,你可以先生成一个基本界面就像是完整的应用。这个界面是个纯html界面,即使JS被禁用了也可以显示。这个界面不会处理浏览器事件,但是他们支持使用routeLink进行导航。
推荐的方案是先服务一个用来着陆的静态版本的界面,你的angular应用就在它的后面,两者看起来十分接近,并且在应用完整加载时就能提供完整的交互体验。这肯定比让用户一直看着一个loading字样要好很多。

高网速下启动比较

低网速下启动比较

示例

AOT与Universal版本的app都通过AOT编译器来编译。区别是AOT版本将编译好的打包文件发送到客户端,而Universal版本则是编译到一个服务端页面,渲染成实际界面后才发送到浏览器。
AOT 版本的项目需要创建如下文件:

  • index-aot.html文件
  • 主入口文件 main-aot.ts
  • TS的配置文件 tsconfig-aot.json
  • webpack配置文件 webpack.config.aot.js
  • 轻量级的服务端配置文件 bs-config.aot.js
    Universal版本的应用需要创建如下文件:
  • 服务端app模块 app.server.ts
  • Universal渲染器 universal-engine.ts
  • 一个node的expressweb服务器来处理请求 server-aot.ts
  • TS配置文件 teconfig-uni.json
  • webpack配置文件 webpack.config.uni.js

目录结构就像这样:

目录结构

二、准备

安装工具

需要安装以下依赖:

  • npm install @angular/compiler-cli @angular/platform-server --save-dev
  • npm install webpack @ngtools/webpack raw-loader express --save-dev

组件相对路径

AOT下的组件路径

服务端转换

AppModule的更改

三、AOT配置

普通的AOT加Webpack配置略过

四、AOT构建

即 npm run build:aot
将生成一个输出文件.js以及一个.js.map映射文件。

五、AOT服务端

即写一个轻量服务器来监听请求:

bs-config.aot.js

可以使用 npm run serve:aot 来运行。

六、Universal配置

现在你可以使用相似的方式来搭建Universal应用。

服务端代码

包括:

1. app server模块

app.server.ts

2. Universal引擎

universal-engine.ts

3. web服务器

server-aot.ts(1)

server-aot.ts(2)

差不多就是在express服务器上引导angular模块并渲染到index-aot.html,将页面返回给浏览器呈现。

七、构建与服务

即使用npm run build:uni这些指令来构建,以及使用npm指令运行express服务器监听端口。

八、总结

angular Universal可以极大的加快应用的启动速度与优化体验。网络越慢能得到的好处越大(首次加载)。

Angular Universal(统一平台)笔记的更多相关文章

  1. angular2 学习笔记 ( server-side rendering, angular universal, 服务端渲染 )

    更新 : 2018-01-10  大半年过去了依然没有做 server side render 的冲动,但是一直有关注这方便的做法. 今天领悟了一些道理, 这里做个记入. server side re ...

  2. Windows统一平台: 开发小技巧

    Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...

  3. UWP 统一平台开发介绍

    什么是UWP? 很多程序员都有一个梦想:希望自己开发的软件能够轻而易举的在所有平台上运行,而不是把同样的需求,用不同的技术.工具重新开发才能够运行在所有平台上.这就是跨平台,很多软件从业者都在为这个梦 ...

  4. 3.2 配置构建Angular应用——简单的笔记存储应用

    本节我们会通过构建一个简单的笔记存储应用(可以载入并修改一组简单的笔记)来学习如何应用Angular的特性.这个应用用到的特性有: 在JSON文件中存储笔记 展示.创建.修改和删除笔记 在笔记中使用M ...

  5. angular $q的学习笔记转帖

    http://blog.segmentfault.com/bornkiller/1190000000402555 angular $q的一个不错的学习笔记

  6. Angular 5.x 学习笔记(2) - 生命周期钩子 - 暂时搁浅

    Angular 5.x Lifecycle Hooks Learn Note Angular 5.x 生命周期钩子学习笔记 标签(空格分隔): Angular Note on cnblogs.com ...

  7. Angular 5.x 学习笔记(1) - 模板语法

    Angular 5.x Template Syntax Learn Note Angular 5.x 模板语法学习笔记 标签(空格分隔): Angular Note on github.com 上手 ...

  8. 3.2.1 配置构建Angular应用——简单的笔记存储应用——编辑功能

    本节我们会接着上节课的内容,继续来完成使用Angular来创建简单的笔记存储应用,上一节课,我们完成了笔记的展示功能,本节课,我们来完成编辑功能. 编辑主要是两个功能:编辑现有的笔记以及创建新笔记.首 ...

  9. 3.2.1 配置构建Angular应用——简单的笔记存储应用——展示功能

    本节我们会通过构建一个简单的笔记存储应用(可以载入并修改一组简单的笔记)来学习如何应用Angular的特性.这个应用用到的特性有: 在JSON文件中存储笔记 展示.创建.修改和删除笔记 在笔记中使用M ...

随机推荐

  1. [转]同一台Windows机器中启动多个Memcached服务

    Memcached的安装后,如果手头上只有一台机器,又想做多节点测试咋办? 这就需要在一台机器上启动多个Memcached服务了. 假设Memcached在如下目录:C:\memcached\memc ...

  2. linux_Nginx日志

    错误信息日志配置: 日志文件默认:/application/nginx/logs/erroe.log error_log logs/error.log error; # 不写默认就有,默认error, ...

  3. python_斐波那契数列

    什么是斐波那契数列? -- 一组第从第三个值开始,每个值都等于前两个值之和的一种有意思的数列 如[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 如何用程序进行实现? -- 逻辑整 ...

  4. kindeditor使用

    下载地址http://kindeditor.net/down.php @官方文档 使用步骤: 引入js <script charset="utf-8" src="r ...

  5. BSA Network Shell系列-redi命令

    redi ## 1 功能概述 redi将输出重定向到一个文件中 ## 2 语法 redi [-?] [-a] filename ## 3 使用示例 1 将输出重定向到隐式路径所在主机的/tmp/hah ...

  6. Web Magic 简介

    WebMagic in Action Little book of WebMagic. WebMagic是我业余开发的一款简单灵活的爬虫框架.基于它你可以很容易的编写一个爬虫. 这本小书以WebMag ...

  7. vi使用手册

    VI是unix上最常用的文本编辑工具,我自己电脑上面也装了VIM编辑器,这个据称是程序员码字神器我实在没觉得那里舒服了,所以又用回了自己的Sublime.这里整理下vi常用操作,如果以后直接在Linu ...

  8. Linux指令--文件和目录属性

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...

  9. k8s 如何 Failover?- 每天5分钟玩转 Docker 容器技术(127)

    上一节我们有 3 个 nginx 副本分别运行在 k8s-node1 和 k8s-node2 上.现在模拟 k8s-node2 故障,关闭该节点. 等待一段时间,Kubernetes 会检查到 k8s ...

  10. Mysql的主从配置

    前言:这次学习分布式的思想要配置mysql的主从复制和读写分离,我在主从配置上踩到很多坑,在此演示一遍配置过程,并附上问题的说明和自己的一些见解 Mysql主从复制的原理 附上原理图: mysql的主 ...