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

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

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

当编写纯客户端 (client-only) 代码时,我们风俗于每次在新的上下文中对代码举办取值。可是,Node.js 处事器是一个恒久运行的历程。当我们的代码进入该历程时,它将举办一次取值并留存在内存中。这意味着假如建设一个单例工具,它将在每个传入的哀求之间共享。如根基示例所示,我们为每个哀求建设一个新的根 Vue 实例。这与每个用户在本身的赏识器中行使新应用措施的实例相同。假如我们在多个哀求之间行使一个共享的实例,很轻易导致交错哀求状态污染 (cross-request state pollution)。因此,我们不该该直接建设一个应用措施实例,而是应该袒露一个可以一再执行的工场函数,为每个哀求建设新的应用措施实例。同样的法则也合用于 router、store 和 event bus 实例。你不该该直接从模块导出并将其导入到应用措施中,而是必要在 createApp 中建设一个新的实例,并从根 Vue 实例注入。

如上代码所述,createApp要领通过返回一个返回值建设Vue实例的工具的函数挪用,在函数createVueInstance中,为每一个哀求建设了Vue,Vue Router,Vuex实例。并袒露给entry-client和entry-server模块。

在客户端entry-client.js只需建设应用措施,而且将其挂载到DOM中:

  1. import { createApp } from './app';  
  2. // 客户端特定引导逻辑……  
  3. const { app } = createApp();  
  4. // 这里假定 App.vue 模板中根元素具有 `id="app"`  
  5. app.$mount('#app'); 

处事端entry-server.js行使default export 导出函数,并在每次渲染中一再挪用此函数。此时,除了建设和返回应用措施实例之外,它不会做太多工作 - 可是稍后我们将在此执行处事器端路由匹配和数据预取逻辑:

  1. import { createApp } from './app';  
  2. export default context => {  
  3.   const { app } = createApp();  
  4.   return app;  

在处事端用vue-router支解代码

与Vue实例一样,也必要建设单例的vueRouter工具。对付每个哀求,都必要建设一个新的vueRouter实例:

  1. function createVueInstance(routes, ctx) {  
  2.     const router = Router({  
  3.         base: '/base',  
  4.         mode: 'history',  
  5.         routes: [routes],  
  6.     });  
  7.     const store = createStore({ ctx });  
  8.     // 把路由注入到vuex中  
  9.     sync(store, router);  
  10.     const app = new Vue({  
  11.         router,  
  12.         render: function(h) {  
  13.             return h(Frame);  
  14.         },  
  15.         store,  
  16.     });  
  17.     return { app, router, store };  

(编辑:湖南网)

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

热点阅读