设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

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

发布时间:2019-03-21 00:39 所属栏目:21 来源:counterxing
导读:一个基本项目可能像是这样: src ├──components │├──Foo.vue │├──Bar.vue │└──Baz.vue ├──frame │├──app.js#通用entry(universalentry) │├──entry-client.js#仅运行于浏览器 │├──ent

一个基本项目可能像是这样:

  1. src  
  2. ├── components  
  3. │   ├── Foo.vue  
  4. │   ├── Bar.vue  
  5. │   └── Baz.vue  
  6. ├── frame  
  7. │   ├── app.js # 通用 entry(universal entry)  
  8. │   ├── entry-client.js # 仅运行于浏览器  
  9. │   ├── entry-server.js # 仅运行于服务器  
  10. │   └── index.vue # 项目入口组件  
  11. ├── pages  
  12. ├── routers  
  13. └── store 

app.js是我们应用程序的「通用entry」。在纯客户端应用程序中,我们将在此文件中创建根Vue实例,并直接挂载到DOM。但是,对于服务器端渲染(SSR),责任转移到纯客户端entry文件。app.js简单地使用export导出一个createApp函数:

  1. import Router from '~ut/router';  
  2. import { sync } from 'vuex-router-sync';  
  3. import Vue from 'vue';  
  4. import { createStore } from './../store';  
  5. import Frame from './index.vue';  
  6. import myRouter from './../routers/myRouter';  
  7. function createVueInstance(routes, ctx) {  
  8.     const router = Router({  
  9.         base: '/base',  
  10.         mode: 'history',  
  11.         routes: [routes],  
  12.     });  
  13.     const store = createStore({ ctx });  
  14.     // 把路由注入到vuex中  
  15.     sync(store, router);  
  16.     const app = new Vue({  
  17.         router,  
  18.         render: function(h) {  
  19.             return h(Frame);  
  20.         },  
  21.         store,  
  22.     });  
  23.     return { app, router, store };  
  24. }  
  25. module.exports = function createApp(ctx) {  
  26.     return createVueInstance(myRouter, ctx);   

注:在我所在的项目中,需要动态判断是否需要注册DicomView,只有在客户端才初始化DicomView,由于Node.js环境没有window对象,对于代码运行环境的判断,可以通过typeof window === 'undefined'来进行判断。

避免创建单例

如Vue SSR文档所述:

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读