对TinyTemplate进行性能优化过程简介

简介:

在做TinyTemplate的过程中,避免不了要进行性能优化,在群里与同学们讲,结果许多同学都没有接触过这项业务,因此就开一贴子简单介绍一下,希望对感兴趣的同学们有帮助。

用于进行性能分析的工具有JProfiler,JProbe,JProfile等等许多工具,都是大同小异的了。

今天用来示例的同学是JProfiler,由于现在的结果是已经优化的的结果,因此,看到的可优化之处就非常少了。但是可以说明的是,借助工具的帮助,很快的定位到了性能瓶颈的点,只花了少许时间就性能提升了一倍,基本上达到了最大处理能力,再做深度优化,可能还能提高几个百分点的性能,这个时候投入产出比比较不高,因此就没有再继续进行了。

首先看一下测试代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public final class TinyTemplate {
     public static void main(String[] args) throws TemplateException {
         TemplateEngine engine = new TemplateEngineDefault();
         engine.setCacheEnabled( true );
         TemplateContext context = new TemplateContextDefault();
         context.put( "outputEncoding" , "GBK" );
         context.put( "items" , StockModel.dummyItems());
         FileObjectResourceLoader html = new FileObjectResourceLoader( "html" , null , null , "D:\\gitpart3\\ebm\\src\\main\\resources\\templates" );
         html.setCheckModified( false );
         engine.addTemplateLoader( html);
         long start = System.currentTimeMillis();
         Writer writer = new StringWriter();
         for ( int i = 0 ; i < 200000 ; i++) {
             engine.renderTemplate( "/tiny.html" , context, writer);
         }
         long end = System.currentTimeMillis();
         System.out.println(end - start);
     }
 
}



可以看到,这里一共执行了20万次

把程序跑起来,然后点击attach,选择正在运行的进程,然后就开始抓取数据了,选择Record Memory,Record CPU就开始抓取运行数据了。

由于抓取数据,会导致程序运行速度显著下降,但是不会改变程序运行时消耗CPU的比率。

通过上面的图,可以看到,内存消耗情况可以不断的进行正常的回收,说明没有内存泄露情况。

通过上面的图可以看到,程序采用是单线程的方式运行,因此,CPU主要都消耗到main线程上,这个也与程序结构匹配。

通过上图可以看出CPU的消耗情况。

AbstractTemplate类的render中调用的tiny_html类的renderContent方法消耗的最多,达97.1。

其中42.6消耗在U类的p方法上,21.5%消耗在U类的v方法上,12.8消耗在write方法上,11.4%消耗在O.e方法上。

当然可以逐层查看,消耗在哪个方法上。

像图上的情况,经过对内部实现进行深入分析,已经达到接近最优。

因此优化结束。

最终测得20万次的时候在12.x秒到13.x秒之间。

当然,如果有内存泄露,也可以通过这个工具查看内存占用情况:

从上图可以看到,主要是HashMap中缓冲的数据,占用比较大,具体来说,是org.tinygroup.template.runtime.U中的MethodKey占用内容比较大。

当然,工具只能帮你快速定位,但不能帮你解决问题,怎么优化还是要看你自己的。

期望对您有所帮助。

相关文章
|
6月前
|
消息中间件 缓存 NoSQL
如何做性能优化?
如何做性能优化?
|
12天前
|
缓存 监控 前端开发
性能优化方案详解,史上最全,必知必备!
本文详细解析了 9 大必备大厂优化方案,性能优化是一线互联网公司程序员的必备技能,非常重要。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
性能优化方案详解,史上最全,必知必备!
|
4月前
|
缓存 前端开发 JavaScript
前端常见的性能优化方案?
【7月更文挑战第14天】前端性能优化包括代码压缩、资源合并、图片优化、缓存策略和DOM操作改进。例如,压缩CSS、JS,懒加载图片,使用CDN,事件委托,启用HTTP/2,及利用性能工具进行评估和优化。目标是加快加载速度,提升用户体验和服务器效率。
76 2
|
6月前
|
弹性计算 关系型数据库 数据库
利用阿里云进行性能优化:实践案例分享
在开发在线教育平台过程中,我们遇到了由于用户访问量增加而导致的性能瓶颈问题。通过使用阿里云的多种服务,包括RDS数据库、ECS弹性扩展、SLB负载均衡、OSS存储和CDN加速,我们对数据库、应用服务器和静态资源加载进行了全面优化。优化后的系统性能显著提升,数据库查询速度提高了60%,服务器负载下降了40%,静态资源加载时间减少了70%,从而极大改善了用户体验。本文详细介绍了问题分析、具体解决方案及其实施效果,旨在为其他开发者提供有价值的参考。
231 3
|
6月前
|
缓存 监控 NoSQL
一次性能优化实践
【5月更文挑战第21天】为解决在线教育平台在高并发下数据库查询响应时间增加的问题,开发者采用Redis缓存策略。通过数据分层、LRU淘汰策略、异步更新及监控调优,成功提升性能,缓存命中率超90%,页面加载时间从3秒降至1秒,改善了用户体验。此实践强调了合理缓存策略、监控调优以及考虑数据访问模式在系统设计中的重要性。
74 2
|
6月前
|
缓存 监控 前端开发
前端如何做性能优化?
【4月更文挑战第21天】前端性能优化涉及代码、图片、资源加载、渲染、网络等多个层面,包括压缩合并代码、利用缓存、压缩图片、使用CDN、减少DOM操作、启用HTTP/2等策略。其他方法还包括代码拆分、使用Web Workers和性能监控。优化过程应根据项目实际需求灵活调整,并注意平衡性能与代码可读性。
61 2
|
6月前
|
消息中间件 缓存 监控
项目接口性能优化方案
项目接口性能优化方案
83 1
|
6月前
|
缓存 小程序 前端开发
小程序 如何做性能优化?
小程序 如何做性能优化?
|
缓存 前端开发 JavaScript
前端如何进行性能优化的方法(详细版本)
每当有人访问您网站上的页面时,浏览器都必须请求大量文件。这些HTTP请求直接影响网页的加载速度。通常,更少的HTTP请求意味着网站加载速度更快。 现在,网站的加载速度是搜索引擎排名的重要因素。平均而言,媒体页面加载速度为谷歌的10个结果只是1.65秒。
164 0
|
缓存 前端开发 JavaScript
前端项目性能优化方案有哪些
前端项目性能优化方案有哪些
185 0
下一篇
无影云桌面