前端项目性能优化:工程化环境中将图片转为base64(vite插件)

一、优化原理

通过将图片转为base64的形式来减少请求,实现性能优化。

考虑到过大的图片转为base64形式会导致加载时间过长,反而会影响性能,所以需要对转化的图片的大小进行限制。

每次去使用图片的时候都去手动转化一次是很麻烦的,所以我们可以写一个插件,在项目运行时自动将符合条件的图片进行转换。

下面的代码示例是在vite中

二、代码

vite.config.ts中:

import { defineConfig } from "vite";
import fs from "fs";
const base64SetPlugin = (limit = 4096) => {
  return {
    name: "base64-set-plugin",
    async transform(_, id) {
      // 只处理图片文件
      if (!/\.(png|jpg|svg)$/.test(id)) return;
      //获取文件数据
      const stat = await fs.promises.stat(id);
      // 如果文件大小超过限制则不转换,太大的图片转换为base64不划算
      if (stat.size > limit) return;
      // 读取文件并转换为 base64
      const buffer = await fs.promises.readFile(id);
      const base64 = buffer.toString("base64");
      // 返回转换后的代码
      const dataUrl = `data:image/${id.split(".").pop()};base64,${base64}`;
      return {
        code: `export default ${JSON.stringify(dataUrl)}`,
      };
    },
  };
};
export default defineConfig({
  plugins: [
    base64SetPlugin(),
  ],
});

三、效果

我们可以在使用图片的页面中进行检查,查看代码。

使用插件前:

使用插件后:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值