写点什么

Dojo 1.4 发布:性能改进、稳定性提升

  • 2009-12-28
  • 本文字数:2256 字

    阅读完需:约 7 分钟

近日 Dojo 团队发布了 Dojo 1.4 ,该版本的性能和稳定性都得到了极大的提升,同时增加了大量的新特性。

虽然该版本主要解决的是稳定性与性能问题,但我们还是向其中增加了大量新功能,这些功能都非常棒。所有重要的变化都在 1.4 的发布声明(包括迁移指南)中进行了阐述,由于内容太多无法在这里一一说明。简而言之,从简单的使用上的变化(比如现在可以将 dojo.Animation 回调传递给产生动画的结点)到全新的 API(如在 dijit._Templated 之外的 dojo.cache 提供了构建缓存池的功能)都有涉及。某些改变只是将此前的“private” API 公开了而已。比如:现在 dojo._Animation 已经变成了公开的 dojo.Animation 、而 dojo._contentHandlers 变成了 dojo.contentHandlers ,这向高级用户开放了 Ajax 传输配置,同时官方承诺会永远保留这些 API。

本文作者使用 Firefox 3.5.5 运行 TaskSpeed ,结果表明同样的示例应用使用 Dojo 1.4 需要 687ms,而使用 Dojo 1.3.2 则需要 701ms。在虚拟机的 IE 8 上执行该示例,Dojo 1.4 和 1.3.2 则分别需要 2613ms 和 2694ms。

我们发现 Dojo DOM API 变得与 jQuery 非常相像了,James Burke 说到:

我想为 Dojo Core 所做的一件事就是使其 DOM API,尤其是与 dojo.NodeList(dojo.query() 调用及 Dojo 的 CSS 选择器方法的返回对象)相关的方法与 jQuery 达成一致。jQuery 说其 API 会与广大的开发者产生共鸣。这也同样符合 Dojo 的设计哲学,我们应该提供这些 API 以简化开发者的使用。Dojo 1.4 的变化则反映了这个目标: - dojo.ready(),仅仅是 dojo.addOnLoad() 的一个别名。

  • dojo.NodeList-traverse:这是一个辅助模块,用于向 dojo.NodeList 中增加方法。其目标是向 NodeList 中引入那些 jQuery 中早已存在的方法以进行 DOM 遍历,尤其是:children、closest、parent、parents、siblings、next、nextAll、prev、prevAll、andSelf、first、last、even 及 odd 等方法。
  • dojo.NodeList-manipulate:这也是一个辅助模块,用于向 dojo.NodeList 中增加方法。其目标是向 NodeList 中引入那些 jQuery 中早已存在的方法以操纵 DOM,尤其是: innerHTML、html、text、val、append、appendTo、prepend、prependTo、after、insertAfter、before、insertBefore、remove、wrap、wrapAll、wrapInner、replaceWith、replaceAll 及 clone 等方法。
  • IO 管道主题:通过 dojo.subscribe/dojo.publish 获悉 IO 事件。在任意 IO 调用发生时可以轻而易举地加载通用的“loading”指示符。这些主题并非采取 jQuery 的实现方式,而是利用了 dojo.publish/subscribe 来实现的。

InfoQ 就 Dojo 的此次发布采访了 SitePen CEO 及 Dojo Toolkit 的联合创建者 Dylan Schiemann:

InfoQ:对于你来说,此次发布的亮点在于哪?

Dylan:我已在 http://www.sitepen.com/blog/2009/12/10/dojo-1-4-released/ 上对这些内容进行了详细的阐述。 - IO 管道主题

  • dojo.cache
  • dojo.contentHandlers
  • dojo.hash 支持原生的 HTML5 onhashchange 事件
  • 对 NodeList(dojo.query 的返回值)的遍历和操纵
  • dojo.ready(dojo.addOnLoad 的简化版本)
  • 对 Dijit API 与 Dijits 集合的大量精化,同时为 DojoX 增加了一些新的 widget
  • 增加了 DataChart widget,对绘图进行了一些增强
  • 新增了 dojox.drawing
  • 编辑器增强,为 Dijit 和 DojoX 增加了新的插件
  • 更快的 Grid,增加了 EnhancedGrid
  • 为 TreeGrid 增加了 ForestStoreModel
  • 改进了 GFX
  • 增加了 dojox.jq,这是一个试验性的模块,旨在尽可能地匹配 jQuery API,但其底层使用的还是 Dojo
  • Dojo 构建系统开始支持 Google Closure Tools 编译器
  • 速度上的巨大提升,尤其对 IE

对 Grid 的改进和增强以及 dojox.drawing 的引入给人留下了深刻的印象,同时在 IE 下性能的巨大提升也是一个亮点。

InfoQ:好像你们已经不再支持 Firefox 2 而只支持最新版的 Safari、Chrome 和 Opera(仅仅是核心功能)了。这些支持够么?那移动平台呢?

Dylan:不再支持某些浏览器并非意味着 Dojo 在该浏览器上就不能使用了,这只是表明我们并没有在一个 QA/ 测试周期中运行 Dojo 而已。如果某些功能出现了 Bug 导致无法运行在旧版的 Firefox 上,我们一般都会对此作出强调说明。对于 Safari 和 Opera 来说,用户一般都会自动更新浏览器,因此我们觉得只支持最新版的浏览器并没有什么问题。一旦用户报告了问题,我们一般都会进行修复,哪怕是不支持的浏览器。从某种程度上来说,这类似于 YUI 对一等和二等浏览器支持的不同。

InfoQ:随着 Dojo 1.4 的发布, James Burke 很想将其 DOM API 转换成“jQuery 中已有的那些方法”。这与 plugd 所做的有什么关系么?Peter Higgins 将 plugd 称作“最喜欢的 jQuery 味道”。你认为这两个框架是否变得越来越相像呢?

Dylan:plugd 上所进行的工作、dojox 为 jQuery API 兼容性所进行的工作以及 dojox.jq 上的工作的目的都是希望提升开发者操纵 DOM 的效率。jQuery 提供了非常棒的 API 来操纵 DOM,我们也想为自己的用户提供这种支持。plugd 是进行的首次尝试,而 dojox 上的工作则是将这些内容迁移到 Dojo 上的第一步。最终一旦测试完毕并达到性能上的要求且 API 稳定时,这些重要的工作都将迁移到 Dojo Core 中。

关于此次发布的更多细节请查看发布声明文档。Dojo 基于 BSD License 和 Academic Free License 2.1 双重许可,可以从这里下载,也可以从这两个 CDN 处引用。

大家可以在 InfoQ上找到关于 Dojo JavaScript 的更多信息,看看 Dojo.connect() 大会也是一个不错的选择。

查看英文原文: Dojo 1.4 Released with Improved Performance and Stability

2009-12-28 03:173571
用户头像

发布了 88 篇内容, 共 262.0 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

JS遍历循环方法性能对比:for/while/for in/for of/map/foreach/every

zhoulujun

foreach map for for in

本科毕业六年,裸辞备战三个月,四面阿里巴巴定级P7

编程susu

Java 编程 程序员 面试 计算机

IntelliJ IDEA 如何显示提交输入的信息历史

HoneyMoose

redis6安装和可视化工具

4ye

redis 后端 8月日更

LeetCode刷题09-简单 回文数

ベ布小禅

8月日更

百度地图开发-显示实时位置信息 04

Andy阿辉

android Android 小菜鸟 Android端 8月日更

微信业务架构

一叶知秋

架构实战营

下载超过10万次?阿里大佬的《高并发、性能调优笔记》一战封神

Java架构师迁哥

特斯拉依旧头铁坚持视觉路线,激光雷达会笑到最后吗?

脑极体

从λ演算到函数式编程聊闭包(1):闭包概念在Java/PHP/JS中形式

zhoulujun

闭包 闭包函数

微信业务架构图-外包学生管理系统架构

毛先生

架构实战营

JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈

zhoulujun

dart JIT AOT 动态编译 静态编译

使用明道云搭建电梯维修与保养系统

明道云

Linux之nc命令

入门小站

Linux

InnoDB解决幻读的方案——LBCC&MVCC

阿Q说代码

MySQL innodb MVCC 8月日更 LBCC

模块一

树建

架构实战营

Rust从0到1-高级特性-Traits 进阶

rust Traits 高级特性

Vue进阶(六十四):iframe更改src后页面未刷新问题解决

No Silver Bullet

Vue iframe 跨域 8月日更

从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则

zhoulujun

闭包 闭包函数

docker入门:vue和可视化界面的部署,另附ngxin配置

小鲍侃java

8月日更

太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记

编程susu

Java 编程 程序员 计算机 技术宅

ShardingSphere Proxy 初步体验

ShardingSphere-Proxy

微信业务架构图 & 学生管理系统方案

缘分呐

架构 设计

JavaScript 有关数组的 slice 截断函数

HoneyMoose

netty系列之:在netty中使用protobuf协议

程序那些事

Java Netty 程序那些事

混合模型与期望最大化算法(三)

Databri_AI

算法 混合模型

每天学习10个实用Javascript代码片段(五)

devpoint

定时器 JavaScrip 8月日更

正经人一辈子都用不到的 JavaScript 方法总结 (一)

编程三昧

JavaScript 大前端 8月日更 模板字符串 String.raw

Go,一文搞懂 defer 实现原理

微客鸟窝

Go 语言 8月日更

在线JSON转YAML工具

入门小站

工具

微信业务架构和学生管理系统架构设计

Geek_db27b5

微信业务架构 学生管理系统架构

Dojo 1.4发布:性能改进、稳定性提升_Java_Dio Synodinos_InfoQ精选文章