像vue这种单页面应用以及react项目组件渲染,若是没有应用懒加载,运用webpack打包后的文件将会异常的大,形成进入首页时,须要加载的内容过多,时间过长,会出啊先长时间的白屏,即便作了loading也是不利于用户体验,而运用懒加载则能够将页面进行划分,须要的时候加载页面,能够有效的分担首页所承担的加载压力,减小首页加载用时;vue
//vue里面的vue-router生态里面,实现路由的懒加载的时候,经过设置实例化VueRouter来定义路由对象 import Vue from 'vue'; import VueRouter from 'vue-router'; Vue.use(VueRouter); 经过设置路由集合,将组件和路由一一映射~~~~
const routes = [ 根路径 { path: '/', redirect: { name: 'guide' }, }, //配置引导页 { path: '/guide', name: 'guide', component: Guide, }, //配置主页的路径 { path: "/main", name: "main", component: () => import("@/views/Main.vue"), //二级子路由 children: [ //找不到的状况下进电影页面 { path: "", redirect: { name: "movie" } }, //电影二级路由 { path: "movie", name: "movie", component: () => import("@/views/Movie.vue") }, //电影院页面路由 { path: "cinema", name: "cinema", component: () => import("@/views/Cinema.vue") }, //商品页面路由 { path: "good", name: "good", component: () => import("@/views/Good.vue") }, //个人我的中心路由 { path: "mine", name: "mine", component: () => import("@/views/Mine.vue") }, //电影详情页路由 { path: "detail", name: "detail", component: () => import("@/views/Detail.vue") }, //电影选座 { path: "choose", name: "choose", component: () => import("@/views/Choose.vue") }, //订单选择 Orderform.vue { path: "orderform", name: "orderform", component: () => import("@/views/Orderform.vue") }, //商品详情页 { path: "goodsdetail", name: "goodsdetail", component: () => import("@/views/GoodsDetail.vue") }, //购物车路由 { path: "shopcar", name: "shopcar", component: () => import("@/views/Shopcar.vue") }, //重定向到电影页面 { path: "*", redirect: { name: "movie" } } ] }, //登陆页面路由 { path: "/login", name: "login", component: () => import("@/views/Login.vue"), }, //城市页面路由 { path: "/city", name: "city", component: () => import("@/views/City.vue"), }, //搜索页路由 { path: "/search", name: "search", component: () => import("@/views/Search.vue") }, //重定向 { path: '*', redirect: { name: 'guide' } } ] //定义路由对象 const router = new VueRouter({ // mode: 'history', // base: process.env.BASE_URL, routes }) //暴露 接口 export default router
经过使用react-loadable的第三方模块,实现懒加载;
指向路由懒加载 须要下插件cnpm i react-loadable -Sreact
封装一个lazyLoad.js文件;webpack
import React from "react"; import Loadable from "react-loadable";~~~~ // import {Toast} from "antd-mobile"; //通用的懒加载 const loadingComponent = () => { return ( <div> loading.....~~~~ </div> ) } //loading 组件通用, export default (loader, loading = loadingComponent) => { return Loadable({ loader, //须要懒加载的组件 loading }) }
import LazyLoad from "./lazyload"; export default class MainLayout extends Component { render() { return ( <div className="main"> <Switch> <Route path="/" exact render={() => (<Redirect to="/guide" />)} /> <Route path="/guide" component={LazyLoad(()=>import("./guide"))}></Route> <Route path="/login" component={LazyLoad(()=>import("./login"))}></Route> <Route path="/search" component={LazyLoad(()=>import("./search"))} /> <Route path="/main" component={LazyLoad(()=>import("./main"))} /> <Route path="/scan" component={LazyLoad(()=>import("./scan"))} /> {/* 不存在 */} <Route render={() => (<Redirect to="/guide" />)}></Route> </Switch> </div> ) } }
ok了web