注:本文来自于李文兵的博客,对我分析javascript内存泄露非常有帮助,谢谢分享!
了解dojo widget(或者说dijit)的析构过程,不仅让你更加了解整个dijit的生命周期,同样也能帮助我们在自己定制化的dijit中如何正确地释放资源。(这里讨论的dojo应该是在0.9或者以上版本的)
下面是dijit的析构过程:
destroyRecursive
/ \
destroy destroyDescendants
/ | \
uninitialize disconnect() destroyRendering
一些常见的错误是如下:
- 使用destroy()去销毁一个dijit。我们应该使用destroyRecursive()去销毁一个dijit,从上面的过程可以看出,destroyRecursive()会销毁其孩子widgets。
- 使用destory()去销毁定制dijit中的资源。更可怕的是有的代码可能是直接覆盖destroy,而根本不调用_Widget中的destory。uninitialize()才是dijit暴露出来给定制化widget进行析构的stub function。
结论
使用destroyRecursive()去销毁dijit,使用uninitialize()在定制化的dijit来释放自己的资源。destroyDescendants,destroyRendering基本上用不到,也不要去覆盖它们。
分享到:
相关推荐
Dojo Widget可以通过Canvas API创建动态图表,例如实时更新的数据曲线图。开发者可以通过JavaScript操作Canvas来动态绘制图表,同时利用Dojo的事件处理机制响应用户交互。 **2. 实现离线数据存储** 通过HTML5的...
本文档旨在为项目团队提供关于Dojo Widget安全通信的深入理解,以便在实际开发和研究过程中遵循正确的安全实践,确保Widget之间的交互不会受到潜在的安全威胁。 2. **相关背景** 在OpenAjax的背景下,Managed Hub...
创建自定义Widget的过程大致分为以下几个步骤: 1. **定义Widget结构**:首先,你需要决定Widget的HTML结构,这通常通过`templateString`或`templatePath`属性来实现。`templateString`直接在JavaScript代码中嵌入...
本文主要探讨的是在Dojo框架下进行Widget标签开发的技术细节,旨在帮助开发者更好地理解和利用Dojo构建可重用、模块化的Web组件。 首先,我们要了解什么是Widget。在Dojo中,Widget是UI组件的基础,它封装了HTML...
<<Dojo的高级运用:Widget的制作>> 和 使用Dojo和JSON构建Ajax应用>> 中涉及到的源代码 博文链接:https://tailsherry.iteye.com/blog/102907
Widget的主要目的是简化用户访问各种应用程序和网络服务的过程,提高效率,并增加趣味性。它们通常依赖于特定的Widget引擎来运行,如Yahoo! Widgets。 **Widget的类型与应用** Widget的应用非常广泛,包括但不限于...
每个 Dojo widget 都有一系列生命周期方法,如 `postCreate`、`startup` 和 `destroy`,它们在 widget 的创建、初始化、显示和销毁过程中被调用。理解这些方法有助于正确地管理组件的状态和资源。 ### 5. 测试 ...
5. **dojo/Widget**:Dojo提供了丰富的UI组件,如按钮、表单、对话框等,它们都继承自`dojo/_base/widget.Widget`。开发者可以通过`dojo/_base/lang.extend`扩展自定义组件。 6. **dojo/Stateful**:这个基类提供了...
2. **减少Widget的使用**:每个DOJO Widget都会增加页面的加载时间,因此应谨慎使用,尽量减少不必要的Widget。优化Widget的使用有助于提高整体性能。 3. **更新到最新版本**:新版本的DOJO通常包含性能优化和错误...
例如,`dojo.widget.*` 表示包含 Dojo小部件的所有模块,这些小部件是可复用的 UI 组件。当你声明需要使用某个包时,实际上是在要求加载该包下的所有模块。在 Dojo 中,使用 `dojo.require` 来声明所需的模块和包,...
"Dojo Widget Overview"可能详细介绍了Dojo的组件系统,包括按钮、表单元素、布局容器等。Dojo的部件设计灵活,可以进行高度定制,同时支持主题化,以适应不同风格的网站设计。常见的Dojo部件有dijit.form.Button...
例如,设置isDebug为true可以在开发过程中开启调试模式,baseScriptUri可以指定Dojo脚本的基础URI,parseWidgets控制是否自动解析页面中的Widget标签。通过正确配置djConfig,开发者能更好地优化Dojo的性能和功能。 ...
3. **Dojo Widget系统**: - Dojo的部件系统是其强大之处,它提供了一系列可复用的UI组件,如按钮、表单、对话框等。 - `dijit` 和 `dojox` 模块包含各种部件,`dijit`是主要的部件库,`dojox`则包含更多实验性的...
dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档
在技术特性上,Dojo的文件结构包括一个核心代码文件(Dojo.js)和多个JavaScript文件,按照功能不同分为多个版本,如AJAX版、Widget版、Event和I/O版、Event版以及Kitchen Sink版,满足不同应用场景的需求。...
Dojo 的强大之处在于其丰富的Widget系统。`dojo_widget.doc` 可能详细介绍了这些组件,如按钮、表单、菜单、日历等。Widgets使得开发者可以快速构建复杂的用户界面,它们封装了HTML结构、样式和行为,提供了高度可...
在编程方式下,可以使用 `dojo/parser` 模块来解析这些 `data-dojo-type` 并实例化 widget。 总结来说,利用 Dojo 进行客户端开发,首先要正确配置 djConfig,引入 Dojo JS 文件以及所需的 CSS 样式,然后在 DOM ...
其中 Dojo 是核心功能包,Dijit 中存放的是 Dojo 所有的 Widget 组件,而 DojoX 则是一些扩展或试验功能。 常用的包包括: * dojo.io:不同的 IO 传输方式,如 script 和 IFrame 等。 * dojo.dnd:拖放功能的辅助 ...
5. **Dojo Widget系统 (dijit)**: dijit是Dojo的UI组件库,包含了各种可复用的、可配置的Web部件,如按钮、表单控件、对话框等。这些部件是模块化的,且遵循WAI-ARIA无障碍标准,以确保良好的用户体验。 6. **...