react首屏页面加载性能优化记录

能按需加载的东西、尽量配置一下。

一、webpack devtool

devtool的值有好几个,根据自己的情况和环境的不同,选择合适的,一般打包的时候可以用:eval 、eval-source-map或者cheap-eval-source-map。我这边打包时,直接设置成了:‘eval ’。具体可以去官网查看每个值的作用~

 

 

二、如果使用的是antd框架,通过打包分析,你会发现有个icons文件500多k,有点大~ 

解决办法是:

1.随意找个地方建个.js文件,名称也随意~,比如是icons.js (当然要规范哈),用来按需引入在项目中使用到的图标,如下:

// 根据自己在项目中使用到的图标 按需引入
export { default as UserOutline} from '@ant-design/icons/lib/outline/UserOutline'
export { default as LockOutline} from '@ant-design/icons/lib/outline/LockOutline'
export { default as GitlabOutline} from '@ant-design/icons/lib/outline/GitlabOutline'
export { default as ProjectOutline} from '@ant-design/icons/lib/outline/ProjectOutline'
export { default as BulbOutline} from '@ant-design/icons/lib/outline/BulbOutline'
export { default as DesktopOutline} from '@ant-design/icons/lib/outline/DesktopOutline'

 

2.在webpack配置文件中的alias对象,添加一些代码,代码如下:

alias:{
   '@ant-design/icons/lib/dist$': path.resolve(__dirname, '填第一步文件的路径')
   // '@ant-design/icons/lib/dist$': path.resolve(__dirname, '../src/util/icons.js')
}

注:目前使用的antd版本是^3.26.15 。如果项目中,用的图标太多,那就有点麻烦了,可以直接考虑用阿里巴巴矢量图吧~

 

三、开启gzip压缩功能

1.安装 compression-webpack-plugin ,执行 npm i compression-webpack-plugin -D

2.引入compression-webpack-plugin

const CompressionWebpackPlugin = require("compression-webpack-plugin");
  const productionGzipExtensions = ["js", "css", "json"];

3.在plugins中配置

new CompressionWebpackPlugin({ //gzip配置
                algorithm: 'gzip',
                test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
                minRatio: 0.6,
                threshold:10240, //超过10k
            })

compression-webpack-plugin还有其它配置项,具体可以去webpack官网,直接搜索compression-webpack-plugin就行。

配置完之后,直接运行打包命令,npm run build ,然后在打包文件夹中,会多出一些.gz文件。之后、全部放到服务器上去。(在vue中也同样可以使用)

 

需要确保服务器那边,开启了gzip功能。

其实前端这些配置,按理说是可以省略的,因为服务器那边直接开启gzip功能,也能有压缩效果。

那为啥还要前端这边去配置生成.gz文件呢?如果前端这边提供了.gz文件,服务器收到请求时,就直接用这个文件了,但如果前端没有提供.gz文件,服务器会自动去压缩生成,这一步压缩生成,是需要时间滴。

 

posted @ 2020-04-14 18:17  兔子先生i  阅读(1627)  评论(0编辑  收藏  举报