网站访问速度提升93.8%只因我做了这件事!

7,053 阅读3分钟

哈喽大家好,我是一名软件工程专业的在校生,第一次做完整的前后端分离项目,第一次把网站上线。

当我开心地在浏览器输入地址,但访问首页要8秒多好慢啊!!!

打开控制台排查原因, 首页加载大概8.7M左右的资源,服务器带宽10Mbps 加载速度理论是 8.7 * 1024 /128 /10 = 7 s 左右,加载速度正常,所以服务器运行正常。

发现主要原因是chunk-vendors.js文件太大,导致加载速度慢。

11_爱奇艺.jpg 首先清理了一下用不到的依赖和配置 访问速度缩短为4.4秒 微信截图_20240505143308.png 接着在网上查阅资料,

第一个方案是 使用optimization.splitChunks做分包

需要修改vue.config.js文件

optimization: {
  // 将运行时代码提取为单独的 chunk,以便更好地利用缓存
  runtimeChunk: 'single',
  // 将第三方库和业务代码分割到不同的 chunk 中,以便更好地利用浏览器的并行加载机制
  splitChunks: {
    chunks: 'all', // 表示对所有模块进行代码分割
    maxInitialRequests: Infinity, // 没有最大的初始化请求限制
    minSize: 20000, // 模块的最小大小,小于此值的模块不会被拆分
    maxSize: 60000, // 模块的最大大小,大于此值的模块会被拆分
    cacheGroups: {
      vendors: {
        // 指定匹配的模块来源
        test: /[\/]node_modules[\/]/,
        // 设置优先级,防止和自定义的公共模块提取时被覆盖,值越大优先级越高
        priority: -10,
        // 重命名提取出来的 chunk 名,此处取自 node_modules 文件夹下的模块名
        name(module) {
          const match = module.context.match(/[\/]node_modules[\/](.*?)([\/]|$)/);
          if (match && match[1]) {
            const packageName = match[1];
            return `npm.${packageName.replace('@', '')}`;
          }
          // 如果匹配失败或者没有匹配结果,则返回一个默认的名称
          return 'vendor';
        },
      },
    },
  },
},

相比最开始全部加载时间还是有进步的,不过比清理依赖和配置变化不大(全部加载时间没记录,应该也就几百毫秒•ᴗ•💧) image.png 原理我猜和删除node_modules速度慢差不多...我猜的

但是还是有点慢,继续优化!

第二个方案是压缩代码,同时需要修改nginx配置

安装compression-webpack-plugin插件。

yarn add compression-webpack-plugin --save-dev

前端将文件打包成.gz文件,然后通过nginx的配置,让浏览器直接解析.gz文件,可以大大提升文件加载的速度。

需要修改vue.config.js文件

configureWebpack: {
  plugins: [
    new CompressionPlugin({
      // 压缩后的文件名
      filename: '[path][base].gz',
      // 压缩算法,这里使用gzip
      algorithm: 'gzip',
      // 匹配需要压缩的文件类型,这里匹配js和css文件
      test: new RegExp( 
           '\.(js|css|jpg|jpeg|png|gif|svg)$'
      ),
      // 只有文件大小大于等于这个值的文件才会被压缩,单位是字节,默认为0
      threshold: 10240, // 10 KB
      // 压缩率,只有压缩率达到或超过这个值的文件才会被压缩,默认是0.8
      minRatio: 0.8,
    }),
  ],
},

需要修改nginx.config文件,读取压缩后的文件

server {
    gzip on; // 开启gzip压缩
    gzip_min_length 1k; // 只压缩大于1KB的文件
    gzip_comp_level 9; // 压缩级别,级别越高压缩率越高,但消耗CPU资源也越多
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; // 指定需要进行gzip压缩的文件类型
    gzip_vary on; // 根据Accept-Encoding请求头决定是否启用压缩,防止CDN缓存问题
    gzip_disable "MSIE [1-6]\."; // 禁用gzip压缩的浏览器类型,这里禁用了IE6及以下的浏览器
    // 其余配置
}

访问速度缩短为542毫秒,1秒以内! 1714891517324.png

综合使用前面的两种方法,发现🖌️🐍🍩⚽,表现效果还是纯压缩最好。

image.png 还有什么解决方案呢? 还可以使用CDN继续优化,得加钱...

提升了多少呢?问一下豆包同学吧;

爱奇艺截屏20240505150750.png

好啦,标题也有了哈哈(๑•̀ㅂ•́)و✧
本篇文章到此结束🔚