Dirain的开源地带

思想在进步
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

被Ext整了一次,用的朋友请注意。

Posted on 2009-02-12 13:25  Dirain  阅读(6728)  评论(37编辑  收藏  举报

   众所周知,有了Ext,让我们省去了美工。可今天上午有客户突然反应说我们产品占用浏览器资源相当高,一个页面甚至达到了300MB-1000MB,直到内存满。开始我以为是浏览器之前访问过别的页面,资源没及时释放,可后来自己进去测试后,发现每点击一个使用Ext实现的窗口时,内存占用量都会增加50M,当时就惊叹的对自己说到:“不至于吧“。

   发现问题后开始分析,第一步开始从页面上找原因,因为首页是属于文章展示页面,所以内容比较多,开始怀疑是这个地方导致ext出现问题。于事我找了一个页面信息非常少的页面开始测试,发现点击跟Ext相关窗口内存占用量很小了。后面的具体分析与考察很复杂并猜测了很久,我就不啰嗦了,说一下最终找到的原因。

   如果用过ext的朋友应该都清楚,ext的Ext.Window有一个属性modal,可以设定窗体为模式窗口。其效果是除窗口外背景全部变为暗色,然后其他区域不能操作,只能操作显示出的window。正因为这个属性,导致每出一个窗口内存都暴增50M,甚至更高。于事自己做了个试验,找了一个页面什么内容都都没,只有一个按钮,点击就显示Ext.Window对象,然后页面上写了无数的换行标签”<br>“,目的是让页面比较长。结果惊人的结果出现了,每次show出一个window,都会占用100多M内存,换行标签越多,也就是页面越长,占用内存量就越大,而且还连续积累,不会释放,直到内存太多的时候那个特效也就会出错。

   总结出来就一句话:”页面区域越大,使用模式窗口占用的内存就越多。“,如果没发现的朋友,请谨慎使用,现在我把项目所有ext特效的modal属性都设为false后全好了。这应该也是ext的一个bug吧,我测试用的是ext2.2,希望下一版本能够解决。

   下面我贴出我试验时的demo,大家自己跑起来看看。

     https://files.cnblogs.com/dirain/extjs-bug.rar