众所周知,有了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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述