java web应用性能调优

1 移除html的空行

1) jsp中会经常使用到使用jsp标签和jstl的标签,比如<%@ page ..%>, <%@ taglib ...%>, <c:forEach....%>, 尤其是循环标签,在jsp最终输出的html中会产生大量的空行,使得性能降低。最方便的解决方法是在web.xml 中添加以下设置。

<jsp-property-group>
       <url-pattern>*.jsp</url-pattern>
       <trim-directive-whitespaces>true </trim-directive-whitespaces>
</jsp-property-group>

这个是针对所有jsp页面,还有一种就是在单个的jsp中添加<%@ page trimDirectiveWhitespaces="true"%>.

2) 在html中,有时为了让代码可读性提高,回认为插入一些空行,这个问题用方法1)不能解决,如果是用weblogic服务器的话可以添加如下配置在weblogic.xml。

 <jsp-descriptor>
    <compress-html-template>true</compress-html-template>
 </jsp-descriptor>

相应的空行会被移除。

通过以上两种方法,我在实际项目中测试,一般可以让页面html大小缩小30%.

 

2. javascript 性能提升

1) 缓存变量减少DOM操作,尤其是在循环当中缓存变量

DOM操作在某些浏览器是很耗时的,比如IE7, 在DOM树很大的情况下,查找也是要花更多的时间。尤其是在循环中要访问或更新同一个DOM元素,不能重复的调用document.getElementById 或document.forms["..."], 而是用一个变量来缓存这个DOM元素.

2) 利用javascript字符串或排序功能优化来对循环进行优化。

比如一个用javascript检测200个用户输入的日期中有没有重复,有重复就找出来并告诉用户,通常是一个嵌套的for循环. 算法复杂度是O(n的平方)

for (i=0;i<dates.length;i++) {

    var dateA = dates[i];

    for (j=i + 1; j<dates.length;j++) {

        var dateB = dates[j];

         if (dateA == dateB) {

            document.getElementById(idA).style.backgroundColor = "red";

        }

    }

}

上面的代码是双重循环要执行n的阶乘次循环,如果内层循环包含有耗时的操作的话,在n变得很大的时候,比如超过200, 性能将会大幅下降。一个解决办法是利用字符串匹配使双重循环变成单层循环,经过实验,性能有很大提升。

var dateStr = "";

for (i = 0; i < dates.length; i++) {

    dateStr += dates[i];

}

for (i=0; i < dates.length;i++) {

    var dateA = dates[i];

    if (dateA.indexOf(dateStr) != dateA.lastIndexOf(dateStr)) {

        document.getElementById(idA).style.backgroundColor = "red";

    }

}

这样就从n! 次操作变成2n次操作了。还有一个方法是使用javascript的Array的sort功能也可以达到效果。

3) 缓存函数的返回结果,避免重复调用函数。

如果要多次用到某一函数,并且参数相同,其他条件相同,尽可能缓存函数结果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值