摘要:無需使用服務(wù)器實(shí)時(shí)動態(tài)編譯,而是使用預(yù)渲染方式,在構(gòu)建時(shí)簡單地生成針對特定路由的靜態(tài)文件。與可以部署在任何靜態(tài)文件服務(wù)器上的完全靜態(tài)單頁面應(yīng)用程序不同,服務(wù)器渲染應(yīng)用程序,需要處于運(yùn)行環(huán)境。更多的服務(wù)器端負(fù)載。
目錄結(jié)構(gòu)
-no-ssr-demo 未做ssr之前的項(xiàng)目代碼用于對比
-vuecli2ssr 將vuecli生成的項(xiàng)目轉(zhuǎn)為ssr
-prerender-demo 使用prerender-spa-plugin 的預(yù)渲染demo
-readme-images readme文件的幾個(gè)圖片
ssr是什么服務(wù)器端將Vue組件直接渲染未html字符串,發(fā)送至瀏覽器,最后在瀏覽器中混合為可交互的應(yīng)用程序
服務(wù)器渲染的 Vue.js 應(yīng)用程序也可以被認(rèn)為是"同構(gòu)"或"通用",因?yàn)閼?yīng)用程序的大部分代碼都可以在服務(wù)器和客戶端上運(yùn)行。
為什么要用更好的 SEO
更快的內(nèi)容到達(dá)時(shí)間(time-to-content)
怎么做vue-server-renderer
Nuxt.js
是一個(gè)參考了 React.js 棧下的 Next.js 的一個(gè)更高封裝接口的 SSR 框架。它封裝了一層和 vue-router、vuex 及 webpack 設(shè)置這一層需求,可以快速開發(fā) SSR.
Prerendering
如果你調(diào)研服務(wù)器端渲染(SSR)只是用來改善少數(shù)營銷頁面(例如 /, /about, /contact 等)的 SEO,那么你可能需要預(yù)渲染。無需使用 web 服務(wù)器
實(shí)時(shí)動態(tài)編譯 HTML,而是使用預(yù)渲染方式,在構(gòu)建時(shí)(build time)簡單地生成針對特定路由的靜態(tài) HTML 文件。優(yōu)點(diǎn)是設(shè)置預(yù)渲染更簡單,并可以將你
的前端作為一個(gè)完全靜態(tài)的站點(diǎn)。
如果你使用 webpack,你可以使用 prerender-spa-plugin 輕松地添加預(yù)渲染。
開發(fā)條件所限。瀏覽器特定的代碼,只能在某些生命周期鉤子函數(shù)(lifecycle hook)中使用;一些外部擴(kuò)展庫(external library)可能需要特殊處理,
才能在服務(wù)器渲染應(yīng)用程序中運(yùn)行。
涉及構(gòu)建設(shè)置和部署的更多要求。與可以部署在任何靜態(tài)文件服務(wù)器上的完全靜態(tài)單頁面應(yīng)用程序(SPA)不同,服務(wù)器渲染應(yīng)用程序,需要處于
Node.js server 運(yùn)行環(huán)境。
更多的服務(wù)器端負(fù)載。在 Node.js 中渲染完整的應(yīng)用程序,顯然會比僅僅提供靜態(tài)文件的 server 更加大量占用
CPU 資源(CPU-intensive - CPU 密集),因此如果你預(yù)料在高流量環(huán)境(high traffic)下使用,請準(zhǔn)備相應(yīng)的服務(wù)器負(fù)載,并明智地采用緩存策略。
如果你打算為你的vue項(xiàng)目在node使用 SSR,那么在通用代碼中,我們有必要并且需要遵守下面的這些約定:
通用代碼: 在客戶端與服務(wù)器端都會運(yùn)行的部分為通用代碼。
注意服務(wù)端只調(diào)用beforeCreat與created兩個(gè)鉤子,所以不可以做類似于在created初始化一個(gè)定時(shí)器,然后在mounted或者destroyed銷毀這個(gè)定時(shí)
器,不然服務(wù)器會慢慢的被這些定時(shí)器給榨干了因單線程的機(jī)制,在服務(wù)器端渲染時(shí),過程中有類似于單例的操作,那么所有的請求都會共享這個(gè)單例的操作,所以應(yīng)該使用工廠函數(shù)來確保每個(gè)請求之間的獨(dú)立性。
如有在beforeCreat與created鉤子中使用第三方的API,需要確保該類API在node端運(yùn)行時(shí)不會出現(xiàn)錯誤,比如在created鉤子中初始化一個(gè)數(shù)據(jù)請求
的操作,這是正常并且及其合理的做法。但如果只單純的使用XHR去操作,那在node端渲染時(shí)就出現(xiàn)問題了,所以應(yīng)該采取axios這種瀏覽器端與服務(wù)器端
都支持的第三方庫。
最重要一點(diǎn): 切勿在通用代碼中使用document這種只在瀏覽器端可以運(yùn)行的API,反過來也不可以使用只在node端可以運(yùn)行的API。
疑惑如何與中間層結(jié)合
結(jié)構(gòu)預(yù)覽圖片見github
實(shí)現(xiàn)過程圖片見github
應(yīng)用 坑UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 30): Error: connect ECONNREFUSED 127.0.0.1:80
控制臺拋 uncaught ,這是多么貼心的功能。以前都是默默吃掉這個(gè)異常的,在一個(gè)項(xiàng)目里 debug 簡直醉人。
https://www.zhihu.com/questio...
2.http-proxy-middleware connect ECONNREFUSED 127.0.0.1:80
解決方法
1. 將node服務(wù)器端口改成 127.0.0.1:80
將接口服務(wù)器端口改成 127.0.0.1:80
將asyncData方法使用的請求url加上域名+端口,如下所示
export default { asyncData ({ params }) { return axios.get(`https://127.0.0.1:3000/api/${params.id}`) .then((res) => { return { title: res.data.title } }) } }
參考: Nuxt ServerError connect ECONNREFUSED 127.0.0.1:80 錯誤解決
3.axios 將post請求數(shù)據(jù)轉(zhuǎn)為formdata
axios({ url: "/api/index/getIndexlbt", method: "post", data: { relevanceId:this.$route.params.id, pictureType:4 }, transformRequest: [function (data) { let ret = "" for (let it in data) { ret += encodeURIComponent(it) + "=" + encodeURIComponent(data[it]) + "&" } return ret }], headers: { "Content-Type": "application/x-www-form-urlencoded" } })
4.Computed property "currentPage" was assigned to but it has no setter
// currentPage () { // return store.state.currentPage // } currentPage: { get: function () { return store.state.currentPage }, set: function () { } }
https://segmentfault.com/q/10...
https://github.com/ElemeFE/mi...
5.vuex 的dispatch和commit提交mutation的區(qū)別
很簡單,一個(gè)異步操作與同步操作的區(qū)別。 當(dāng)你的操作行為中含有異步操作,比如向后臺發(fā)送請求獲取數(shù)據(jù),就需要使用action的dispatch去完成了。 其他使用commit即可。
vue中更改state的值
參考資料 官方資料vue-ssr
ssr適合多頁 還是 單頁https://github.com/vuejs/vue-...
https://github.com/hilongjw/v...
理解ssr簡單的 Vue SSR Demo
Vue項(xiàng)目SSR改造實(shí)戰(zhàn)
從零開始搭建vue-ssr系列之二:Client端渲染以及webpack2+vue2踩坑之旅
從零開始搭建vue-ssr系列之三:服務(wù)器渲染的奧秘
好文推薦Vue項(xiàng)目SSR改造實(shí)戰(zhàn) 可參考性比較強(qiáng)
史上最詳細(xì)易懂的vue服務(wù)端渲染(ssr)教程 可以簡單理解,對于后期搭建好想沒啥大用
讓vue-cli初始化后的項(xiàng)目集成支持SSR
vue-hackernews-2.0 源碼解讀 對項(xiàng)目整體結(jié)構(gòu)說明,可以結(jié)合官方demo查看更佳
Vue 全站服務(wù)器渲染 SSR 實(shí)踐
詳解 Vue & Vuex 實(shí)踐 掘金的項(xiàng)目實(shí)戰(zhàn)
vuex官方文檔:
vuex action介紹
vuex2-demo demo不錯
vuex-demo
可參考的demo官方demo 官方demo,大而全,存在接口墻的問題
vnews 解決官方demo無法訪問的問題, 功能類似vue-hackernews-2.0, 只不過內(nèi)容源換成掘金網(wǎng)站,因而無法使用service worker的push功能。
Beauty 聽說挺好,但是沒有嘗試
其他mmf-blog vuejs 2.0 服務(wù)端渲染 v2版
vue-cnode-mobile
問題:
組件的異步加載模式,2.router,store為什么要改成 異步
應(yīng)用程序的代碼分割或惰性加載,有助于減少瀏覽器在初始渲染中下載的資源體積,可以極大地改善大體積 bundle 的可交互時(shí)間 (TTI - time-to-interactive)。這里的關(guān)鍵在于,對初始首屏而言,"只加載所需"。
如何不跳轉(zhuǎn)頁面 驗(yàn)證異步路由的優(yōu)勢
10次測試時(shí)間對比
每個(gè)開發(fā)人員都要配置ssr環(huán)境
單頁面多頁面結(jié)構(gòu)
怎么跟中間層結(jié)合
源碼項(xiàng)目整體
no-ssr-demo
vuecli2ssr
prerender-demo
有幫助請點(diǎn)個(gè)star!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94065.html
摘要:靜態(tài)頁面的或者明顯最短,原因是模板幾乎沒什么內(nèi)容。靜態(tài)頁面生成的白屏?xí)r間中,大部分是首屏數(shù)據(jù)請求消耗的時(shí)間,,同時(shí)也可以對比出,服務(wù)器渲染的對首屏?xí)r間的確有很明顯的效果。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文由shirishiyue發(fā)表于云+社區(qū)專欄 目前我這邊的web頁面,都是采用php+smarty模板生成的,是一種比較早期的開發(fā)模式。好處是沒有現(xiàn)階段...
摘要:靜態(tài)頁面的或者明顯最短,原因是模板幾乎沒什么內(nèi)容。靜態(tài)頁面生成的白屏?xí)r間中,大部分是首屏數(shù)據(jù)請求消耗的時(shí)間,,同時(shí)也可以對比出,服務(wù)器渲染的對首屏?xí)r間的確有很明顯的效果。歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文由shirishiyue發(fā)表于云+社區(qū)專欄 目前我這邊的web頁面,都是采用php+smarty模板生成的,是一種比較早期的開發(fā)模式。好處是沒有現(xiàn)階段常用的...
摘要:最近簡單的研究了一下,對已經(jīng)有了一個(gè)簡單的認(rèn)知,主要應(yīng)用于單頁面應(yīng)用,是很不錯的框架。創(chuàng)建好之后,在命令行直接輸入即可,當(dāng)控制臺顯示服務(wù)已啟動則表示該服務(wù)已經(jīng)啟動成功了。配置參數(shù)中有一項(xiàng)為這項(xiàng)配置的就是我們即將使用的模板。 最近簡單的研究了一下SSR,對SSR已經(jīng)有了一個(gè)簡單的認(rèn)知,主要應(yīng)用于單頁面應(yīng)用,Nuxt是SSR很不錯的框架。也有過調(diào)研,簡單的用了一下,感覺還是很不錯。但是還是...
摘要:開始改建補(bǔ)充安裝依賴與上一次不同,這次我們基于進(jìn)行改建,已經(jīng)有了很多依賴庫了,但我們?nèi)涡枰a(bǔ)充一個(gè)核心修改客戶端的配置修改文件,添加插件添加了這個(gè)配置以后,重新啟動項(xiàng)目通過地址就可以訪問到,頁面中出現(xiàn)的內(nèi)容就是所需要的。 從零開始搭建一個(gè)vue-ssr 前言 上次我們已經(jīng)實(shí)現(xiàn)了從零開始,搭建一個(gè)簡單的vue-ssr的demo:從零開始搭建一個(gè)vue-ssr(上)。那么這次呢,我們基于v...
摘要:從零開始搭建一個(gè)背景是什么全拼是,服務(wù)端渲染。大家不妨可以打開一些頁面或者一些公司的網(wǎng)站,查看源代碼,你會發(fā)現(xiàn),也是有這個(gè)標(biāo)記。這時(shí)候,我們發(fā)現(xiàn)頁面的路由切換生效了,并且不同頁面的源代碼也不一樣了。從零開始搭建一個(gè)下項(xiàng)目源碼 從零開始搭建一個(gè)vue-ssr 背景 What?SSR是什么? SSR全拼是Server-Side Rendering,服務(wù)端渲染。 所謂服務(wù)端渲染,指的是把...
閱讀 3838·2021-11-12 10:34
閱讀 2840·2021-09-22 15:14
閱讀 810·2019-08-30 15:53
閱讀 3223·2019-08-30 12:53
閱讀 1310·2019-08-29 18:32
閱讀 2793·2019-08-29 16:41
閱讀 1092·2019-08-26 13:40
閱讀 1838·2019-08-23 18:07