设为首页 收藏本站
查看: 929|回复: 0

[经验分享] angular2 学习笔记 ( server-side rendering, angular universal, 服务端渲染 )

[复制链接]

尚未签到

发表于 2017-12-8 08:56:58 | 显示全部楼层 |阅读模式
  更新 : 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 的.
DSC0000.png

  如果有使用 ajax 或 lazyload module 记得使用
DSC0001.png

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



ngAfterViewInit() {
window['prerenderReady'] = true;
}
  像这样.
  如果运行不起来, prerender.io 还有一个很好的 support.
  support@prerender.io
  即使你没有付费, 他依然用心的帮你调试找出问题,非常专业 !
  2017-02-10
  服务端渲染主要是为了 SEO 搜素引擎.
  angular universal 为我们处理好这一切.
  从前需要特地写一个版本给 SEO 做两份工 /.\
  refer :


https://medium.com/google-developer-experts/angular-universal-for-the-rest-of-us-922ca8bac84#.mvfr78yoq

https://github.com/angular/universal#universal-gotchas



服务端没有任何 browser 的功能, 只有 javascript , 所以要很好的支持 server-side render 我们必须限制我们的代码.

比如 : 不可以直接调用 Dom/Bom api

包括 Window, FileReader, xmlhttprequest, Navigator, document.queryselector 等等



DSC0002.png



第一次听起来觉得不可思议, 不过只要你依据下面我说的方式就可以了.

首先要明白, 服务端渲染, 只是为了 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>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-422038-1-1.html 上篇帖子: golang http server分析(一) 下篇帖子: Charles中windows版本解决response乱码问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表