美文网首页
vue、react在webpack中代码分割,性能优化

vue、react在webpack中代码分割,性能优化

作者: peroLuo | 来源:发表于2019-03-12 11:23 被阅读0次

在使用vue-cli、create-react-app中,webpack构建的打包构建的单页应用会生成一个大文件。这意味着我们的项目首屏加载会需要更长的时间,那么怎么减少首屏的js文件大小呢?就是code-splitting。

一、react篇

  1. 封装异步加载AsyncComponent
  import React, { Component } from "react";

export default function asyncComponent(importComponent) {
  class AsyncComponent extends Component {
    constructor(props) {
      super(props);

      this.state = {
        component: null
      };
    }

    async componentDidMount() {
      const { default: component } = await importComponent();

      this.setState({
        component: component
      });
    }

    render() {
      const C = this.state.component;

      return C ? <C {...this.props} /> : null;
    }
  }

  return AsyncComponent;
}
  1. 该asyncComponent函数采用了一个参数; 一个 function(importComponent),当被调用时将动态导入给定的组件。当我们使用时,这将更有意义asyncComponent。
  2. 在componentDidMount,我们只需调用importComponent传入的函数。并将动态加载的组件保存在状态中。
  3. 最后,如果组件已完成加载,我们会有条件地渲染组件。如果不是,我们只是渲染null。但是null,您可以渲染加载微调器而不是渲染。当您的应用程序的一部分仍在加载时,这会给用户一些反馈。
import AsyncComponent from '../components/AsyncComponent'
const Home = AsyncComponent(() => import('../page/home'))
const routes = [
  {
    name: '首页',
    isTab: true,
    link: '/home',
    component: Home
  }
]
export default routes
import React, { Component, Fragment } from 'react';
import  { Router, Route, Redirect} from 'react-router-dom'
import routes from '../../router'
function RenderRouters({routes}) {
  return routes.map((item) =>{
    return(
      <Route
        path={item.link}
        key={item.name}
        render={() => (<item.component />)} />
    )
  })
}
class App extends Component {
  render() {
    return (
      <div className="App">
        {
            <Router history={history}>
              <Fragment>
                <Route exact path="/" render={() => (
                  <Redirect to="/home" />
                )} />
                <RenderRouters routes={routes}></RenderRouters>
              </Fragment>
            </Router>
        }
      </div>
    );
  }
}
export default App

这样一来,打包之后,会生成多个js文件。进入一个新的路由会加载对应的js文件,大大缩小了首屏js文件大小

二、vue篇

1.路由按需加载

import Vue from 'vue'
import VueRouter from 'vue-router'
const Home= () => import('pages/Home')
Vue.use(VueRouter)
const routes = [{
    path: '/',
    redirect: '/home',
    component: Home
}]
const router = new VueRouter({
  routes
})
export default router

2.组件按需加载

// import op from '@/components/op'
const op= () => import('@/components/op')

相关文章

  • vue、react在webpack中代码分割,性能优化

    在使用vue-cli、create-react-app中,webpack构建的打包构建的单页应用会生成一个大文件。...

  • Vue路由异步组件

    vue异步组件和懒加载可以优化vue的性能 一、 原理 利用webpack对代码进行分割是懒加载的前提,懒加载就是...

  • 重点掌握

    【前端性能优化汇总】【Webpack原理+React原理+Redux+React Router】【输入URL后发生...

  • [性能优化]Webpack篇

    参考文章:Vue 项目性能优化 — 实践指南(网上最全 / 详细) Webpack 对图片进行压缩 在 vue 项...

  • react shouldComponentUpdate

    对比vue,性能优化对react更加重要,shouldComponentUpdate又是react中性能重要的一个...

  • vue性能优化详解(二)

    前端路漫漫,优化无极限。本文主要从Webpack角度讲述vue性能优化。 1.Webpack 对图片进行压缩 如果...

  • web 前端性能优化

    一、webpack优化 js 代码分割,设置未变动代码文件的 hash 值不变将不在开发中不会变动的代码,单独打包...

  • 【React.js 20】React性能优化

    React性能优化 React性能优化主要分三块: React 组件性能优化 属性传递优化针对单组件性能优化,很多...

  • sammary

    vue-diff算法 react 性能优化 diff算法 ,局部更新DOMshouldComponentUpdat...

  • 深入浅出React和Redux学习笔记(五)

    React组建的性能优化 性能优化的方法: 单个React组件的性能优化; 多个React组件的性能优化; 利用r...

网友评论

      本文标题:vue、react在webpack中代码分割,性能优化

      本文链接:https://www.haomeiwen.com/subject/grdgpqtx.html