Tomcat启动gzip压缩来解决vendor.js过大页面加载慢的问题

本文介绍了在部署 Ionic 项目时遇到 vendor.js 文件过大导致页面加载慢的问题,尝试通过修改 build 命令未见效。然后转向在 Tomcat 层面启用 gzip 压缩来优化,详细解析了 Tomcat 的配置参数,包括 compression、compressionMinSize 等,并提醒注意不同 Tomcat 版本中对 js 类型的支持差异。同时指出,若 Tomcat 被其他代理软件如 Nginx 所代理,还需要在相应代理服务器上开启 gzip 压缩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在部署ionic项目的时候,发现vendor.js文件过大,达到了1.6M,h5页面需要加载十五秒才能显示出来。这显然是不能接受的。

按照网上的指导,更换了ionic的大包方式,由

ionic build --prod

改为了

ionic cordova build browser --prod

按理说忽略了没用的js文件,vendor.js应该变小的,可是并没有生效。仍然是1.6M。所以,只能从容器层面下手了。在网上看了多篇博客,七零八碎,所以我自己总结记录。

tomcat 启动gzip压缩

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" 
	useSendfile="false"
	compression="on"   
	compressionMinSize="1024" 
	noCompressionUserAgents="gozilla, traviata" 
compressableMimeType="application/json,application/xml,text/html,text/xml,text/plain,application/javascript,font/ttf,image/jpg,image/png,image/gif"
	/>

各种属性介绍:

  • compression="on"  打开压缩功能
  • compressionMinSize="1024" 启用压缩的输出内容大小,大于1024K才启动压缩,默认为2KB
  • noCompressionUserAgents="gozilla, traviata"  对于以下的浏览器,不启用压缩
  • compressableMimeType="application/json,application/xml,text/html,text/xml,text/plain,application/javascript,font/ttf,image/jpg,image/png,image/gif" 哪些资源类型需要压缩
  • useSendfile="false"  这个属性至关重要,tomcat默认设置是当数据大小达到48kb时,将启用文件传输(sendfile),所以我们想要压缩超过48kb的数据时必须将useSendfile设置为false。如果这个属性没设置,那么上边4个属性的设置就全都会失效。

注意,以上开启gzip压缩的配置在tomcat8以前不生效。
原因:tomcat7以后,js文件的mimetype类型变为了application/javascript

所以Tomcat8以前,需要将compressableMimeType中的“application/javascript”写为“text/javascript”

同时注意,如果Tomcat被nginx或其他代理软件所代理。项目访问路径直接访问的nginx,那你仍需要将nginx的gzip启动。只有直接访问Tomcat,以上的配置才生效。

文章中有部分内容摘自其他博客,如有侵权请告知。定会删除。

### 减小 Vendor.js 文件体积的 Webpack 优化配置 为了有效减小 `vendor.js` 的文件体积,可以通过多种方式实现这一目标。以下是几种常见的方法及其详细说明: #### 方法一:分离第三方库到独立的 Chunk 中 通过合理配置 Webpack 的 `splitChunks` 插件,可以将项目中的第三方依赖(如 Vue、Vuex 等)提取到单独的文件中,从而利用浏览器缓存机制减少重复加载。 ```javascript optimization: { splitChunks: { cacheGroups: { vendors: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all' } } } } ``` 这种方法能够显著降低每次更新时用户的下载量[^1]。 #### 方法二:使用 Externals 配置排除特定依赖项 Webpack 提供了一个名为 `externals` 的选项,允许开发者指定哪些模块不应被打包进入最终的 JavaScript 文件,而是作为外部依赖处理。例如,在生产环境中可通过 CDN 加载这些库,进一步减轻本地打包的压力。 ```javascript module.exports = { configureWebpack: { externals: { vue: 'Vue', vuex: 'Vuex', axios: 'axios', lodash: '_' } } }; ``` 上述代码片段展示了如何设置一些常用库为外部资源[^2]。 #### 方法三:启用 Tree Shaking 和 Scope Hoisting 技术 Tree shaking 是一种移除未使用的代码的技术;而 scope hoisting 则尝试重组和简化模块结构以提升执行效率并缩小输出尺寸。两者结合能更高效地管理应用内的死码与冗余逻辑。 确保 Babel 或 TypeScript 不会对 ESM 导入/导出语法进行转换是非常重要的前提条件之一[^3]。 #### 方法四:采用 Code Splitting 动态导入功能 动态 import() 可让应用程序按需加载脚本而非一次性获取整个程序所需的全部资产。这不仅有助于改善初始页面渲染时间也间接降低了单个 bundle 的规模。 ```javascript const SomeComponent = () => import('./components/SomeComponent.vue'); ``` 此策略尤其适合型 SPA (Single Page Application),因为它可以让用户仅下载当前所需的部分数据而不是完整的网站内容[^4]。 --- ### 总结 综上所述,针对 vendor.js 文件过的情况可以从多个角度出发解决问题——既可调整内部构建流程又或者借助外部服务分担压力。实际操作过程中可能还需要依据具体情况灵活运用各种手段达到最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值