更新 : 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 :

4. 如果 angular 沒有替代方案, 那么判斷你的代碼是否真的需要在 server-side 運行, 如果不需要你可以使用 if(isBrowser) *ngIf="isBrowser" 來禁止它們運行.
<input type="text" #input (blur)="$event.target.className = 'haha';blur($event.target)" >
{{ input.value }}
<div (click)="click($event)" >click</div>