這篇文章給大家分享的是有關node和laravel項目中預渲染vue.js應用程序的方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)建站長期為上1000家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為漳州企業(yè)提供專業(yè)的成都網(wǎng)站設計、成都網(wǎng)站制作,漳州網(wǎng)站改版等技術服務。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
服務器端渲染現(xiàn)在非常流行。但它也并非沒有缺點。預渲染是一種替代方法,在某些情況下甚至可能更好。下面我們來看一下如何預渲染vue.js應用程序。
在本文中,我們將探討預渲染如何與vue.js一起工作,并看兩個示例:一個是node.js項目,一個是laravel項目。
一、服務端渲染
基于javascript的應用程序的一個缺點是,瀏覽器從服務器接收到的頁面基本上是空的。在下載并運行Javascript之前,無法構建DOM。
這意味著用戶必須等待更長的時間才能看到任何東西。如果爬蟲程序不能快速查看頁面內(nèi)容,它也會對SEO產(chǎn)生影響。
服務器端呈現(xiàn)(SSR)通過在服務器上呈現(xiàn)應用程序來克服這個問題,以便客戶端在加載頁面時(甚至在Javascript運行之前)接收完整的DOM內(nèi)容。
而不是瀏覽器從服務器接收這個:
...使用SSR,它接收一個完整的內(nèi)容頁面:
...Your Server-Side Rendered App
Hello World
服務器端渲染缺點
你的應用程序需要在服務器上可執(zhí)行,所以你需要設計你的代碼是“通用的”,也就是說,它可以在瀏覽器和節(jié)點服務器上工作。
您的應用程序將運行在每一個請求到服務器,添加一個傳統(tǒng)的負載和緩慢的響應。緩存可以部分緩解這種情況。
你只能用Node.js做SSR。如果您的主后端是Laravel、Django等,那么您必須在主后端運行一個節(jié)點服務器來處理SSR。
二、預渲染
還有另一種方法可以解決空頁問題:預渲染。使用這種方法,您可以在部署應用程序之前運行應用程序,捕獲頁面輸出并用捕獲的輸出替換HTML文件。
它與SSR的概念基本相同,只是它是在開發(fā)環(huán)境中預先部署的,而不是在活動服務器中。
預渲染通常使用PhantomJS這樣的無頭瀏覽器來執(zhí)行,并且可以與Webpack、Gulp等一起集成到構建流中。
預渲染的優(yōu)點
沒有額外的服務器負載,因此比SSR更快更便宜
更簡單的生產(chǎn)設置和更簡單的應用程序代碼,因此更不容易出錯
不需要Node.js生產(chǎn)服務器
預渲染的缺點
對于顯示不斷變化的數(shù)據(jù)的頁面(例如表),不能很好地工作。
不適用于具有特定用戶內(nèi)容的頁面,例如包含用戶個人信息的帳戶頁面。然而,無論如何,這些類型的頁面對于預呈現(xiàn)都不那么重要;這是我們主要的,經(jīng)常使用的頁面,我們想要提供快速。
你需要在應用程序中單獨預渲染每條路線。
對照表
僅客戶端渲染 服務端渲染 預渲染 生產(chǎn)服務器 Any/none Node.js only Any/none 額外的服務器負載 No Yes No 個性化用戶數(shù)據(jù)? N/A Yes No 三、Vue.js預渲染示例
讓我們做一個簡單的例子來預渲染一個vue.js應用程序,一次在node.js環(huán)境中,一次在laravel環(huán)境中。
在這些示例中,我們將使用webpack和pre render spa插件來執(zhí)行預渲染。
1、Vue和Node
第1步:項目安裝
我們將使用vue-cli和webpack-simple模板。
$ vue init webpack-simple vue-node-pr-test $ cd vue-node-pr-test $ npm install我們還需要另外三個模塊,后面還有解釋。
$ npm install --save-dev http-server html-webpack-plugin prerender-spa-plugin第2步:在Webpack構建中包含index.html
Webpack -simple模板在Webpack構建輸出中不包含index.html文件。然而,當我們預渲染應用程序時,我們需要覆蓋我們的索引。因此,讓我們將它添加到輸出中,以免破壞原始的。
在我們的Webpack .config.js文件中使用html-webpack-plugin將文件包含在Webpack構建中:
var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports.plugins.push( new HtmlWebpackPlugin({ template: './index.html', inject: false }), );現(xiàn)在我們改變了我們的Webpack公共路徑,因為index.html現(xiàn)在和其他靜態(tài)資產(chǎn)在同一個文件夾中:
output: { path: path.resolve(__dirname, './dist'), filename: 'build.js', publicPath: '/', // was originally 'dist' },由于路徑的變化,我們還需要將index.html中的更改為。
第3步:測試Webpack生成版本
現(xiàn)在我們建造:
$ npm run build我們的dist文件夾應該是這樣的:
- dist -- build.js -- index.html -- logo.png如果我們檢查dist/index.html,它會是這樣的:
vue-node-pr-test 現(xiàn)在我們可以使用http-server并從dist文件夾中提供應用程序。默認情況下,它將運行在localhost:8080:
$ ./node_modules/.bin/http-server ./dist第4步:預渲染應用程序
現(xiàn)在我們的index.html文件在Webpack構建中,我們可以使用預呈現(xiàn)的HTML更新它。
首先,我們需要在webpack配置中添加prerender-spa-plugin。確保它在html-webpack-plugin之后。
var PrerenderSpaPlugin = require('prerender-spa-plugin'); module.exports.plugins.push( new PrerenderSpaPlugin( path.join(__dirname, './dist'), [ '/' ] ) );PrerenderSpaPlugin的第一個參數(shù)是index.html文件的位置,第二個參數(shù)是應用程序中的路由列表。在這個例子中,我們只有一條路徑。
現(xiàn)在我們再次建造:
$ npm run build我們的構建將比以前花費更長的時間,因為預渲染插件正在做的事情:
它創(chuàng)建一個Phantom JS實例并運行應用程序
獲取DOM的快照
將快照輸出到生成文件夾中的HTML文件
它會對每條路徑重復這個過程,所以如果你有很多頁面,構建應用程序可能需要相當長的時間。
在建立后,我們的dist/index.html現(xiàn)在應該包括所有預渲染的HTML:
prerender-test Essential Links
Ecosystem
2、Vue 和 Laravel
如果您跳過了Vue和Node示例,我建議您先回去閱讀它,因為它包含了對任何常見步驟的更全面的解釋。
第1步:項目安裝
首先,我們將設置一個新的Laravel項目。
$ laravel new vue-laravel-pr-test $ cd vue-laravel-pr-test $ npm install我們還將增加兩個我們需要的NPM模塊:
$ npm install --save-dev html-webpack-plugin prerender-spa-plugin第2步:提供一個普通的HTML文件
默認情況下,Laravel在根URL處提供Blade模板文件。 為了使示例簡單,我們將使用我們將在resources / views / index.html創(chuàng)建的以下純HTML文件替換它
Laravel 現(xiàn)在,我們需要在根路徑上提供該文件,而不是刀片服務器模板。將route /web.php更改為:
Route::get('/', function () { return File::get(public_path() . '/index.html'); });這實際上指向我們的build文件夾,我們很快就會生成它。
第3步:將HTML文件添加到構建中
像在節(jié)點示例中一樣,我們希望在Webpack構建中包含index.html,以便稍后使用預呈現(xiàn)的HTML覆蓋它。
我們需要做一些Webpack配置。在本例中,我使用的是Laravel 5.4,它使用的是Laravel Mix。Mix沒有提供本地webpack配置文件,因為它使用自己的默認文件,所以讓我們從laravel-mix模塊復制一個配置文件:
$ cp ./node_modules/laravel-mix/setup/webpack.config.js .我們還需要讓我們的NPM生產(chǎn)腳本指向這個配置文件,因此編輯包。json,并將生產(chǎn)腳本更改為:
cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=webpack.config.js現(xiàn)在我們將html-webpack-plugin添加到webpack.config.js文件中。把這個添加到文件的底部上面的混合定型部分:
var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports.plugins.push( new HtmlWebpackPlugin({ template: Mix.Paths.root('resources/views/index.html'), inject: false }); );第4步:測試Weback生成版本
現(xiàn)在讓我們?yōu)樯a(chǎn)和服務:
$ npm run production $ php artisan serve不過,在運行應用程序時,瀏覽器中可能會出現(xiàn)錯誤,因為我們從未為window.Laravel.csrfToken設置值。對于這個簡單的例子,注釋掉會更快,所以像這樣修改resources/assets/js/bootsta .js:
window.axios.defaults.headers.common = { 'X-Requested-With': 'XMLHttpRequest' // 'X-CSRF-TOKEN': window.Laravel.csrfToken; };第5步:預渲染應用程序
我們現(xiàn)在需要在webpack配置中使用prerender spa插件來執(zhí)行預渲染。確保它在HTML網(wǎng)頁包插件之后。
var PrerenderSpaPlugin = require('prerender-spa-plugin'); module.exports.plugins.push( new PrerenderSpaPlugin( Mix.output().path, [ '/' ] ) );現(xiàn)在我們可以做一個生產(chǎn)構建:
$ npm run production如果您選中build文件夾,dist/index.html現(xiàn)在應該如下所示,并使用預渲染HTML完成:
Laravel Example ComponentI'm an example component!感謝各位的閱讀!關于“node和laravel項目中預渲染vue.js應用程序的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
文章名稱:node和laravel項目中預渲染vue.js應用程序的方法
文章路徑:http://weahome.cn/article/gghehs.html其他資訊