Angular2发布思路(整理官网Deployment页面)
本文是按着ng2官网的高级内容“Deployment”的思路整理得出的,原文虽然在angular2的中文站下挂着,截止目前却还是英文版未翻译,笔者就在这里结合自己的理解给出原文的一点点整理。
这是原文地址:
1. 最简单的发布流程
最简单指的是开发完成好一个ng2应用后,做最少的事情让用户能在自己的浏览器内访问到此应用。从这句话出发就很容易想到,如何做到“最简单”,自然就是什么都不做,把写好的整个项目往服务器一扔搞定。
当然,即使是对项目文件什么都不做,服务器还是得做一些事情来配合ng2开发的前后端完全分离的网站:
- a. 调整index.html中的<base />标签的值,因为在服务器中的index.html不一定就在根目录下,此时就必须指定其路径。
- b. 调整404错误页,将所有的404错误都重定向到index.html,只有这样才能不让服务器的路由影响到我们ng2的前端路由(深层原因其实就是,我们在浏览器输入地址时,地址先被服务器认为是错误路径给返回错误了,这就得让服务器认为地址有误时将其原封不动重定向给index.html,让其成功被客户端路由识别)
- c. 开启生产模式,ng2默认的引导都会开始开发模式,在引导的代码里执行 enableProdMode() 即可开启生产模式
- d. 简化node_modules。 原因是开发项目时安装的那一大堆(20500+的文件以及180M+的大小)npm包,其实绝大多数在App运行于浏览器时是用不着的,发布项目时,去掉其中用不着的那一大堆文件,自然能节省很大的空间。
2. 产品级优化
接下来,为了优化我们得产品,还需要做一些事情。
AOT编译
全称是 Ahead-of-Time compilation。明确点讲,就是默认情况下ng2使用的是即时编译的方式,App运行过程中需要使用到哪个模块了,就找到它然后编译它,然后才运行,别的且不说,实时编译相比预编译要多使用一个Angular Compiler,听起来就能想到这会拖慢速度,实际上拖慢了不是一点两点,是一大半甚至更多,这货体积贼大。
使用webpack(包括AOT)
webpack是用于代替默认的SystemJS的模块化工具,可以说使用SystemJS进行ng2的打包只是在试水闹着玩,如果要上升到产品级别,webpack要强大得多,包括了预编译以及代码压缩,而不是像SystemJS那样,每使用到新的模块甚至组件模板都要发起请求来获取。
使用rollup消除无用代码
这指的是摇树优化,完成的事情是自动去除掉不再使用的代码,来减小体积,不过需要我们具体去完成的事情好像没有,这个ng2自己帮我们完成了。
修剪库依赖
说的好像是可以进一步修剪使用到的库,举了个例子是RxJS,这个库在开发ng2时会使用到其中的部分功能,比如说Observable,但更多时候也只有这一个模块被用到了,所以可以只引入一个Observable。这其实是ng2自身还存在的一点点美中不足,至少笔者就感觉很怪,为什么用着@angular/xxx的包,还得引入个rxjs或者Observable,期待ng2后续的版本会给出更优雅的方式吧。
性能测试优先
讲的就是通过性能测试手段来优化产品了
3. 原文后面还分ng2端与服务端重新理了一遍上面讲到的
ng2端要做的事情有:
a. <base>标签的路径配置
b. 开启ng2的生产模式
c. 使用模块懒加载(路由中使用loadChildren)
原文还写了一小段来说不需要把懒加载模块import进立即加载的模块中(比如把一个懒加载模块import在了根模块里),这其实不会懒加载,模块还是跟随根模块一起被加载了。服务端要做的事情有:
a. 错误页都要重定向到index.html(防止丢失前端路由)
b. 跨域配置(前后端分离的应用通常要解决的问题)
4. 自己的补充
最后是自己对ng2这样的强大前端框架下的前后端分离应用的一点拙见。主要是针对于其前后端分离的情景,这就导致客户端变得不可信,使得认证变得困难。
起初笔者的想法是就将前端网站当成是原生的App来看待,原生App不也是跟服务器分离的吗,那原生应用如何做到认证的,ng2的客户端也能做到不是吗。
不过最近又有一点想通,客户端的认证,终究要依赖于一对AppId与AppSecret或是类似的东西,这种数据在原生应用里得到保护的能力终究是大于Web应用的,毕竟在web客户端来保存的话存在哪呢,所有的资源脚本,终究是透明的,那web应用何必非要向原生应用靠拢,即使是基于ng2的网站,不要觉得浪费,套个.Net MVC的壳来保护认证参数,并不是什么得不偿失的事情,笼统的来讲就是,不同的平台要发挥自己平台的优势,不是非要为了做全平台而写完全通用的代码的。
Angular2发布思路(整理官网Deployment页面)的更多相关文章
- 把包发布到npm官网
一.包 包就是多模块的集合,CommonJS的包规范给程序员提供了组织模块的标准,减少沟通成本. 规范: 所有的模块放在demo文件夹下(包名)的lib文件夹里面 在lib文件夹的同级目录下新建ind ...
- tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片
本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...
- nginx ----> 官网about页面(翻译)
Nginx about链接:https://nginx.org/en/ nginx 基本的HTTP服务器功能其他HTTP服务器功能邮件代理服务器功能TCP / UDP代理服务器功能架构和可扩展性经测试 ...
- 【HTML响应式项目】成人教育官网前端页面(HTML+CSS+JS实现三端适应)
这个页面是在校参赛的小组项目,除首页和所有课程页面以外由组内成员编写,发博客纯属记录. 项目源码已上传至码云仓库:https://gitee.com/ynavc/sss 项目演示地址:http://y ...
- mysql官网下载页面
http://dev.mysql.com/downloads/mysql/5.6.html#downloads
- RavenDB官网文档翻译系列第一
本系列文章主要翻译自RavenDB官方文档,有些地方做了删减,有些内容整合在一起.欢迎有需要的朋友阅读.毕竟还是中文读起来更亲切吗.下面进入正题. 起航 获取RavenDB RavenDB可以通过Nu ...
- Web程序设计基础期末大作业——模仿QQ飞车手游S联赛官网编写的网页
QQ飞车手游是我非常喜欢的游戏,也是我现在为数不多的常在玩的游戏,刚好我Web程序设计基础的大作业是要做一套网站,我就借此机会模仿飞车S联赛官网的页面自己做了一个网页,又加了一些自己的元素,由于我做这 ...
- 开源Inno Setup官网下载、安装、打包教程(官网安装向导中文语言包)
安装Inno Setup篇 1.搜索Inno Setup 2.下载Inno Setup 3.选择下载最新 innosetup-5.5.9-unicode.exe 版本(innosetup-5.5.9. ...
- 伪GZCC官网
<html class="no-js"><head> <meta charset="utf-8"> <meta htt ...
随机推荐
- redis安装-单机版
环境准备 因为redis使用c语言开发的,如果要运行在linux上,需要gcc-c++的环境.那么我们就要先看一下是否安装了gcc-c++如果没有的话,需要在虚拟机上安装gcc-c++环境(友情提示, ...
- ConnectString ()函数的介绍
ConnectString ()函数的介绍: connectstring 函数主要负责数据库的连接工作 Public Function ConnectString() As String ...
- Java语言基本语法(一)————关键字&标识符(Java语言标识符命名规范&Java语言的包名、类名、接口名、变量名、函数名、常量名命名规则 )
一.关键字 关键字的定义和特点 定义:被Java语言赋予特殊含义,用做专门用途的字符串(单词). 特点:关键字中所有字母均为小写 下面列举一些常用的关键字. 用于定义数据类型的关键字:byte.sho ...
- MongoDB学习总结(六) —— 数据库备份和恢复
我们都知道数据库数据经常备份是多么的重要,MongoDB作为一个数据库系统,自然提供了完善,丰富而且好用的备份与恢复机制. 以下介绍三种数据库备份和恢复的方式 > 数据目录直接拷贝 数据库目录直 ...
- oracle 游标的使用
额,一直提起游标就头疼,总感觉是很高大上的东西,望而却步... 今天要做的东西涉及到了实时更新数据,要用到JOB 存储过程 游标 通过在网上查资料,请教同事,也开始继续深入oracle,,,,小菜啊 ...
- SVM入门(一)
近来,了解了一下SVM(支持向量机 support vector machine)的原理.顺便把自己理解的内容整理一下. 不讲背景啦,直接切入主题. 一.什么是支持向量机 好比说,我们现在在一 ...
- [Hadoop] - Mapreduce自定义Counter
在Hadoop的MR程序开发中,经常需要统计一些map/reduce的运行状态信息,这个时候我们可以通过自定义Counter来实现,这个实现的方式是不是通过配置信息完成的,而是通过代码运行时检查完成的 ...
- Python基础之数据类型
Python基础之数据类型 变量赋值 Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值 ...
- p1144一元三次方程求解
题目描述: 有形如:f(x)=ax^3+bx^2+cx+d=0这样的一元三次方程,给出该方程中各项的系数a,b,c,d,它们均为实数,并约定该方程一定存在着3个不同的实数解,解的范围在-100至100 ...
- UIView和layer的关系
UIView和layer的关系 UIView是layer的代理 View的根layer ---也就是说view本身自带一个layer, 这个layer 我们叫它根layer 所有视图显示是因为继承UI ...