解决 Dojo 性能问题的常见技巧

参考:http://www.ibm.com/developerworks/cn/web/wa-lo-dojo-perf/


定制和压缩 Dojo
通常一个完整的 Dojo 库大约会有 2M 左右,其中包含了 Dojo 提供的各种 JS 工具方法,核心 IO 框架,Drag&Drop 支持,丰富的 widget 以及其对应的模版和 CSS 文件图片等等。在一个应用中,通常并不会使用到所有的 Dojo 库提供的功能,那么我们就可以通过运行一个 Dojo 发布包里面的命令来定制出一份个性化的 Dojo。
以 Dojo1.0.2 为例,从 Dojo 的官方网站下载一份完整版的 Dojo1.0.2,在 util\buildscripts、profiles 目录下,有很多 *.profile.js 文件,Dojo 默认情况下会采用 base.profile.js 作为 build 的参数,这个文件的内容如下:

清单 1. base.profile.js

dependencies = {
layers: [
{
name: "../dijit/dijit.js",
resourceName: "dijit.dijit",
dependencies: [
"dijit.dijit"
]
},
{
name: "../dijit/dijit-all.js",
resourceName: "dijit.dijit-all",
layerDependencies: [
"../dijit/dijit.js"
],
dependencies: [
"dijit.dijit-all"
]
},
{
name: "../dojox/off/offline.js",
resourceName: "dojox.off.offline",
layerDependencies: [
],
dependencies: [
"dojox.off.offline"
]
}
],

prefixes: [
[ "dijit", "../dijit" ],
[ "dojox", "../dojox" ]
]
}

layers 部分定义可以被直接调用的模块,这些模块所引用到的其他模块也会被加载进来,在 layers 部分不用再次去声明 Dojo 的核心模块比如 dojo.query,它们是被默认加载进来的。layers 是 Dojo 的一种分层机制,它可以把一些松散的 JS 组合成一个 layer,在应用中要使用到相关的 API 时,只要在 <script> 里面声明一下这个 layer 的名字就可以直接在您的 JS 代码中使用这个 layer 中提供的功能。Dojo 在打包整个 Dojo 的代码时,会将这个 layer 中对应的所有 JS 文件进行压缩整理,这样在加载相关 JS 文件的时候,有一定的性能提升。
prefixes 部分用于定义前缀,比如您的 JS 代码在某一个独立于 Dojo 的目录,这里只要您指定一个路径,并给出一个前缀名称,那么在应用中就可以直接用这个前缀来作为这个路径的使用。
开发人员可以根据应用中使用到的 Dojo 特性来做一个对 Dojo 做定制。如何根据一个 profile 文件来定制 Dojo 呢?
在 dojo1.0.2\util\buildscripts 目录中有一个 build.bat 文件,它的作用就是调用 ShrinkSafe 来进行一次 JS 文件的压缩,并做适当优化。
关于该 build 命令的使用方法,这里仅介绍几个常用的参数。

表 1. Build 主要参数及用途
参数名称 参数用途
profile 指定 profile 文件的名称,如要指定 base.profile.js, 设定 profile = base 即可
action 指定本次命令的类型,提供的三个值是:clean, release, help
releaseName 指定本次 release 的名字,默认是 dojo
optimize 指定进行优化的方式,Dojo 提供四种优化方式:
comments:仅删掉代码的注释 ;
shrinksafe:使用 Dojo compressor 来进行代码的压缩 ;
shrinksafe.keepLines:使用 Dojo compressor 来进行代码的压缩,但是代码换行会被保留 ;
packer:使用 Dean Edwards' Packer 这种压缩工具进行代码压缩。
一个典型的定制 Dojo 的命令可以如下:
$ build.sh profile=base action=release releaseName=myDojo optimize=shrinksafe

压缩其他 JS 文件
通常在一个 Web 2.0 应用中,会有很多业务逻辑相关的 JS 代码,而且很多逻辑从后台搬到了客户端执行,因此这部分客户端代码非常多。为了提供更快的响应速度,典型的做法是压缩所有客户端需要加载的资源包括图片,HTML 文件,CSS 文件,JS 代码等等,而图片文件已经无法再进行压缩,只有 HTML,CSS,JS 等文本文件有进一步压缩的空间。
进行文本文件压缩的工具比较多,这里重点介绍 shrinksafe,在定制 Dojo 的过程中,可以指定 shrinksafe 作为压缩 Dojo 内部文件的方式。就是说 Dojo 已经自带了一份 shrinksafe 实现。在 Dojo 1.0.2 中有一个 jar 文件:dojo1.0.2\util\shrinksafe\ custom_rhino.jar,这是一个基于 rhino 实现的压缩工具,关于 rhino 有兴趣的读者请查阅参考资料部分。
shrinksafe 之所以称其“safe”,是因为它在压缩了 JS 文件以后,不会改变其对象内部方法和属性名称,引用到该段代码的地方不需要任何更改,还是可以直接调用其内部方法和属性。 在 custom_rhino.jar 所在的目录运行 java –jar custom_rhino.jar –version 100 可以进入 rihno 的命令行状态。

图 1. custom_rhino 运行参数

压缩一个 JS 文件的命令如下:
java -jar custom_rhino.jar -c infile.js > outfile.js

经测试,一个 JS 文件经过这样的命令压缩后,可以减小 30% 左右,将压缩后的文件放回系统中,对该 JS 文件的功能调用没有任何影响。
配置 Dojo 系统参数
当页面上有大量的 Dojo widget 或者自定义 widget,页面的加载和解析会变的比较慢,Dojo 系统的一些默认参数可能是导致这些现象的原因。通过改变这些参数,我们可以看到页面的加载和解析速度有了明显改善。
Dojo 在默认情况下会搜索整个 DOM 树,判断当前的 DOM 节点是不是 widget,如果是就开始加载该 widget 的 JS,HTML,CSS 等资源。在页面上 DOM 节点非常庞大时,这显然是一个很大的开销。Dojo 提供了系统参数 parseWidgets 和 searchIds 让用户来指定是否只对某些 DOM 节点进行解析。
在应用启动的页面中加入如下定义:
<script> djConfig = { parseWidgets: false, searchIds: [] }; </script>

如果确定在某些节点以及其内部不会有 widget 出现,那么在该节点上加上这样一个属性:
<div parseWidgets="false">
内部无 widget
</div>

当某些节点确定是 widget,一定要让 Dojo 来解析该节点,将该节点加入 searchIds:
<div dojoType="Menu" id="menyu1">...</div>
<script>djConfig.searchIds.push("menu1");</script>

延迟加载
某些通过用户的操作以后才会显示或者创建出来的内容,可以不放在初始页面上,而仅放一个 placeholder 在页面中,典型的例子就是 Dojo 的 tab widget。

清单 2. Dojo TabContainer

<div dojoType="TabContainer">
<a dojoType="LinkPane" href="tab1.jsp">Tab #1</a>
<a dojoType="LinkPane" href="tab2.jsp">Tab #2</a>
</div>

采用这样的定义,就可以避免加载当前页面时就 load tab1 或者 tab2 里的内容。
其它 Tip
减少 DOM 树中的节点,当页面中内容非常多时,响应速度必然会变慢,因此应该尽量将一些无用的 DOM 节点删除或者简化,下面是个极端的例子 :

清单 3. 复杂的 DOM 节点

< table >
< tr >
<td> Hello World </td>
< /tr >
</ table >

更简单的定义方式是一个 div 加上相应的 css:
<div class="foo">Hello World</div>

回页首
检测性能瓶颈的工具
当前针对 Firefox 和 IE 的性能检测工具有很多,这里分别对 Firefox 和 IE 各推荐一些工具。
Firebug
在 Firefox 里面,firebug 是首选的工具,它是一款比较轻量级的 Firefox 插件,它可以监测发送的每个请求到达的 url 以及响应完成的时间。同时它还可以灵活地动态修改 DOM 节点,CSS 等,并实时显示出修改后的效果。

图 2. Firebug 监控 HTTP 请求


图 3. Firebug 修改 DOM 节点

IEWatch
这是 IEWatch 公司开发的一款商业产品,是一个 IE 插件,提供了对 HTML 和 HTTP 的状态分析。它列出了加载当前页面过程中所发出的请求以及各个请求的响应时间。但是对 HTML 的状态跟踪以及 DOM 节点展现方式不太灵活。

图 4. IEWatch 监控 HTTP 请求


图 5. IEWatch 修改 DOM 节点

IE Developer Toolbar 也是一款不错的 IE 调试工具,是 Microsoft 自己提供的 IE 插件,它能将当前 DOM 树以树状结构展现。Microsoft 官方推荐的是 Microsoft Script Editor,Microsoft Script Debugger。
提高基于Dojo的Web2.0应用程序的性能 本文内容包括:Web2.0与Dojo介绍解决Dojo性能问题的常见技巧检测性能瓶颈的工具小结参考资料Web2.0应用程序最注重的一个方面就是用户体验,用户希望使用的是一个快速稳定的Web2.0应用。而基于Dojo的Web2.0应用经常需要下载大量Dojo代码到客户端执行,而且会不时的向后台发起IO请求,响应速度受到很大影响。本文通过演示一些实用的技巧来提高Dojo的性能,帮助开发人员找出Web2.0应用程序的性能瓶颈。Web2.0与Dojo介绍Web2.0应用以其丰富的用户体验,快捷的响应速度越来越受到众多用户的欢迎。GoogleMap,Flickr,YahooPipe等经典的应用都利用了We 立即下载

相关推荐

期货缠论实战:文华财经笔中枢指标公式解析与博易大师应用指南

本文深入解析期货缠论实战中的文华财经笔中枢指标公式及其在博易大师平台的应用技巧。详细介绍了笔中枢指标的核心逻辑、公式拆解、参数设置及多周期联合作战策略,帮助交易者提升市场分析能力与交易胜率。特别适合期货交易者学习缠论指标的实际应用。

weixin_42522552的博客 361

提高基于 Dojo 的 Web 2.0 应用程序的性能

提高基于 Dojo 的 Web 2.0 应用程序的性能 施 伟 (shiwcsdl@cn.ibm.com), 软件工程师, IBM 中国开发中心 简介: Web 2.0 应用程序最注重的一个方面就是用户体验,用户希望使用的是一个快速稳定的 Web 2.0 应用。而基于 Dojo 的 Web 2.0 应用经常需要下载大量 Dojo 代码到客户端执行,而且会不时

阿义的专栏 824

国密https握手协议抓包及流程详解

使用的密码套件清单-Cipher Suite,这里服务器端选择了ECC_SM4_CBC_SM3密码套件,也就是SM2公钥算法、SM4-CBC分组密码算法和SM3杂凑算法。具体来说,这里SM2算法密钥交换算法,SM4是加密算法(SM4-CBC)、SM3是校验算法(国标要求为HMAC-SM3)。服务器的加密证书:加密证书中在同样在扩展字段中KeyUsage标识出KeyEncipherment为true和dataEncipherment为true,即数字证书中包含的公钥可用来做密钥加密密钥和数据密钥。

ryanzzzzz的博客 5850

javascript混淆续

alimama_pid="mm_11307516_1146824_2589042"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; a

百川异源,终归于海 1410

STM32U575 ADC+DMA+UART数据采集实战:CubeMX配置避坑与代码实现

在嵌入式开发中,ADC采集与DMA传输是提升系统实时性的关键技术。通过DMA将ADC数据直接搬运到内存,可大幅降低CPU占用,实现高效连续采样。结合UART的DMA发送,能进一步解放CPU,适用于工业采集、信号监测等场景。本文以STM32U575为例,详解CubeMX中ADC、DMA、UART的配置要点,包括时钟树、DMAMUX映射、循环模式等,并给出代码实现与常见问题排查,帮助开发者快速构建稳定的数据采集链路。

weixin_29194255的博客 172

AI:Coze、Dify、n8n:三款低代码工具如何选?

Coze、Dify、n8n:三款低代码工具如何选?

Kant2048的博客 2808

系统优化之Dojo优化策略--页面加载机制优化

    随着Dojo的名声越来越大,更多的开发者选择使用Dojo作为前端开发的框架。虽然Dojo是一种异步框架,能够借助各种ContentPane快速的搭建起开发框架,并实现异步通信,但有时一个模块包含的内容过多,造成此页面的内容过多,打开该页时就会导致内存飙升,长时间没有响应等问题。下图所示为一业务模块的页面结构图。                在View区域中,包含了多个Widg...

weixin_34137799的博客 195

【华为OD机试真题 新系统】1010、魔法阵的能量收集 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1010、魔法阵的能量收集 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为

KJ.JK 1077

Dojo 客户端性能优化

Dojo 客户端调优的方式: 1. 编译合适的dojo文件。 dojo十分“巨大”, 而且有很多文件是最终用户不需要使用的。 默认情况下的dojo.js 比较大,有200多k,但是如果自定义进行编译之后可能只有10多k。 而且将常用的模块编译到dojo.js 也能提高效率。 dojo的加载顺序如下:   1). 浏览器加载dojo.js     dojo bootstrp code     do...

jelly 299

锂电池充放电管理-单片机通用模版

- **①两节锂电池通过电阻分压检测ADC,再根据电压划分电量等级;** - **②充电使用的是锂电池充电IC方案,可通过硬件电阻参数调节充电电流,并可以通过STAT引脚检测充电和满电状态(充电注意会抬高电压);** - **③放电根据ADC_BAT检测电池电量进行等级划分(注意大负载电压骤降瞬间);** - **④充放电过程注意在电量划分等级临界值来回抖动现象;**

a6662580的博客 1490

ios开发拒绝“玄学”Crash:从循环引用到脏内存,构建你的系统性排查思维模型

你申请了内存,写了数据,这块内存就是脏的。系统无法直接回收它,除非你显式释放,或者系统把它 swap 出去(但在 iOS 上,Compressed Memory 机制虽然能压缩,但不会像桌面系统那样频繁 swap 到磁盘,一旦压缩内存也撑不住,你也得挂)。所以,排查 OOM 的核心心法只有一条:不要问“哪里漏了”,要问“每一刻,留在这个页面上的内存,凭什么必须在这里?一旦内存水位线逼近阈值(不同机型不同,老机器可能 600MB 就危,新机器能抗 1.5GB),系统发个警告。

大模型大数据攻城狮的专栏 727

终极指南:curl.js与jQuery、Dojo、Underscore的完美集成教程

curl.js是一个小巧、快速且可扩展的JavaScript模块加载器,支持AMD、CommonJS Modules/1.1、CSS、HTML/文本以及传统脚本的加载。在前100个字内,让我们明确curl.js的核心功能:这是一个专为现代Web开发设计的异步模块加载器,能够高效管理JavaScript模块依赖关系,特别适合与jQuery、Dojo和Underscore等流行库进行集成。 ## ?

gitblog_00176的博客 195

【AI编程】Codex 进阶与高阶技巧:从熟练到精通——2026 最新教程

Skill 是 Codex 的「插件」—— 一段 Markdown 定义触发条件、输入参数和执行流程。比自定义命令更强大,支持参数化、多步骤、条件判断。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 192

Dojo 项目常见问题解决方案

Dojo 项目常见问题解决方案 1. 项目基础介绍和主要编程语言 Dojo 是一个开源项目,旨在提供一个高效、灵活的开发框架,帮助开发者快速构建和部署应用程序。该项目的主要编程语言是 Rust,这是一种系统编程语言,以其高性能和内存安全特性而闻名。Rust 语言在 Dojo 项目中被广泛使用,用于构建核心功能和底层架构。 2. 新手在使用这个项目时需要特别注意的3个问题及解决步骤 问题1:环境配置...

gitblog_00838的博客 929

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

dojo_加快Dojo TreeGrid的性能

当您要在网页上显示层次结构数据时,Dojo v1.4 TreeGrid是一个有用的小部件。 但是,如果您的数据集很大, TreeGrid的性能将非常慢。 在本文中,学习如何通过自定义TreeGrid和QueryStore解决此问题。 本文介绍了使用两个小部件时可能遇到的问题,解释了错误的原因,然后帮助您创建解决方案。 您还可以下载本文中使用的示例代码。 Dojo网格和大数据集 当然,您...

cuyi7076的博客 315

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Dojo与jQuery综合比较分析

最近Dojo和jQuery双双发布了最新的1.8版本,有着相同版本号的两个Javascript库也有许多核心的相同之处:相同的资源加载机制AMD、相同的选择器 引擎Sizzle等。作为业界知名的Javascript库,Dojo和jQuery在各自领域有着为数众多的拥护者。不过正所谓一把钥匙开一把锁,对一个项目来说肯定有个最适合它的工具库,用对了工具才能事半功倍。所以对项目经理或是技术总监来说,工程

Dojo中文博客 7万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Dojo Toolkit 创始人谈Dojo学习

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

华章IT官方博客 4140

dojo框架的基本认识

Dojo的全称是Dojo Toolkit,始创于2004年,是当前各种蓬勃发展的JS工具包中的佼佼者。Dojo 为富互联网应用程序(RIA) 的开发提供了完整的端到端的解决方案,包括核心的 JavaScript 库,简单易用的小部件(Widget)系统和一个测试框架,此外,Dojo 的开源开发社区还在不停地为它提供新的功能。

weixin_45774558的博客 3133

Dojo:不容忽视的RIA框架

2005年5月,Ajax概念被第一次提出。而在此一年之前,Dojo框架已经写下了第一行代码。作为Ajax之前的“Ajax”框架,Dojo官网至今一直用着朴素的名字来定义自己:javascript toolkit。看上去仅仅是个工具集,而事实上它却有框架的力量,推进着大型Web2.0应用的开发。这也是Dojo一直给人的印象,低调、沉稳,却很强大。如果你仅仅想让WordPress页面的下拉菜单效果更加酷,我不反对用JQuery;但如果你需要以Web2.0技术为基础去架构一整个应用,那么Dojo一定是你的最佳选择

Dojo中文博客 7181

Dojo框架使用教程

google_ad_client = "pub-5033576919944123";google_ad_width = 728;google_ad_height = 90;google_ad_format = "728x90_as";google_ad_type = "text_image";//2007-10-24: csdn.bloggoogle_ad_channe

tgystc 5482

关于Dojo的Grid

Dojo 0.9与以前发布的所有其它版本都不兼容。关于这一结论的说明可以参考Doji官方网站上的文档:《Dojo Porting Guide: 0.4.x to 0.9》,下面是2007-10-3浏览该网站相关内容时所作的屏幕截图(为了记述更清晰对截图做了一些标识,下同)。  Dojo 0.4中的一些重要的特征,在Dojo 0.9中没有实现。为此,Dojo官方网站上给出了一个列,表

专栏 2403

Dojo学习笔记

Dojo学习笔记(1. 模块与包)Intro:Dojo是一个非常强大的面向对象的JavaScript的工具箱, 建议读者能够去补充一下JavaScript下如何使用OO进行编程的, 这对于你以后阅读Dojo Source有很大的用处请大家下载dojo 0.3.1, 以下的说明均针对此版本翻译自http://manual.dojotoolkit.org/WikiHome/DojoDotBook/

咖啡.编程.思考 4243

Dojo 控件性能优化最佳实践

什么是 Dojo ? Dojo 是一个用 JavaScript 语言实现的开源 DHTML 工具包,是基于 CSS 和 JavaScript 实现的一个通用类库。Dojo 的目标是解决开发 DHTML 应用程序遇到的那些,长期存在 、历史问题。Dojo 在内部处理了 DHTML 在不同浏览器上显示的差异,这让程序员大大节省了开发过程针对不同浏览器进行调试和容错的开销。Dojo 让你更容易使 ...

技术风向标 304

Dojo1.11官方教程文档翻译(1.2)Hello Dojo!

Dojo官方教程文档翻译(1.1)Hello Dojo! 基本入门

碎梦道 1945

Dojo1.8系列教程一 ---- 开始使用Dojo

转载请注明出处:http://blog.youkuaiyun.com/z787326 欢迎来到我的博客,在这个系列教程中,你将学会如何开始使用Dojo和一些Dojo的核心函数的使用。 让我们开始吧 今天我们讲如何在项目中引入Dojo,并且实现最基本的功能:Hello Dojo。 获取Dojo最简单的方法之一就是通过CDN(内容分发网络),它让我们快速地获取到想要的资源,,但是使用这种方式你必须保证实

赵林的博客 2549
上一篇: dojo mobile 入门
下一篇: 关于手机端JQuery的异步传输时UI界面不更新的bug
kevin0xFFFFFFFF
博客等级 码龄17年 3粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值