书法字典:https://www.shufadict.com

React优化

背景

React开发的项目首页加载慢是常见问题,网上有很多优化手段,但是具体情况还要具体分析,最近用React撸了一个网站,周末无事,正好优化一下。

优化目标:https://www.shufadict.com - 书法字典。

分析

先看优化前的效果,可以看到主要是js下载太耗时。两个js加起来要3s的时间,体验相当差。

 

看了一下http请求,已经使用了http2(上图Protocol一列),如果你使用的是nginx,但没有开启http 2.0 可以用如下方式开启,在nginx配置文件中加入下面一行。

listen 443 ssl http2 default_server;

再看看是否开启了gzip压缩,可以看到已经开启了,如下图:

 

 开始优化

先打开main.dd9bb747.chunk.js看看这个文件里面都加载了什么,打开以后发现,这个js里面有大段大段的图片文件数据,如下。

 

因为我的首页采用的是九宫格模式,类似手机桌面的图标,上面一个图片,下面一段文字。而这些图片多作为静态资源放到了static目录下,所以webpack打包的时候把这些图片也打包到js里面了,导致js体积过大。

这是因为webpack打包的时候把体积小的图片直接打包到js里面了,解决办法可以参考这里:https://stackoverflow.com/questions/57117878/create-react-app-reduce-build-size-main-hash-chunk-js-is-3mb-with-mostly-ima

 

 解决办法

方法一:阻止webpack将静态图片打包成base64,由于我的项目是用CRA(Create React App创建的,所以webpack的实现被隐藏了,可以使用react-app-rewired这个包来重写webpack的配置,步骤如下:

1. 安装react-app-rewired, “yarn install react-app-rewired”。

2. 在项目根目录下创建一个config-overrides.js文件用来重写webpack的配置。

3. 在config-overrides.js添加如下内容:

复制代码
/* config-overrides.js */
module.exports = function override(config, env) {
  config.module.rules.push(
      {
        test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
        loader: require.resolve('url-loader'),
        options: {
          limit: 1,
          name: 'static/media/[name].[hash:8].[ext]',
        },
      }
  );
  return config;
};
复制代码

方法二:

在.env.development和.prod.development文件中添加如下一行。

IMAGE_INLINE_SIZE_LIMIT=0

方法三:把图片从静态资源中分离出来,做成动态加载的形式(比如放到阿里云OSS上)。

自定义webpack设置

由于create-react-app封装了webpack,所以使用CRA创建的工程是没有webpack配置文件的,那么webpack的配置文件在哪里呢?且看下图:

Webpack 打包优化

使用splitChunks插件进行优化,https://webpack.js.org/plugins/split-chunks-plugin/

 

== 

posted on   翰墨小生  阅读(729)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2009-06-06 Plateau problem

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
书法字典:https://www.shufadict.com
点击右上角即可分享
微信分享提示