随着项目的增大,项目运行速度会越来越慢,导致影响开发进度。需要提升开发时代码的运行速度。

1. ScopeHoisting作用域提升

该插件在production模式下默认开启。development下需要手动启动。

1 .使用条件

和TreeShaking一样,必须使用ES6的模块,使用import/export语法。

2. 优点:

1)节省内存开销。因为默认每个bundle会打成闭包。

2)减少体积,提升速度。因为如果不使用es模块,默认会包裹一层require。

3. 用法

1. 首先阻止babel将es6的模块进行转换

    {
test: /\.jsx?$/,
use: {
loader: 'babel-loader',
options: {
// 切记modules: false
presets: [['@babel/preset-env', {modules: false}], '@babel/preset-react'],
plugins: [
['@babel/plugin-proposal-decorators', {legacy: true}],
['@babel/plugin-proposal-class-properties', {loose: true}]
]
},
},
exclude: /node_modules/
}

2. 引入的第三方库尽量使用es版本

3. 在plugins中配置插件

  plugins: [
new webpack.optimize.ModuleConcatenationPlugin(),
]

4. node_modules中的模块优先使用指向es模块的文件

  resolve: {
mainFields: ['jsnext:main', 'browser', 'main']
},

2. 热更新

当项目特别大时,页面重新加载会非常缓慢,可以通过热更新,只更改修改的部分。

1. sevServer中开启热更新

module.exports = {
...
devServer: {
hot: true //默认开启webpack.HotModuleReplacementPlugin
}
}

2. css样式热更新

开发模式下使用style-loader, 默认实现了HMR。(css-hot-loader在hot:true时有问题)

      {
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},

3. jsx代码热更新

使用react-hot-loader插件,在需要的模块包裹hot函数。

{
test: /\.jsx?$/,
use: {
loader: 'babel-loader',
options: {
presets: [['@babel/preset-env', {modules: false}], '@babel/preset-react'],
plugins: [
['@babel/plugin-proposal-decorators', {legacy: true}],
['@babel/plugin-proposal-class-properties', {loose: true}],
['react-hot-loader/babel']
]
},
},
exclude: /node_modules/
},

在代码中使用hot方法

import React from 'react';
import { hot } from 'react-hot-loader/root'; function Test(props) {
return(
<div className="hehe">ppp</div>
)
} export default process.env.NODE_ENV === 'development' ? hot(Test) : Test;

也可以不使用该插件,自己实现逻辑

// 尽量在子组件实现该逻辑;它不接受css文件的变化
if(module.hot) {
module.hot.accept(['./example.js'], () => {
ReactDOM.render(<App/>, window.root)
})
}

最新文章

  1. 谈谈对BPM的理解
  2. user profile services提示&ldquo;BAIL: MMS(7116): sql.cpp(8490): 0x80231334 (The sql connection string has unsupported values.)&rdquo;解决办法
  3. ajax请求web服务返回json格式
  4. Java菜鸟培训第二天
  5. ES5 数组方法map
  6. HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化
  7. Spark视频 王家林 Spark公开课大讲坛第二期: Spark的Shark和SparkSQL
  8. window.onbeforeunload 如果取消, 那么javascript变量会保存
  9. python2.7中使用mysql (windows XP)
  10. Python中几种数据类型list, tuple,dict,set的使用演示
  11. 1.ActionBar
  12. 【原创】大数据基础之Hive(5)性能调优Performance Tuning
  13. Spring+SpringMVC+MyBatis的整合
  14. 更新本地git仓库的远程地址(remote地址)
  15. Vim插件集合
  16. 7. Bagging &amp; Random Forest
  17. information_schema系列九
  18. 【bzoj】2733: [HNOI2012]永无乡
  19. 反应器(Reactor)模式
  20. Winform程序在XP系统上双击运行无反应解决方法

热门文章

  1. PAT(B) 1085 PAT单位排行(Java:20分)
  2. C# vb .net实现亮度调整特效滤镜效果
  3. top 命令 详解
  4. Java中BIO和NIO
  5. 入门Docker,你要下载什么?注册什么?
  6. javascript高级程序设计阅读总结
  7. Flask中jinja2的应用
  8. fastjson反序列化漏洞研究(下)
  9. vue + elementui 使用多选按钮实现单选功能
  10. [MySQL]重装数据库后无法启动服务