Vue_项目优化JS使用Gzip暴力压缩

gzip压缩有两种方案:

  1. vue项目打包时生成.gz压缩文件,通过nginx直接返回。
  2. nginx实时生成.gz压缩文件并返回给客户端。

1. 清除浏览器缓存

2. 打开首页

3. app.js 跟 chunk-vendors.js 超过1M,请求状态200,超过20秒

 

 

 4. 如果请求状态返回304 Not Modifyed,表示加载浏览器缓存的数据

 

 

 5. 优化这个20秒:

步骤一:更改路由

   推荐:使用懒加载的方式: 'Element': (resolve) => require(['@/views/sys/element'],resolve)

           不使用懒加载的方式:'Analysis': () => import('@/views/dashboard/Analysis')

步骤二:使用gzip压缩

参考文档:https://www.css88.com/doc/webpack2/plugins/compression-webpack-plugin/

安装命令: yarn add compression-webpack-plugin@5.0.1

注意:如果你这里直接不加@5.0.1版本进行安装,有可能编译的时候会出现异常:Cannot read property 'tapPromise' of undefined 原因是webpack的包版本不兼容

更改vue.config.js文件:

复制代码
 // 获取时间戳
const Timestamp = new Date().getTime();
// 引用gzip暴力压缩
const CompressionPlugin = require('compression-webpack-plugin')

const vueConfig = {
    configureWebpack: { // webpack plugins
       //devtool: 'source-map',
        output: { // 输出重构  打包编译后的 文件名称  【模块名称.时间戳】
            filename: `js/[name]-${Timestamp}.js`,
            chunkFilename: `js/[name]-${Timestamp}.js`
        },        plugins: [
//提供带 Content-Encoding 编码的压缩版的资源
            new CompressionPlugin({
algorithm:
'gzip',// 使用gzip压缩 test: /\.js$|\.html$|\.css/,// 匹配文件名
filename: '[path][base].gz[query]', // 压缩后的文件名(保持原文件名,后缀加.gz)
// test: /\.(js|css)$/, threshold: 10240, // 对超过10k的数据压缩 deleteOriginalAssets: false, // 不删除未压缩的源文件(这里可以改成true,改成true的话打包后的文件就只剩*.gz文件)是否删除未压缩的源文件,谨慎设置,如果希望提供非gzip的资源,可不设置或者设置为false(比如删除打包后的gz后还可以加载到原始资源文件) minRatio: 0.8 // 压缩率小于0.8才会压缩
            }),
        ]
复制代码

 

步骤三:map文件的作用在于:项目打包后,代码都是经过压缩加密的,不能debugger
更改vue.config.js文件:
    
productionSourceMap: false
 
打包结果:

 

 

 


 

 

本地运行结果:
 

 

 

 

 

 

 


 

 

 第二种压缩方式是Nginx压缩

 

  记住执行刷新nginx配置

最后Nginx配置中http{ 下面开启gzip压缩:

   
复制代码
worker_processes  2;
error_log  /xxx/logs/nginx-logs/nginx.error.log;
events {
    use epoll;
    worker_connections  65535;
}

http {
     client_max_body_size  500m;
     include       mime.types;
     default_type  application/octet-stream;
     log_format  main  '{"remote_addr":"$remote_addr","upstream_addr":"$upstream_addr","remote_user":"$remote_user","time_local":"$time_local","request":"$request","status":"$status","body_bytes_sent":"$body_bytes_sent","http_referer":"$http_referer","http_user_agent":"$http_user_agent" ,"http_x_forwarded_for":"$http_x_forwarded_for","request_time":"$request_time","upstream_response_time":"$upstream_response_time","http_mes_env":"$http_mes_env"}'; 
     sendfile   on;
     keepalive_timeout 360;
     gzip  on;  #开启gzip 
     gzip_static on; #这个必须设置,否则访问加载的还是未压缩的文件 这个需要nginx源码打包的时候增加–with-http_gzip_static_module 再编译
     gzip_min_length 1k;#低于1kb的资源不压缩
     gzip_comp_level 5;#压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。
     gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; #需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片.
     gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
     gzip_vary on;#是否添加“Vary: Accept-Encoding”响应头
     server_tokens off;
     include /etc/nginx/conf.d/*.conf;
}

stream {
     proxy_timeout 30s;
    log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time';
    access_log /xxx/logs/nginx-logs/tcp-access.log tcp_format;
    error_log /xxx/logs/nginx-logs/tcp-error.log;
     server {
         listen  12500;
         proxy_pass corba-server;
     }
     upstream corba-server{
       server 127.0.0.1:2501;
       server 127.0.0.1:2501;
     }
 }
复制代码

 

优缺点:
1、webpack打包,然后直接使用静态的gz,缺点就是打包后文件体积太大,但是不耗服务器性能;
2、使用nginx在线gzip,缺点就是耗性能,需要实时压缩,但是vue打包后的文件体积小。
nginx配置里的gzip属性和gzip_static 属性可以同时设置为on,gzip_static的优先级高,如果存在.gz静态资源会优先时候静态资源返回,若不存在,会实时生成压缩文件。

怎么区分使用了静态加载还是在线压缩呢?

响应头的Content-Edcoding:gzip表示gzip压缩已经生效,而Etag中只有简单字符表示静态资源加载,而前面带 W/ 表示启动了在线压缩。

 
posted @   彪悍的代码不需要注释  阅读(1351)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
39
0
点击右上角即可分享
微信分享提示