当前位置: 首页 > article >正文

首屏加载慢问题

问题描述

项目打包到正式环境后,白屏加载长达十多秒才能看见首页页面,F12发现 chunk-vendors.js 文件体积大且加载慢。

问题原因

  1. chunk-vendors.js ,即第三方模块或供应商模块。是捆绑所有不是自己的模块,而是来自其他方的模块的捆绑包。
  2. 它保存了来自 /node_modules 目录的所有模块,会将所有 /node_modules 中的第三方包打包到 chunk-vendors.js 中。将所有的第三方包集中到一个文件,自然也会出现文件过大的问题。
  3. 本地运行时可能速度没有明显降低,是因为内网本机访问快,放到外网则和服务器性能等有关,速度会降低,用户体验感差。

解决方法

  1. 去掉无用的依赖
  2. 使用 compression-webpack-plugin 插件

compression-webpack-plugin 插件

  1. 原理
    • 前端打包时,同时生成 .gz 文件,然后通过 nginx 的配置,让浏览器直接解析 .gz 文件,可以大大提升文件加载的速度,浏览器可以直接解析 .gz 文件并解压。
  2. 前台修改步骤
  • 1.安装依赖

注:直接安装 compression-webpack-plugin 的最新版本可能会安装失败,报错 unable to resolve dependency tree,需要挨个找到能安装成功的旧版本,或者直接安装6.1.1版本。

npm install --save-dev compression-webpack-plugin@6.1.1
  • 2.在 vue.config.js 中配置
const webpack = require('webpack')
const CompressionPlugin = require('compression-webpack-plugin')
const zlib = require('zlib')


// webpack相关设置
module.exports = {
   configureWebpack: {
        plugins: [
            new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
            // 下面两项配置才是 compression-webpack-plugin 压缩配置
            // 压缩成 .gz 文件
            new CompressionPlugin({
                filename: '[path][base].gz',
                algorithm: 'gzip',
                test: /\.js$|\.css$|\.html$/,
                threshold: 10240,
                minRatio: 0.8
            }),
            // 压缩成 .br 文件,如果 zlib 报错无法解决,可以注释这段使用代码,一般本地没问题,需要注意线上服务器会可能发生找不到 zlib 的情况。
            new CompressionPlugin({
                filename: '[path][base].br',
                algorithm: 'brotliCompress',
                test: /\.(js|css|html|svg)$/,
                compressionOptions: {
                    params: {
                        [zlib.constants.BROTLI_PARAM_QUALITY]: 11
                    }
                },
                threshold: 10240,
                minRatio: 0.8
            })
        ]
    }
}

经过上述配置后,再打包会发现dist中多了几个.gz的文件
在这里插入图片描述

  1. 后台修改步骤
  • 修改Nginx 配置,找到当前 Vue 项目对应的 Server 追加下面 compression-webpack-plugin 相关配置,然后重启 Nginx。

下面的配置主要是开启服务器压缩功能,如果本地不压缩成 .gz 文件,服务器就需要压缩,但是这样会消耗服务器性能,所以上面前端通过插件打包时就压缩出来 .gz 文件,这样访问服务器就只需要读取下载即可,服务器不需要走一次压缩,减少服务器开销!

server{
    listen 8088;
    server_name localhost;
    
    # compression-webpack-plugin 配置
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 9;
    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_vary on;
    # 配置禁用 gzip 条件,支持正则,此处表示 ie6 及以下不启用 gzip(因为ie低版本不支持)
    gzip_disable "MSIE [1-6]\.";
}

http://www.kler.cn/a/442600.html

相关文章:

  • Docker 镜像制作原理 做一个自己的docker镜像
  • linux通过web向mac远程传输字符串,mac收到后在终端中直接打印。
  • 基于CiteSpace的知网专利文献计量分析与可视化
  • VSCode Live Server 插件安装和使用
  • Linux 服务器挖矿木马防护实战:快速切断、清理与加固20250114
  • 使用 Vite 创建 Vue 3 项目:从零开始的详细指南
  • 备战秋招:2024游戏开发入行与跳槽面试详解
  • 智能移动交通执法方案:易泊车牌识别相机助力精准执法与数据驱动管理
  • HCIA-Access V2.5_3_3_2_VLAN路由配置与实现
  • 机器学习之偏差
  • Shadcn UI 实战:打造可维护的企业级组件库
  • 简单配置,全面保护:HZERO审计服务让安全触手可及
  • 2412d,d的8月会议
  • Unity超优质动态天气插件(含一年四季各种天气变化,可用于单机局域网VR)
  • 【ETCD】【源码阅读】深入解析 EtcdServer.applyConfChange 方法
  • Web网络通信 --- 后端消息推送
  • Bootstrap 表格
  • 在 Ubuntu 中启用 root 用户的远程登录权限
  • 云连POS-ERP管理系统 download.action存在任意文件读取漏洞
  • 国产之光:KylinOS/麒麟系统安装
  • 挑战一个月基本掌握C++(第五天)了解运算符,循环,判断
  • 【C++】继承和派生(超级详细版)
  • SpringAI人工智能开发框架003---SpringAI智能聊天程序编写_Msg_Prompt_Stream方式_指定调用模型版本
  • BERT模型
  • 【Java基础面试题019】什么是Java中的不可变类?
  • SDK 和 REST API 的区别