首页 > 其他分享 >js文件过大如何提速

js文件过大如何提速

时间:2024-01-15 18:55:08浏览次数:31  
标签:plugin app 提速 js 过大 nginx webpack 版本

直接上干货,太大就让他变小,据不可靠统计gzip压缩可以让js体积减少5倍+,na那么理论优化速度为5倍+,前端压缩完js为gzip格式配合nginx设置解析gzip让浏览器解析gzip就大功告成了。

上两篇干活内容,具体操作请看以下链接:

https://zhuanlan.zhihu.com/p/530959154

https://blog.csdn.net/yorcentroll/article/details/102686680

总结一下:1、前端webpack配置插件compression-webpack-plugin 2、nginx增加gzip_static模块配置

以下为链接内copy内容,防止原链接丢失~

很多时候,一个vue项目打包下来,app.js 主文件都会有几兆,大点的项目都会有十几二十兆,还有app.css的打包文件可能也会很大。

对于一般的服务器来说,首次去打开部署好的平台页面,加载起来会很慢。

这样的速度肯定是不能容忍的。

当然,首要的途径是先尽量给打包文件app.js和app.css减重,让它更轻。不过,大部分时候,这个文件再怎么建你也不能从20M减到10M,5M,甚至更小。

所以,有个非常有效,直接的方法就是,给app.js和app.css压缩,build的时候,直接将app.js和app.css同步压缩,生成app.js.gz和app.css.gz文件。

效果显而易见:

 

直接减轻了5倍以上的容量大小。

具体怎么做:

考虑到不同版本的vue-cli和compression-webpack-plugin的不同版本,这里将三种不同的配置都列出来

一: vue-cli2.x 版本 + compression-webpack-plugin 版本 1.1.12
config目录下index.js 文件,找到“productionGzip” 将它的值由false 改成 true,productionGzipExtensions这个 的值一般默认就是js 和 css,意思就是说可以将js和css格式的文件压缩。

 

这里修改之后,需要在build目录下的webpack.prod.conf这个文件里,加上CompressionWebpackPlugin相关配置:

 

需要注意的是:

filename: '[path].gz[query]' 这个配置使用于compression-webpack-plugin版本低于6.0,高于6.0的版本就不是这个配置了。

而且,vue-cli2.x的版本,如果子版本过,它支持的compression-webpack-plugin的版本也很低,一般使用 ^1.1.12这个版本,所以依赖安装的时候需要指定对应的版本,否则安装新的版本,打包会失败。

一: vue-cli3 + 版本 + compression-webpack-plugin 版本4.0.0以下 版本
这里的配置就比较直接,在vue.config.js文件中直接加入compression-webpack-plugin的相关配置就可以了,

引入插件,定义需要压缩的文件类型

const CompressionWebpackPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['js', 'css']
在configureWebpackp的插件plugins对象里,new出插件实例,并且加上正确的配置。

三: vue-cli3 + 版本 + compression-webpack-plugin 版本6.1.1 版本
其他和上面第二种方式一样,不一样的地方是,filename对应文件名格式配置不一样, 如果采用之前的格式,压缩出来的gz文件会有问题。

 

ps:为了省时间,没有验证compression-webpack-plugin更细的版本,比如5.x的版对应的配置,需要使用的时候测试一下。

当然,在build之前,你需要保证你安装了compression-webpack-plugin 这个插件的依赖,npm install --save-dev compression-webpack-plugin。 (记得指定对应的版本)

npm run build 之后,你会发现,dist>static 路径下js和css文件夹里都多了一个对应的app.js.gz和app.css.gz 文件,大小要比主文件小很多。

前端打包压缩文件准备好之后,把dist文件夹丢到nginx服务器相应的目录中。

然后需要配置nginx的配置文件,也就是nginx.conf文件,

在http里面加上:

gzip_static on;
gzip_proxied expired no-cache no-store private auth;

代表你要开启nginx服务的 gzip_static 模块,这样在浏览器加载项目页面时,默认会加载压缩过的文件,然后浏览器自己会解压压缩文件并正确渲染。

当然,在修改过nginx.conf文件之后,你需要重新启动nginx服务。

这时,如果你碰到这个问题:

 

那么恭喜你,你 没有配置nginx的gzip_static 模块,所以它不认识。

怎么办呢?很简单。

进到nginx解压之后的安装包,你会看到一个configure文件,那么你可以用它来重新安装gzip_static 模块。

运行这个命令:

./configure --with-http_gzip_static_module

 

然后会开始安装,装完之后,继续执行:

make

make install

到此,nginx的gzip_static 模块就安装配置完成了。

然后再重新启动nginx服务,你再去打开你的网页,会发现他加载了压缩文件,这样速度就快了很多。

当然,nginx肯能还有一个坑,那就是

你可能连configure文件都没找到, 因为有的版本它确实没有这个configure,需要你手动安装,具体过程自行搜索。我的建议是重新找一个完整的nginx安装包,重新安装nginx。

最后,记住要备份nginx.conf这个配置文件。

补充一下: 关于webpack的sourceMap这个配置选项,正常我们打包部署到生产环境,需要将sourceMap设置为false。这个打包的时候就不会生成对应的map文件,减小打包后的体积。如果需要在生产测试环境调试代码,那可以临时将这个选项设置为true。
————————————————
版权声明:本文为CSDN博主「YorcentLuo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yorcentroll/article/details/102686680

 

标签:plugin,app,提速,js,过大,nginx,webpack,版本
From: https://www.cnblogs.com/iwen1992/p/17966050

相关文章

  • JS - 文件下载
    文件下载1functiondownloadFile(){constlink=document.createElement('a');link.style.display='none';link.setAttribute('href',file.sourceUrl);//设置下载地址link.setAttribute('download',file.fileNam......
  • 前端跨域三种解决方式(CORS、JSONP、代理跨域)
    什么是跨域?跨域是浏览器为了安全而作出的限制策略(所以服务端不涉及到跨域);浏览器请求必须遵循同源策略,即同域名、同端口、同协议;例如:http://www.abc.com到http://www.def.com的请求会出现跨域(域名不同)http://www.abc.com:3000到http://www.abc.com:3001的请求会出现跨域(端口不同......
  • 【nestjs】main.ts
    1.main.ts文件做了什么?核心文件,通过NestFactory.create创建应用程序实例,完成中间件、守卫、管道、异常过滤器、拦截器的注册。2.NestFactory.create(appModele,options?)做了什么?创建应用程序实例,该方法接受两个参数,第一个参数是一个根模块,第二个参数是一个可选的配置对象,......
  • 【前端面试】2024年前端面试题之JS篇
    请简述JavaScript中的thisJS中的this是一个相对复杂的概念,不是简单几句能解释清楚的。粗略地讲,函数的调用方式决定了this的值。我阅读了网上很多关于this的文章,ArnavAggrawal写的比较清楚。this取值符合以下规则:在调用函数时使用new关键字,函数内的this是一个全新的对......
  • Chrome 插件 V3 版本 Manifest.json 中的内容脚本(Content Scripts)解析
    内容脚本(ContentScripts)指定在用户打开某些网页时要使用的JavaScript或CSS文件。内容脚本是在网页环境中运行的文件。通过使用标准文档对象模型 (DOM),开发者能够读取浏览器所访问网页的详情、更改这些网页,并将信息传递给其父级扩展程序。一、内容脚本功能内容脚本在......
  • 页面无法右键及复制的两种方式(js 与 css)
    1、全局在body上设置属性:<bodyonselectstart="returnfalse"onpaste="returnfalse"oncopy="returnfalse"oncut="returnfalse">2、js控制页面无法复制:<scripttype="text/javascript">//Methodone//&l......
  • nvm管理nodejs
    gitub搜索nvm-windows,选择收藏最多的点击release,选择最新的版本下载,安装:修改nvm和npm的路径打开nvm文件夹,找到settings.txt文件,修改settings.txt的内容(主要为了解决nvm安装node时,使得node与npm对应的安装成功)root:C:\nvmpath:C:\ProgramFiles\nodejs//将npm镜像改为淘......
  • PDF.js实现按需分片加载pdf文件-包含前后端开发源码和详细开发教程
    PDF.js实现按需分片加载pdf文件-包含前后端开发源码和详细开发教程:https://blog.csdn.net/qq_29864051/article/details/130742657?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170529842016800186594900%2522%252C%2522scm%2522%253A%252220140713.130102334..%252......
  • 在Linux中安装和配置Node.js与Express.js创建HTTP服务器
    在Linux环境中,安装和配置Node.js与Express.js来创建一个HTTP服务器需要一系列的步骤。下面是一个详细的指南,帮助你在Linux上设置这个环境。步骤1:安装Node.js首先,你需要确保你的Linux系统已经安装了Node.js。你可以通过以下命令来检查是否已经安装:bash复制代码node-v如果已经安装,它......
  • mvc5接口报错:The JSON request was too large to be deserialized的一种原因
    是mvc5版本的接口,接口使用了dynamic接收数组,json对象数组只有56个,length长度不到10万,但是提交就报TheJSONrequestwastoolargetobedeserialized这个错。在.netcore中,dynamic是不需要前端把字段用stringfy序列化为字符串的就能处理的。但是mvc5如果不在前端把dynamic接收......