如果你是Java开发人员,则可能需要听一些提示以保持应用程序的性能。
在解决与NFR相关的问题(尤其是应用程序性能)时,我总是在思考为什么我们作为开发人员对性能的重视程度较低(总是存在荣誉例外)。这是由于缺乏认识吗?
很多时候,我们仅在性能测试时或部署后才开始考虑性能。
速度(速度)和体积(大小)的增加已影响到我们的日常生活:我们的手机已从2G变为4G,而40-80 GB的硬盘曾经是一种奢侈,而USB硬盘现在已达到TB。
应用程序性能的重要性
对于我们交付的任何应用程序,必须具有这些特征。
1.功能正确;
2.表演者
3.外观:应该具有结构合理,可读性强,可重用的代码,并使用最新的框架,库和工具;
4.测试范围:功能应通过测试工具验证,该应用程序涵盖所有预期的功能。
我已经看到,我们许多人都在交付符合性能的应用程序。那么,为什么我要把性能放在第二位呢?
让我们举个例子:作为一名员工,
- 我每天早上8点到办公室,在30分钟的午餐时间和15分钟的茶歇时间里工作9个小时,然后在下午5点左右离开办公室(功能上正确);
- ·我严格遵守所有办公室举止,始终保持剃光,穿着适合工作的服装,我的办公桌始终整洁(外观)
- ·我的日常出入刷卡,系统登录和注销以及经理的监督(测试覆盖率)可以验证我的办公室出勤情况。
现在,如果我要花十天才能完成两天的工作,该怎么办?那意味着我一点也不好。 如果我表现不佳,我的组织会允许我为他们工作吗?
观察结果
出于对所有努力交付功能正确代码的开发人员的充分尊重,我分享了一些看法。
线程使用不当
对于每个迭代值,都会生成一个线程,程序将等待直到该线程结束为止,从而使整个行为顺序化。
相反,应该在循环内填充Runnable / Callable列表,然后使用并行处理立即调用所有线程。
数据库调用一个循环以获取主数据,该循环收集静态创建的静态值
这就像每次国际旅行都申请新护照一样。在应用程序启动时,请仅加载和缓存所有主数据,常量和配置字段一次,并在整个应用程序中使用它们。
像日期格式这样的对象在循环中创建
每次以“ ddMMyyyy”之类的格式循环创建一个新对象有什么好处? 请定义为常数,并在任何地方使用。Java 8具有一个DateTimeFormatter类,该类具有一些预定义的常量。
仅出于循环目的记录目的而创建时间戳对象
在循环中创建一个新的TimeStamp对象,仅用于记录当前日期时间。 不是所有当前的日志框架都支持模式来记录类,方法,日期时间等吗? 请使用日志框架的那些功能。
诸如响应之类的网络连接对象未关闭
随着网络请求数量的增加,网络将成为瓶颈,并且由于打开的网络连接数量而导致网络性能下降。每当网络任务完成时,请关闭连接。
正如我们在现实生活中所说的,每一分钱都很重要。不要使用诸如String.valueof(int)之类的方法,该方法反过来调用Integer.toString(int),您将通过使用Integer.toString(int)保存一个方法调用。
结论
的确,要使应用程序正常运行,必须考虑当前和将来的NFR,仔细设计其架构(高低)。
但是,作为开发人员,我们在某些领域可以肯定地应用优化,这将有益于整体应用程序性能。我们正在朝着基于云的体系结构迈进,在这种体系结构中,每次使用资源都会产生成本,因此请记住,没有什么是免费的。
提供功能时,请问自己,我可以进一步优化此代码吗?