Javascript引用方法
在我过去的项目中,我曾创建一个javascript应用程序对象,并创建对dom和dijit节点的引用。不久前,我读到这会导致垃圾收集问题,因为js保留对dom的引用(或这些行中的某些内容) 我喜欢我过去做事的方式,就是节点“id”在代码中只被引用一次Javascript引用方法,javascript,dojo,Javascript,Dojo,在我过去的项目中,我曾创建一个javascript应用程序对象,并创建对dom和dijit节点的引用。不久前,我读到这会导致垃圾收集问题,因为js保留对dom的引用(或这些行中的某些内容) 我喜欢我过去做事的方式,就是节点“id”在代码中只被引用一次 那么,还有什么选择呢?每次需要domNode/dijit小部件时都使用dojo.ById()和dijit.ById()?我能想到的唯一可维护的选项是使用小部件/节点ID创建“常量”。您之前所做的工作不会立即出现问题。你确定你了解问题的来源吗?找不到
那么,还有什么选择呢?每次需要domNode/dijit小部件时都使用dojo.ById()和dijit.ById()?我能想到的唯一可维护的选项是使用小部件/节点ID创建“常量”。您之前所做的工作不会立即出现问题。你确定你了解问题的来源吗?找不到我读过的原始文章,但这些似乎是指同一个问题。dom循环引用。如果我没记错的话,这主要是ie8或更早版本的问题。触发我查找内存泄漏的是,在开发无限滚动数据网格时,浏览器速度减慢。网格被销毁后内存没有被释放。这对我来说没有任何意义,只是销毁网格时没有正确清除引用。我将网格内的所有引用以及网格本身的所有引用设置为null。那么,您是在使用闭包还是在dom元素上添加expando属性?既然您使用的是dojo,那么它对内部事件侦听器数据等的清理工作是否与jQuery一样好?
app = {
// UI - divs
_divMainView : null,
_divCurrent : null,
_divTmSelectContianer : null,
_divSpSelectContianer : null,
_loadingMsg : null,
_loadingOverlay : null,
// tabs
_tabs : null,
_tab1 : null,
_tab2 : null,
init : function() { },
_initUi : function() {
dojo.parser.parse();
this._divMainView = dojo.byId('main');
this._tab2 = dijit.byId('tab1');
// wire up events
},
_handleEvent : function() {},
_doSomething : function() {}
}