更新 : 2018-01-10 

大半年过去了依然没有做 server side render 的冲动,但是一直有关注这方便的做法.

今天领悟了一些道理, 这里做个记入.

server side render 其实也不只是为了 SEO, 而且自从 Google 能渲染 js 之后更加不重要了.

其它使用的地方比如 fb, whatsap, wechat 的爬虫都是可以用到 server side render 的

ssr 有一个规则就是远离 dom, 其实应该说 "render" 的时候 "不依赖" browser.

如果你写过后端渲染就应该很有这个 feel, 我们会用 html + css 实现所有的设计, 用 responsive 的 css 写法去做响应式.

所以在 render 的时候, 是完全不需要以来任何 browser 元素的.

更新 : 2017-05-03 

angular 4.0 把 universal 纳入自己的阵营, 有许多的改变, 目前已经有 githud starter 了

https://github.com/angular/universal

nodejs, asp.net core 都有.

不过呢,我依然没有去使用它,等到 cli 支持了才用.

目前接受一个临时方案给大家.

https://prerender.io

它的做法是使用 js 引擎渲染你的页面然后收入起来,当发现蜘蛛访问时,返回这个 cache 页面.

页面被保存在另一台服务器上,你有 2 个选择,1是用 prerender.io 的服务器, 首 250 page 免费,之后的就要收费了.

第 2 选择是自己建一个服务器来收藏, prerender 是开源项目有提供全部代码.

asp.net 网站服务器基本设置

https://github.com/greengerong/Prerender_asp_mvc

angular 方面唯一要留意的是 import polyfills, 因为 prerender.io 的 js 引擎是 es5 的.

如果有使用 ajax 或 lazyload module 记得使用

参考 : https://prerender.io/documentation/best-practices

ngAfterViewInit() {
window['prerenderReady'] = true;
}

像这样.

如果运行不起来, prerender.io 还有一个很好的 support.

support@prerender.io

即使你没有付费, 他依然用心的帮你调试找出问题,非常专业 !

2017-02-10

服务端渲染主要是为了 SEO 搜素引擎.

angular universal 为我们处理好这一切.

从前需要特地写一个版本给 SEO 做两份工 /.\

refer :

 
服务端没有任何 browser 的功能, 只有 javascript , 所以要很好的支持 server-side render 我们必须限制我们的代码.
比如 : 不可以直接调用 Dom/Bom api 
包括 Window, FileReader, xmlhttprequest, Navigator, document.queryselector 等等
 
 
第一次听起来觉得不可思议, 不过只要你依据下面我说的方式就可以了.
首先要明白, 服务端渲染, 只是为了 SEO,SEO 只是一个 reader, 它不会和你的界面有任何互动, 所以可以说整个过程中, 代码只会运行 ngOnInit 的部分.
其它的 onClick event 那些都是不会被运行的哦.
 
是不是觉得范围小了很多呢.. 呵呵
 
步骤 : 
1. 判断你的代码是否会被 server-side 运行.
2. 判断你的代码是否涉及了 Dom/Bom ( encodeURIComponent 是 javascript 哦 )
3. 如果涉及了, 那么看看 angular 有没有替代的方法, 比如 Renderer, Http, 都是用来替代 Dom/Bom 的,让你不直接接触, 在不同的场景下 , universal 会改变它们的执行. 
4. 如果 angular 没有替代方案, 那么判断你的代码是否真的需要在 server-side 运行, 如果不需要你可以使用 if(isBrowser) *ngIf="isBrowser" 来禁止它们运行. 
通过上面的步骤基本上可以让你安心的使用 universal 了 
 
 
比如这样写是 ok 的, 只要它不跑就不会有 error 
  <input type="text" #input (blur)="$event.target.className = 'haha';blur($event.target)" >
{{ input.value }}
<div (click)="click($event)" >click</div>
 
 
 
 
 
 
 
 
 
 
 
 
 

angular2 学习笔记 ( server-side rendering, angular universal, 服务端渲染 )的更多相关文章

  1. NodeJS学习笔记 进阶 (1)Nodejs进阶:服务端字符编解码&乱码处理(ok)

    个人总结:这篇文章主要讲解了Nodejs处理服务器乱码及编码的知识,读完这篇文章需要10分钟. 摘选自网络 写在前面 在web服务端开发中,字符的编解码几乎每天都要打交道.编解码一旦处理不当,就会出现 ...

  2. Python--网络编程学习笔记系列02 附:tcp服务端,tcp客户端

    Python--网络编程学习笔记系列02 TCP和UDP的概述: udp通信模型类似于写信,不需要建立相关链接,只需要发送数据即可(现在几乎不用:不稳定,不安全) tcp通信模型类似于打电话,一定要建 ...

  3. zeromq学习笔记2——简单的客户端和服务端测试程序

    1.前言 zeromq提供了guide,http://zguide.zeromq.org/,可以帮助新手快速上手,提供了C\C++\PHP等多种语言. 2.测试程序 使用zeromq给的hwserve ...

  4. android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据

    补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访 ...

  5. Angular开发实践(六):服务端渲染

    Angular Universal Angular在服务端渲染方面提供一套前后端同构解决方案,它就是 Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术. 标 ...

  6. 【转】 Pro Android学习笔记(七八):服务(3):远程服务:AIDL文件

    目录(?)[-] 在AIDL中定义服务接口 根据AIDL文件自动生成接口代码 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.n ...

  7. golang学习笔记18 用go语言编写移动端sdk和app开发gomobile

    golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...

  8. 【转】 Pro Android学习笔记(七六):服务(1):local和remote

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的 ...

  9. 基于Angular4+ server render(服务端渲染)开发教程

    目标: 1.更好的 SEO,方便搜索爬虫抓取页面内容 2.更快的内容到达时间(time-to-content) 影响: 1.用户:比原来更快的看到渲染的页面,提升用户体验 2.开发人员:某些代码可能需 ...

随机推荐

  1. 基于新浪SAE平台的微信开发

      自己的微信公众平台开发差不多了,欢迎关注试用哦,我会不定期在那里分享技术文章! 主要功能: 输入t+中文或者英文返回对应的英中翻译 输入[m]随机来首音乐听,建议在wifi下听 输入[ly+你的留 ...

  2. 对JS prototype的理解

    1.什么是prototype? function F() {} f1 = new F();f2 = new F(); 以上的代码,F()是一个构造函数,f1和f2是由这个构造函数产生的对象. prot ...

  3. pods 报错There may only be up to 1 unique SWIFT_VERSION per target

    zhangpengdeMacBook-Pro:Jump zhangpeng$ pod install Analyzing dependencies [!] There may only be up t ...

  4. Cracking Wifi Wpa-Wpa2 in 5 second——Dumpper V.80.8 +JumpStart+WinPcap

    标题虽然说是5秒之内破解wpa-wpa2的wifi密码,不过其实这个是针对外国的那种路由器,我们大天朝的路由器越来越强悍了.有的路由器防pin,甚至于一些路由器没有pin,wps之类的.不过还是有一些 ...

  5. 快递查询 C#

    //电商ID private string EBusinessID = "1257164"; //电商加密私钥,快递鸟提供,注意保管,不要泄漏 private string App ...

  6. python web开发-flask中response,cookies,session对象使用详解

    Response响应对象: 当一个web请求被服务器处理完后,会返回用户请求的响应,这时候就要用到响应对象,根据响应给用户的形式不同,响应对象有以下几种处理方式 如果返回的是一个合法的响应对象,它会从 ...

  7. jquery ajax 返回的json对象 新增属性值(干货)

    $.ajax({ type:"GEt'; url:"你的地址", data:{"你的字段","字段值"} success:funt ...

  8. Mysql5.7动态修改innodb_buffer_pool_size

    SELECT @@innodb_buffer_pool_size,@@innodb_buffer_pool_chunk_size,@@innodb_buffer_pool_instances; SET ...

  9. 用IDEA生成javadoc文档

    用IDEA生成javadoc文档 打开相应的选项面板 设置 -encoding是java代码编码,-charset是对生成文档所用的编码.-windowtitle就是对应html的<title& ...

  10. Java基本包装类型

    基本类型的对象包装,也就是将常用的基本数据类型包装成对象 byte Byte short Short int Integer long Long boolean Boolean float Float ...