短时间重复做操作,可以用防抖debounce等优化方式,减少http请求
function debounce(func, wait) {
let timeout;
return function() {
let context = this; // 指向全局
let args = arguments;
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(() => {
func.apply(context, args); // context.func(args)
}, wait);
};
}
// 使用
window.onscroll = debounce(function() {
console.log(‘debounce‘);
}, 1000);
只允许一个函数在N秒内执行一次。滚动条调用接口时,可以用节流throttle等优化方式,减少http请求
function throttle(fn, delay) {
let prevTime = Date.now();
return function() {
let curTime = Date.now();
if (curTime - prevTime > delay) {
fn.apply(this, arguments);
prevTime = curTime;
}
};
}
// 使用
var throtteScroll = throttle(function() {
console.log(‘throtte‘);
}, 1000);
window.onscroll = throtteScroll;
loader: ‘babel-loader?cacheDirectory=ture‘
module:{
loader:[
{
//js文件才使用babel
test:/\.js$/,
//只在src文件夹下查找
include:[resolve(‘src‘)],
exclude:/node_modules/,
//id后面的内容对应下面
loader:‘happypack/loader?id=happypack‘
}
]
},
plugins:[
new HappyPack({
id:‘happypack‘,
loaders:[‘babel-loader?cacheDirectory‘],
//开启4个线程
threads:4
})
]
//单独配置在一个文件里
//webpack.dll.conf.js
const path = require(‘path‘)
const webpack = require(‘webpack‘)
module.exports = {
entry:{
//想统一打包的库
vendor:[‘react‘]
},
output:{
path:path.join(__dirname,‘dist‘),
filename:‘[name].dll.js‘,
library:‘[name]-[hash]‘
},
plugins:[
new webpack.DllPlugin({
//name必须和output.library一致
name:‘[name]-[hash]‘,
//该属性需要与DllReferencePlugin中一致
context:__dirname,
path:path.join(__dirname,‘dist‘,‘[name]-mainfest.json‘)
})
]
// webpack.conf.js
module.exports={
//...省略其他配置
plugins: [
new webpack.DllReferencePlugin({
context: __dirname,
mainfest:require(‘./dist/vendor-mainfest.json‘)
})
]
}
optimization: {
runtimeChunk: {
name: ‘manifest‘ // 将 webpack 的 runtime 代码拆分为一个单独的 chunk。
},
splitChunks: {
cacheGroups: {
vendor: {
name: ‘chunk-vendors‘,
test: /[\\/]node_modules[\\/]/,
priority: -10,
chunks: ‘initial‘
},
common: {
name: ‘chunk-common‘,
minChunks: 2,
priority: -20,
chunks: ‘initial‘,
reuseExistingChunk: true
}
},
}
},
// 第一步:引用antd、react、react-dom、moment、lodash的cdn
<script src="https://cdn.bootcdn.net/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/16.3.2/umd/react-dom.production.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
<script src="https://cdn.bootcss.com/moment.js/2.22.1/moment.min.js"></script>
<script src="https://cdn.bootcss.com/moment.js/2.22.1/locale/zh-cn.js"></script>
<script crossorigin="anonymous"
integrity="sha512-N8Wbuq8SeLoZ4j1Jfwva1Xd8MVNrSxVFzuxDF1YnUcNB6YncjyNtUAuPs1SSncDd98FcM/ZkvgXsr3DfwERW6A=="
src="https://lib.baomitu.com/antd/3.26.15/antd-with-locales.min.js"></script>
<link crossorigin="anonymous"
integrity="sha512-cBOfQ2h52wVLbgKbFuf6wf0qlrRhbwwAlrIMFjU3NrvRbr/OxYplBiIV4bmk1arz1g7T85HGq36hP6kAxPyt1w=="
href="https://lib.baomitu.com/antd/3.26.15/antd.min.css" rel="stylesheet">
<script crossorigin="anonymous"
integrity="sha512-131CXtlyQOY833mTVES49ngssH0LdxpKuv6NU/ex69688rmm+OSswA2yiiNAPTelbhwo0PVEts8a5RlbQnA0rA=="
src="https://lib.baomitu.com/antd/3.26.15/antd.min.js"></script>
// 第二一步:webpack.config.common.js修改
module.exports = {
...
// externals告诉webpack那些资源从哪里寻找,值表示的当前环境下的变量,比如引入React之后,React被作为全局对象,webpack就回去寻找React对象
externals: {
"configs": "configs",
"react": "React",
"react-dom": "ReactDOM",
"lodash": "_",
"moment": "moment",
"antd": "antd"
}
...
}
JavaScript:UglifyPlugin
CSS :MiniCssExtractPlugin
HTML:HtmlWebpackPlugin
const CompressionPlugin = require(‘compression-webpack-plugin‘);
module.exports = {
plugins: [new CompressionPlugin()],
}
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use:[
{
loader: ‘url-loader‘,
options: {
limit: 10000, /* 图片大小小于1000字节限制时会自动转成 base64 码引用*/
name: utils.assetsPath(‘img/[name].[hash:7].[ext]‘)
}
},
/*对图片进行压缩*/
{
loader: ‘image-webpack-loader‘,
options: {
bypassOnDebug: true,
}
}
]
}
原文:https://www.cnblogs.com/Hsong/p/14729731.html