最近一直有听到反馈,一打开新的系统cpu使用率就会飙升到100%,可是在我的机器上一直都没有发生过类似的状况,所以一直也没有很在意,直到昨天老大过来问这个事儿,我在我机器上演示了一下确实不会出现cpu占用过高的情况,可是一到其他机器上就出现问题,结果发现是由于硬件上的差异引起的,我机器是双核的在多线程的计算性能上要好很多。没办法只得另找一台机器去找性能瓶颈在哪里,找一下到底是哪里出现了问题。按照常理页面加载完了cpu使用率应当是要降下来的,可是在所有内容都加载完毕后,cpu使用率却还是降不下来,而且是tab页开的越多,cpu使用率越高,页面反应越迟钝。找了一下午,到最后快要下班的时候终于找到了问题所在,问题就出在加载页面的生命周期的最后一步。因为系统里面有大量的使用grid控件,需要将table转换为grid,为了避免在每个页面的加载中执行转换,我做了一个类似java中的拦截器,所有请求的页面都会经过这个拦截器,这个拦截器会检查页面中是否有需要被转换的table。这其中就会有一个需要解决的问题,页面的加载对于不同的机器需要的时间也不一样,所以这个自动转换的功能必须有一个机制,待到新请求的内容完全加载到主框架的dom中后才进行转换。我使用了一个计数器跟一个定时器,每隔10毫秒检查一次页面中是否有需要转换的table,检查次数小于等于30次,如果在这三十次中的任意一次发现需要转换的table则转换之然后返回。问题就出在了这个计数器上,这个计数器本应当是一个全局变量,而且必须在每次进入时清零的,我却把它弄成了一个局部变量。导致的问题就是,若有table可以转换则执行正常,在没有可以转换的table时,就会陷入一个dead loop。想一想,都已经差不多做了两年了,还在犯这种低等的错误,都开始对自己产生了怀疑,到底是不是适合做这一行。
Leave a Reply