vuecli项目实现构建SSR服务端渲染?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
将一个Vue组件在服务端渲染成HTML字符串并发送到浏览器,最后将这些静态标记“激活”为可交互应用程序的过程就叫服务端渲染(SSR)
服务器渲染的Vue。js应用程序也可以被认为是“同构“或“通用“,因为应用程序的大部分代码都可以在服务器和客户端上运行
- <李>更好的SEO:传统的spa页面数据都是异步加载,搜索引擎爬虫无法抓取,服务端渲染(SSR)使搜索引擎爬虫抓取工具可以直接查看完全渲染的页面,解决vue项目的SEO问题李> <>李更快的内容到达时间(首屏加载更快):请求页面时,服务端将渲染好的页面直接发送给浏览器进行渲染,浏览器只需要解析渲染HTML,无需等待所有的JavaScript都完成下载并执行,才显示服务器渲染的标记李>
- <李>开发条件所限:浏览器特定的代码,只能在某些生命周期钩子函数中使用,一些外部扩展库可能需要特殊处理,才能在服务器渲染应用程序中运行李> <李>涉及构建设置和部署的更多要求:与可以部署在任何静态文件服务器上的完全静态单页面应用程序(spa)不同,服务器渲染应用程序,需要处于节点。李js服务器运行环境> <>李更多的服务器端负载:在节点。js中渲染完整的应用程序,显然会比仅仅提供静态文件的服务器更加大量占用CPU资源,因此如果你预料在高流量环境下使用,需要准备相应的服务器负载,并采用缓存策略
李,>
如果你只是想改善少数营销页面(例如/,/,/接触等)的优化,那么你可能需要预渲染,无需使用web服务器实时动态编译HTML,而是使用预渲染方式,在构建时简单地生成针对特定路由的静态HTML文件,优点是设置预渲染更简单,并可以将你的前端作为一个完全静态的站点
如果你使用webpack,你可以使用<代码> prerender-spa-plugin> 代码(npm地址)插件轻松地添加预渲染
构建流程:所有的文件拥有一个公共入口<代码>应用程序。js代码> ,进入服务端入口<代码>输入服务器。js代码>和客户端入口<代码> entry-client。js代码> ,项目完成后通过使用webpack打包生成服务端<代码> server bundle> 代码(一个供服务端SSR使用的json文件)和客户端<代码>客户端包> 代码(用于浏览器),当请求页面时,服务端将vue组件组装成HTML字符串发送到浏览器,混入到客户端访问的HTML模板中,完成页面渲染
<代码> vue-server-renderer 代码>
<代码> vue-server-renderer> 代码是SSR渲染的核心,提供<代码> createRenderer 代码>方法,这个方法的<代码> renderToString> 代码可以把应用渲染成字符串。<代码> createBundleRenderer 代码>方法可以通过预打包应用程序代码创建bundleRenderer实例,来渲染包和HTML模板
安装vue-server-renderer
npm安装vue-server-renderer——保存
注意:
- <李> vue-server-renderer和vue必须匹配版本李> <李> vue-server-renderer依赖一些节点。js原生模块,因此只能在节点。js中使用李>
,
节点。js服务器是一个长期运行的进程,当我们的代码进入该进程时,它将进行一次取值并留存在内存中,这意味着如果创建一个单例对象,它将在每个传入的请求之间共享,所以我们应该暴露一个可以重复执行的工厂函数,为每个请求创建一个新的根Vue实例,如果我们在多个请求之间使用一个共享的实例,很容易导致交叉请求状态污染(同样的规则也适用于路由器,商店和事件总线实例)
<>强创建路由路由器强>
安装vue-router
npm安装vue-router——保存
在<代码> src 代码>目录下创建路由器<代码> 代码>文件夹和<代码>索引。js代码>
在组件目录下创建家园。vue和。vue页面(根据项目需求自定义创建)
路由器/索引。js:
从“进口Vue vue" 从“进口路由器;vue-router" 从“进口回家@/组件/Home" 从“进口对@/组件/About" Vue.use(路由器)//每次用户请求都需要创建一个新的路由器实例//创建createRouter工厂函数 出口的默认函数createRouter () {//创建路由器实例 返回新路由器({ 模式:“history", 路线:[ { 路径:“/? 名称:& # 39;回家# 39; 组件:回家 }, { 路径:“/about", 名称:& # 39;关于# 39; 组件: } ] }) }vuecli项目实现构建SSR服务端渲染