加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Vue服务端渲染实践 ——Web应用首屏耗时最优化方案

发布时间:2019-03-24 14:45:38 所属栏目:优化 来源:counterxing
导读:副标题#e# 随着各大前端框架的诞生和演变,SPA开始流行,单页面应用的优势在于可以不重新加载整个页面的情况下,通过ajax和服务器通信,实现整个Web应用拒不更新,带来了极致的用户体验。然而,对于需要SEO、追求极致的首屏性能的应用,前端渲染的SPA是糟糕

原因是改造之前,使用客户端渲染时,使用了devServer.proxy代理配置来解决跨域问题,而服务端作为代理服务器对接口发起异步请求时,不会读取对应的webpack配置,对于服务端而言会对应请求当前域下的对应path下的接口。

解决方案为去除webpack的devServer.proxy配置,对于接口请求带上对应的origin即可:

  1. const requestUrlOriginrequestUrlOrigin = requestUrlOrigin = state.ctx.URL.origin;  
  2. const res = await Axios.get(`${requestUrlOrigin}${url.GET_A}`, requestParams); 
  •  对于vue-router配置项有base参数时,初始化时匹配不到对应路由的问题

在官方示例中的entry-server.js:

  1. // entry-server.js  
  2. import { createApp } from './app';  
  3. export default context => {  
  4.   // 因为有可能会是异步路由钩子函数或组件,所以我们将返回一个 Promise,  
  5.   // 以便服务器能够等待所有的内容在渲染前,  
  6.   // 就已经准备就绪。  
  7.   return new Promise((resolve, reject) => {  
  8.     const { app, router } = createApp();  
  9.     // 设置服务器端 router 的位置  
  10.     router.push(context.url);  
  11.     // ...  
  12.   });  

原因是设置服务器端router的位置时,context.url为访问页面的url,并带上了base,在router.push时应该去除base,如下所示:

  1. router.push(context.url.replace('/base', '')); 

小结

本文为笔者通过对现有项目进行改造,给现有项目加上Vue服务端渲染的实践过程的总结。

首先阐述了什么是Vue服务端渲染,其目的、本质及原理,通过在服务端使用Vue的虚拟DOM,形成初始化的HTML字符串,即应用程序的“快照”。带来极大的性能优势,包括SEO优势和首屏渲染的极速体验。之后阐述了Vue服务端渲染的基本用法,即两个入口、两个webpack配置,分别作用于客户端和服务端,分别生成vue-ssr-client-manifest.json与vue-ssr-server-bundle.json作为打包结果。最后通过对现有项目的改造过程,包括对路由进行改造、数据预获取和状态初始化,并解释了在Vue服务端渲染项目改造过程中的常见问题,帮助我们进行现有项目往Vue服务端渲染的迁移。

【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读