java项目图像瘦身

  经营许可证     |      2023-08-27
java项目图像瘦身

前言

从研发到发布,我尝试探索产品瘦身的可能性,提出了“java企业代码”的想法来改造我们的代码。

现状

咨询了负责打包发布的同事,图片下载的优化遇到了瓶颈。

慢:上午10:00高峰时段,速度极慢停机:偶尔停机1~2小时优化到底:申请更大带宽,优化镜像仓库物理配置,杯水车薪,无法保留项目多了,规模大了套餐,钱花得不见声息:

镜像一般大小情况

前端工程:10~20M 后端工程:600~800M 大数据工程:1~2G :

解决方案

从项目代码工程,瘦身自己。将矛头指向自己,指向工程依赖项引入的代码。

三种依赖操作

首先说一下发展中的三种形式。在这三种理念的影响下,最终会导致项目形象的扩大。

搬运

这种口号就是“不要重新发明轮子”、“节省开发时间、提高开发效率”,靠它、用它、用它。

工具类:字符串、日期、数组、类转换、类复制首先是Apache下的Commons库。第二个是Google的开源Guava库。靠、靠、靠、介绍、介绍、介绍,大而全,应有尽有。甚至,给开发和选择带来了困难。这个字符串为空哪个更好?引入了很多不必要的浪费的——类,并且引入了——类奢华的重复功能。版本兼容:并行冲突与兼容、纵向版本冲突与兼容Log4j VS Logback VS Log4j2 有什么区别,查了一下大工程项目,怎么三个都有,而且还得用其中一个?搜索中是否有某种httpclient?为什么fastjson还有2个版本,1.2.54,1.2.83? Jackson也有多个版本,上面也有很多例子。以上是并行导入,同一功能的多个版本的引入就是一个例子。产生了一些额外的工作,冲突问题和设置问题。任务会产生大量工作。同时,构建时,对父模块的管理并不严格。预制件:springboot协议大于“最低必要”配置。完整的预制件已经过打磨并验证可大规模使用。经过简单的初始化后,就可以进行生产编程了。这是一个小可爱,以后的蓬勃生长是他无法控制的。

裁缝/雕刻

有一定的学习和积累,理解和分析依赖关系,做一些设置和排除。

拼图/积木/泥塑

手动输入代码,注册和比较依赖关系,管理和控制依赖关系。下面举3个例子来说明:

es的juice

ES使用Guice框架进行模块化管理。 Guice 是Google 开发的一个轻量级依赖注入框架(IoC)。在软件设计中,人们常说依赖抽象而不是具体。 IOC就是实现这个概念的方式,它内部实现了对象的创建和管理。摘自:《Elasticsearch源码分析与优化实践》_张超。

但是你有没有注意到es和Guice中的AbstractModule代码是一样的?自2016年以来,官方讨论也可以支持这一策略。 [1]

黑鸭子

Intel使用Black Duck提供的Protex解决方案来验证软件开发者在使用开源代码/第三方代码时是否严格遵守公司的软件许可政策。该解决方案帮助英特尔大大减少了软件重写的工作,并将可能存在的商业法律风险控制在最低限度。

英特尔公司组建了专门的Protex项目团队,代表来自不同业务部门、不同职能领域的成员。项目团队的部分工作是加强对软件许可问题的开发人员培训。项目团队不断寻找改进的验证方案。它要求每个产品使用经批准的合规软件代码。在寻找解决方案的过程中,项目组安排了一些业务部门试用Black Duck的Protex平台,评估其是否满足Intel的要求。经过评估,英特尔认为Black Duck的解决方案可以有效帮助他们进行开源软件和第三方软件的合规性检查,帮助他们在开发过程中有效管理开源软件和第三方软件的使用。选择Black Duck后,英特尔已在全球部署了多台Protex服务器。他们经常使用Protex 来分析将在公司外部发布的软件。 Protex 已与英特尔的其他合规实践集成,成为英特尔软件开发管理流程不可或缺的一部分。 [2]

阿里Pandora

父模块不在乎,它在乎!

基于Pandora和Fat Jar技术,Pandora Boot可以直接在IDE中启动Pandora环境,大大提高您的开发和调试效率。 Pandora Boot 与Spring Boot AutoConfigure 深度集成,让您同时享受Spring Boot 框架带来的便利。 [3]

工具分析

有没有什么工具可以负责我们对打包的分析、排除、优化?

前端:grunt、gulp、webpack、rollup生成简洁代码托管代码剥离:Unity托管代码剥离不仅可以减小生成的dll的大小,还可以减小安装包的大小;托管代码剥离过程将分析项目中的程序集,以查找并删除实际未使用的代码。 maven-jar-plugin, maven-dependency-plugin

结语

理想情况下,公司应该控制所有代码,并彻底分析依赖代码,逐步将所有优秀的架构、工具等吸收到公司代码中。一个成熟的java代码公司需要有自己的代码积木来构建,准备好各个部分,并注册备案。 1、可以避免知识产权纠纷; 2、所有项目按需搭建,最少可用,为项目形象瘦身提供了终极可能。