
服务器端渲染现在非常流行。但它也并非没有缺点。预渲染是一种替代方法,在某些情况下甚至可能更好。下面我们来看一下如何预渲染vue.js应用程序。
在本文中,我们将探讨预渲染如何与vue.js一起工作,并看两个示例:一个是node.js项目,一个是laravel项目。
相关教程推荐:node js教程 、vue.js教程 、laravel教程
一、服务端渲染
基于javascript的应用程序的一个缺点是,浏览器从服务器接收到的页面基本上是空的。在下载并运行Javascript之前,无法构建DOM。
立即学习“前端免费学习笔记(深入)”;
这意味着用户必须等待更长的时间才能看到任何东西。如果爬虫程序不能快速查看页面内容,它也会对SEO产生影响。
服务器端呈现(SSR)通过在服务器上呈现应用程序来克服这个问题,以便客户端在加载页面时(甚至在Javascript运行之前)接收完整的DOM内容。
而不是浏览器从服务器接收这个:
...使用SSR,它接收一个完整的内容页面:
...Your Server-Side Rendered App
Hello World
服务器端渲染缺点
你的应用程序需要在服务器上可执行,所以你需要设计你的代码是“通用的”,也就是说,它可以在浏览器和节点服务器上工作。
您的应用程序将运行在每一个请求到服务器,添加一个传统的负载和缓慢的响应。缓存可以部分缓解这种情况。
你只能用Node.js做SSR。如果您的主后端是Laravel、Django等,那么您必须在主后端运行一个节点服务器来处理SSR。
二、预渲染
还有另一种方法可以解决空页问题:预渲染。使用这种方法,您可以在部署应用程序之前运行应用程序,捕获页面输出并用捕获的输出替换HTML文件。
它与SSR的概念基本相同,只是它是在开发环境中预先部署的,而不是在活动服务器中。
预渲染通常使用PhantomJS这样的无头浏览器来执行,并且可以与Webpack、Gulp等一起集成到构建流中。
预渲染的优点
没有额外的服务器负载,因此比SSR更快更便宜
更简单的生产设置和更简单的应用程序代码,因此更不容易出错
不需要Node.js生产服务器
预渲染的缺点
对于显示不断变化的数据的页面(例如表),不能很好地工作。
不适用于具有特定用户内容的页面,例如包含用户个人信息的帐户页面。然而,无论如何,这些类型的页面对于预呈现都不那么重要;这是我们主要的,经常使用的页面,我们想要提供快速。
你需要在应用程序中单独预渲染每条路线。
对照表
仅客户端渲染 服务端渲染 预渲染 生产服务器 Any/none Node.js only Any/none 额外的服务器负载 No Yes No 个性化用户数据? N/A Yes No 三、Vue.js预渲染示例
让我们做一个简单的例子来预渲染一个vue.js应用程序,一次在node.js环境中,一次在laravel环境中。
在这些示例中,我们将使用webpack和pre render spa插件来执行预渲染。
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 }), );现在我们改变了我们的Webpack公共路径,因为index.html现在和其他静态资产在同一个文件夹中:
output: { path: path.resolve(__dirname, './dist'), filename: 'build.js', publicPath: '/', // was originally 'dist' },由于路径的变化,我们还需要将index.html中的更改为。
第3步:测试Webpack生成版本
现在我们建造:
$ npm run build我们的dist文件夹应该是这样的:
- dist -- build.js -- index.html -- logo.png如果我们检查dist/index.html,它会是这样的:
vue-node-pr-test 现在我们可以使用http-server并从dist文件夹中提供应用程序。默认情况下,它将运行在localhost:8080:
$ ./node_modules/.bin/http-server ./dist第4步:预渲染应用程序
现在我们的index.html文件在Webpack构建中,我们可以使用预呈现的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的第一个参数是index.html文件的位置,第二个参数是应用程序中的路由列表。在这个例子中,我们只有一条路径。
现在我们再次建造:
$ npm run build我们的构建将比以前花费更长的时间,因为预渲染插件正在做的事情:
它创建一个Phantom JS实例并运行应用程序
获取DOM的快照
将快照输出到生成文件夹中的HTML文件
它会对每条路径重复这个过程,所以如果你有很多页面,构建应用程序可能需要相当长的时间。
在建立后,我们的dist/index.html现在应该包括所有预渲染的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创建的以下纯HTML文件替换它
Laravel 现在,我们需要在根路径上提供该文件,而不是刀片服务器模板。将route /web.php更改为:
Route::get('/', function () { return File::get(public_path() . '/index.html'); });这实际上指向我们的build文件夹,我们很快就会生成它。
第3步:将HTML文件添加到构建中
像在节点示例中一样,我们希望在Webpack构建中包含index.html,以便稍后使用预呈现的HTML覆盖它。
我们需要做一些Webpack配置。在本例中,我使用的是Laravel 5.4,它使用的是Laravel Mix。Mix没有提供本地webpack配置文件,因为它使用自己的默认文件,所以让我们从laravel-mix模块复制一个配置文件:
$ cp ./node_modules/laravel-mix/setup/webpack.config.js .我们还需要让我们的NPM生产脚本指向这个配置文件,因此编辑包。json,并将生产脚本更改为:
cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=webpack.config.js现在我们将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生成版本
现在让我们为生产和服务:
$ npm run production $ php artisan serve不过,在运行应用程序时,浏览器中可能会出现错误,因为我们从未为window.Laravel.csrfToken设置值。对于这个简单的例子,注释掉会更快,所以像这样修改resources/assets/js/bootsta .js:
window.axios.defaults.headers.common = { 'X-Requested-With': 'XMLHttpRequest' // 'X-CSRF-TOKEN': window.Laravel.csrfToken; };第5步:预渲染应用程序
我们现在需要在webpack配置中使用prerender spa插件来执行预渲染。确保它在HTML网页包插件之后。
var PrerenderSpaPlugin = require('prerender-spa-plugin'); module.exports.plugins.push( new PrerenderSpaPlugin( Mix.output().path, [ '/' ] ) );现在我们可以做一个生产构建:
$ npm run production如果您选中build文件夹,dist/index.html现在应该如下所示,并使用预渲染HTML完成:
Laravel Example ComponentI'm an example component!相关推荐:
更多编程相关知识,请访问:编程入门!!
![]()
相关文章
Vue组件实战:滚动加载组件开发
Vue Firebase Cloud Firestore案例:构建时事通讯应用的实践与经验分享
Vue框架入门:如何通过网易云API获取歌手信息
如何使用Vue和Canvas开发个性化的名片生成器
Vue中数据请求的选择:Axios or Fetch?
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
更多热门AI工具
更多相关专题
php文件怎么打开打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。
2525
2023.09.01
php怎么取出数组的前几个元素取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。
1602
2023.10.11
php反序列化失败怎么办php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。
1495
2023.10.11
php怎么连接mssql数据库连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。
952
2023.10.23
php连接mssql数据库的方法php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。
1416
2023.10.23
PHP出现乱码怎么解决PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。
1445
2023.11.09
php文件怎么在手机上打开php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。
1306
2023.11.13
Java 桌面应用开发(JavaFX 实战)本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。
36
2026.01.14
更多热门下载
更多相关下载
更多精品课程
相关推荐/热门推荐/最新课程
HTML5/CSS3/JavaScript/ES6入门课程共102课时 | 6.7万人学习
前端基础到实战(HTML5+CSS3+ES6+NPM)共162课时 | 18.8万人学习
第二十二期_前端开发共119课时 | 12.4万人学习










