首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

提升 web 应用程序的性能(5)

提升 web 应用程序的性能(5)

Dojo 小部件性能本章将探索能改进 Dojo 小部件性能的方法。
加载成本如 “" (E. Lazutkin, Feb 2007)中所指出,大多数 Dojo 用户对它的第一印象是,它非常巨大。例如,dojo-release-1.5.0-src.zip 是 19M,即使压缩过的 dojo-release-1.5.0.zip 也有 4.5M。最简版本中的大多数文件都是多余的,永远都用不到。所有的 Dojo 版本都有全部 Dojo 文件的拷贝及合并了所有常用文件的定制 dojo.js 文件。缩减加载成本的最佳方法是使用合适的 Dojo 版本。            
dojo.js 可激活 Dojo 对象,并动态加载其余模块,除非它们已经被 dojo.js 中可选部分加载。当浏览器第一次加载 dojo.js 文件时,它将会上传并安装以下文件:            
  • Dojo 引导代码
  • Dojo 加载器
  • 常用模块
为了减小加载时间,需要考虑哪个版本最适合您的应用程序。否则,就要定制一个 Dojo 版本。更多有关 Dojo 文档信息,见  一章。            
解析成本为了最小化 Dojo 小部件解析成本,使用以下两个方法来优化初始化:            
Tag 实例化可以通过添加 dojoType 属性创建一个带有 HTML 标签的 Dojo 小部件,如  所示。此方法运行的前提是 dojo.parser 包含在 dojo.require("dojo.parser"); 中,并且 djConfig="parseOnLoad:true"。这是个很简单的方法,可在轻量级代码中声明组件。页面中所有具有 dojoType 属性的标签都会在文档加载后自动解析。该方法对小型应用程序非常方便,但会显著增加具有大量 HTML 的 web 应用程序的启动时间。解析器将访问所有元素,检查是否要解析。使用配置文件,如 Firebug 中所提供的。                                 如果发现在 dj_load_init()、modulesLoaded() 或其他类似初始装载的内容上花费过多时间,就考虑小部件初始化。                     
Listing 10. 创建 dojoType 的 Dojo 小部件
1
id="errorDialog" dojoType="dijit.Dialog" title='dialog1' class="pop-window"/>




代码实例化Dojo 是一个 OOP 框架,因此可以使用 new 创建小部件。要创建小部件,必须输入两个参数:一个具有属性的 JSON 对象和要解析的元素。每个小部件至少需要两个语句。 是一个样例。                                清单 11. 用 JavaScript new 创建一个 Dojo 小部件
1
new dijit.Dialog({"title":"dialog1 "},dojo.byId("dialog1"));




提升解析性能为了优化代码结构和性能,可考虑在创建小部件时提升解析。通过将 parseWidgets 设置为 false 来禁用自动解析,然后创建一个数组来设置元素的 ID,如  所示。也可在运行时动态放入新元素的 ID。当文档加载时,用 dojo.forEach() 解析数组中所有元素。            
清单 12. 通过迭代 searchIds 来解析小部件
1
2
3
4
5
6
7
8
9
<head>
....
<script > djConfig = { parseWidgets: false, searchIds: [..] }; </script>
....
</head>
<body onload='dojo.forEach(djConfig.searchIds,
   function(id){dojo.parser.parse(dojo.byId(id));});'>
........
</body>

返回列表