加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

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

发布时间:2019-03-22 03:33:36 所属栏目:建站 来源:counterxing
导读:跟着各大前端框架的降生和演变,SPA开始风行,单页面应用的上风在于可以不从头加载整个页面的环境下,通过ajax和处事器通讯,实现整个Web应用拒不更新,带来了极致的用户体验。然而,对付必要SEO、追求极致的首屏机能的应用,前端渲染的SPA是糟糕的。亏得V

同时,必要在entry-server.js中实现处事器端路由逻辑,行使router.getMatchedComponents要领获取到当前路由匹配的组件,假如当前路由没有匹配到响应的组件,则reject到404页面,不然resolve整个app,用于Vue渲染假造DOM,并行使对应模板天生对应的HTML字符串。

  1. const createApp = require('./app');  
  2. module.exports = context => {  
  3.   return new Promise((resolve, reject) => {  
  4.     // ...  
  5.     // 配置处事器端 router 的位置  
  6.     router.push(context.url);  
  7.     // 比及 router 将也许的异步组件和钩子函数理会完  
  8.     router.onReady(() => {  
  9.       const matchedComponents = router.getMatchedComponents();  
  10.       // 匹配不到的路由,执行 reject 函数,并返回 404  
  11.       if (!matchedComponents.length) {  
  12.         return reject('匹配不到的路由,执行 reject 函数,并返回 404');  
  13.       }  
  14.       // Promise 应该 resolve 应用措施实例,以便它可以渲染  
  15.       resolve(app);  
  16.     }, reject);  
  17.   });  

在处事端预拉取数据

在Vue处事端渲染,本质上是在渲染我们应用措施的"快照",以是假如应用措施依靠于一些异步数据,那么在开始渲染进程之前,必要先预取息争析好这些数据。处事端Web Server Frame作为署理处事器,在处事端对接口处事提倡哀求,并将数据拼装到全局Vuex状态中。

另一个必要存眷的题目是在客户端,在挂载到客户端应用措施之前,必要获取到与处事器端应用措施完全沟通的数据 - 不然,客户端应用措施会由于行使与处事器端应用措施差异的状态,然后导致殽杂失败。

今朝较好的办理方案是,给路由匹配的一级子组件一个asyncData,在asyncData要领中,dispatch对应的action。asyncData是我们约定的函数名,暗示渲染组件必要预先执行它获取初始数据,它返回一个Promise,以便我们在后端渲染的时辰可以知道什么时辰该操纵完成。留意,因为此函数会在组件实例化之前挪用,以是它无法会见this。必要将store和路由信息作为参数转达进去:

举个例子:

  1. <!-- Lung.vue -->  
  2. <template>  
  3.   <div></div>  
  4. </template>  
  5. <script>  
  6. export default {  
  7.   // ...  
  8.   async asyncData({ store, route }) {  
  9.     return Promise.all([  
  10.       store.dispatch('getA'),  
  11.       store.dispatch('myModule/getB', { root:true }),  
  12.       store.dispatch('myModule/getC', { root:true }),  
  13.       store.dispatch('myModule/getD', { root:true }),  
  14.     ]);  
  15.   },  
  16.   // ...  
  17. }  
  18. </script> 

(编辑:湖南网)

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

热点阅读