论坛首页 Web前端技术论坛

jquery.load 是无法替代 iframe的

浏览 13711 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-17  

 

   最近做一个jsonRpc的项目,敲定使用jquery(UI)+dwr+spring完成, 整个页面布局采用静态模板+ jquery.load(url) 来实现。

 

也就是点击菜单后,页面切换完全是用 jquery.load 动态得到内容并插入到 主体div布局中。

 

  但目前发现了一个问题。 由于是通过jquery.load 载入的页面,页面的整体是没有刷新的,无论切换菜单到其他页面,其中所使用的scope永远是同一个。

 

  也就是会出现上一个页面的js变量与引入的js文件,再当前页面还可以使用,并导致浏览器的内存越来越大。如果项目js繁多的话,浏览器使用久了,会非常的满。

 

 

  目前正在寻找方案,能够清除上个页面的定义的变量与引入的js文件。

 

 不知各位兄弟有什么号的办法没有?

  • czw.rar (499.7 KB)
  • 下载次数: 158
   发表时间:2011-11-17  
你是在以iframe的模式去开发OPOA页面,不要想着清除动态加载的JS的改动,这难度比重新开发还要大。

OPOA开发最好用oo思想,将页面封装为类,只用加载一次,然后再怎么打开都只是创建一个对象罢了。页面应该有对应的销毁接口,以便自己擦干净屁股。
0 请登录后投票
   发表时间:2011-11-22  
楼上正解...
0 请登录后投票
   发表时间:2011-11-22  
clue 写道
你是在以iframe的模式去开发OPOA页面,不要想着清除动态加载的JS的改动,这难度比重新开发还要大。

OPOA开发最好用oo思想,将页面封装为类,只用加载一次,然后再怎么打开都只是创建一个对象罢了。页面应该有对应的销毁接口,以便自己擦干净屁股。

我感觉自己写对于的销毁接口不太现实吧,js的GC好像不太容易控制,特别是IE下面

 

0 请登录后投票
   发表时间:2011-11-23  
还是没明白你的需求,其实js很多地方和java很类似 就比如单例模式
js 把你的方法放入window的命名空间中 window.A
页面加载的时候判断 if(!A) 如果A没有没定义执行后面的东西加载A的对象(参考jquery)
觉得固定一个页面多次调用的也就是ext的desktop会这么做
quickoffice 里面就使用了方法判断,如果已经加载就不再次执行
另外对于js的内存增加和溢出,有效的解决方法是在你使用变量后将变量置为null手动清除内存空间占用
我做过一个类似日历排期的东西,就是每次改变月份就重新通过js生成代码写入页面中
相应的结果就是每次刷新页面就会使内存增加2m左右,长时间都不会释放,将使用完的变量置为null,刷新页面内存的增量就变成了几k或者几十k了
对于js现阶段减少内存占用 null 是唯一有效的办法
尽量减少新变量的产生也是必要的 页面中尽量能重复利用一个变量,不要过多生成多个var 变量

重复的东西说了很多,自己提取有用的看吧~~ 困了 脑子一片混乱 @#¥%
0 请登录后投票
   发表时间:2011-11-23   最后修改:2011-11-23
LZ这种界面加载方式一直都在用,不过jquery做这个太累了吧。
Ext没有任何压力,Ext的在组件生命周期方面是优化过的,没有太严重的内存膨胀问题。
Ext的Container模型也很成熟,布局方面很顺手。


另外,提醒不要产生太多全局变量。因为页面没刷新,全局变量创建了就销毁不了了。对象命名冲突也是很大问题。
可以考虑用一些js组件加载器,如require.js,这种加载器的好处是可以引入命名空间的设计,避免对象冲突。



现在感到麻烦的问题是,开发期修改过js文件,刷新浏览器是不会生效的,Ctrl+F5也不行,必须关了浏览器再开。
0 请登录后投票
   发表时间:2012-10-16  
等高手解决。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics