`
jelly
  • 浏览: 301256 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Dojo的痛苦经历

    博客分类:
  • AJAX
阅读更多

2007年6月项目准备开始了,刚来到一个新的项目组,什么都是新的,除了我自己。

需要一个新的框架来开发项目,香港的同事决定使用Dojo,DWR, 我开始学习使用dojo,时间很短,但是我还是基本上熟悉了dojo的基本控件和架构。在此基础上搭建起了项目的基本框架。这是一个单页面,基于ajax和dojo widget的系统,一切都那么的新奇,又充满挑战,但是既然dojo有这么多后台,又有香港同事的推荐,我显得自信满满。

框架搭建的同事,也开始后了紧锣密鼓的招兵买马,一起都像是从零开始。陆陆续续,招了5个程序员和一个测试员。开始了整个项目的快速开发,由于需求由香港负责,而且需求做的比较细致,基本上问题很少。Dojo 却是麻烦不断。

首先的一个坏消息是当我们做完了几乎全部300个页面的时候,dojo宣布0.43不在得到支持,取而代之是完全不同的dojo0.9。 而且dojo0.9 还不是稳定的版本,问题多多,让我们骑虎难下,最后还是决定按兵不动。 随之而来,是dojo1.0,dojo1.1 的陆续发布,但是一直都无法让我看到希望的曙光。 与之相对的是ext在国内的广泛使用和热烈追捧。

Dojo 的控件有很多奇怪的地方,日期选择控件的行为非常怪异,与国内的使用习惯很不相同。而且样式极其丑陋,当字体放大缩小的时候更是丑陋。显示的格式和保存的格式需要分别指定。我们修改了大量的代码。

dojo 的下拉框也被用户投诉,过滤之后一定要再选择一次或者按回车才能选定结果,前台值和后台值分开操作也带来很多不变。

dojo 的验证文本框颜色现实有bug,我们不得不修改代码

dojo的对话框也有问题,对话框中无法在弹出对话框。对话框的操作和控制很不灵活。

js代码不利于管理,容易发生命名冲突。

 

致命的问题发生在项目的后期,在客户的系统进行测试时发现。dojo的性能非常差,在赛扬2G的电脑上,一个页面显示的时间竟然需要17秒。简直就是噩梦。

另外使用dojo的对话框时出现cpu占用100%而且一直不回落下来。

页面载入完成的时候,它有将整个页面重新刷新一次,又需要花费额外的5到8s时间,不仅花费更多的时间,而且严重影响客户体验。

 

还有开发过程中碰到的无数问题,虽然一个一个被解决,但是无疑是一次一次痛苦的煎熬。

 

最后,在性能面前,我被dojo彻底打败,如此的速度是任何客户都无法忍受的,客户不可能为了这个系统全部升级电脑cpu。而且还有很多未知的问题可能还没有被发觉,不如内存泄露,可能导致资源耗尽,内存耗尽。cpu 的占用可能在使用时间长了之后越来越高,等等,这些都是我担心的问题。

 

使用Ajax或者说Rich client,一定要谨慎啊。使用新的技术和框架,一定要谨慎,这是我的教训,希望给同行们一个参考。

 

分享到:
评论
52 楼 yuzexu 2008-05-30  
为什么没有人知道ZK,一个非常优秀的框架,wwww.zkoss.org
51 楼 cscs31 2008-05-29  
可是我觉得ext最大的问题是程序员一直都要写js,而现在很多java的程序员对js很惧怕。
50 楼 upup1000 2008-05-29  
哈哈,这么巧。去年6月,我是刚去一个公司。经理决定用dojo好像是0.43版本的。后来做了一个多月以后,经理突然说,用yui-ext(当时的叫法)。也就是extjs1.x版本。后来一直用extjs1.x版本做完了整个OA系统。今年三月末换到现在这家公司,转而研究Extjs2.0。现在觉得Ext还是一个比较不错的框架。只是Ext(包括现在的yui)都过于臃肿。
49 楼 KKFC 2008-05-28  
dojo有太多ajax开发中里面无中生有的东东,造成技术逾越的难度很大,而且提交的代码很可能是作者“我喜欢”就行了
反正是标准技术做的,就应该老老实实地straightforward,或者只专注做好UI.(找个几个美工强的会画画的去dojo画组件)
48 楼 shatuo 2008-05-28  
KKFC 写道
dojo的朋友们,不要自己骗自己了
顶楼上的
就很想说怎么不用yui,学习人家js架构也是瞒不错的

说dojo好的人的能力比较强,看中的(猜得)是dojo的易扩展性,能改成一个适合自己的样子,我不熟悉dojo,觉的dojo比较适合“个性化”,widget和render等等全是要自己去做。我猜在一些高手眼中,dojo就是一种框架了(猜得)。dojo的licence太宽松了,这可能就是大家用它的原因之一。
47 楼 KKFC 2008-05-28  
dojo的朋友们,不要自己骗自己了
顶楼上的
就很想说怎么不用yui,学习人家js架构也是瞒不错的
46 楼 xqstation 2008-05-28  
YUI才是王道。。。

http://developer.yahoo.com/yui/
当前版本2.5.1

YUI做界面的一些东西,Prototype处理下后台交互。。。还有啥搞不定的。。
45 楼 mkclawhammer 2008-05-27  
用软件不要用3.0版本以下的,好像哪个曾经说过。哈哈!struts除外!
44 楼 yiaduo 2008-05-27  
cats_tiger 写道
用dojo.require的确是恶魔,如果build到一个文件中,还不如用ext。用了很久dojo,最后放弃了,这个东西真是一个大杂烩。互联网项目可以用jquery,网络条件好的用ext


dojo至少给了你选择,ext,jquery呢。
43 楼 cats_tiger 2008-05-26  
用dojo.require的确是恶魔,如果build到一个文件中,还不如用ext。用了很久dojo,最后放弃了,这个东西真是一个大杂烩。互联网项目可以用jquery,网络条件好的用ext
42 楼 jelly 2008-05-24  
刚才测试了一下,widget 可以build 到dojo.js 里面, 周一到公司在测试一下性能。
41 楼 jelly 2008-05-24  
fyting 写道
jelly提到dojo渲染速度慢,首先你有没有给利用dojo的build进行打包呢?在局域网内网速足够快,但如果没有进行build,会有很多小的js和模板文件。而这些文件,都是dojo通过xhr动态载入的,浏览器允许的线程数量会限制动态载入的速度,多个文件载入时也有一定延迟,造成总体速度很慢。对于局域网用户,最好的办法就是build为一个大的js,然后用gzip把这个js发送到浏览器端,这样速度会提升很多。
在使用dojo做完一个项目后感觉,dojo就是个食之无味、弃之可惜的鸡肋。很多地方的代码写得很烂,或者是粗制滥造的,或者给你个玩具功能,一旦实际使用时发现要啥啥没有。但有些地方又有独到之处,至少没有任何命名空间、对象污染。dojo有一套看似完美的widget开发机制,可惜它自带的widget可用性都太低,用了过后简直是场噩梦:你不得不跟踪它的整个代码,观察文档未提及的行为。有些功能要么缺失,要么不完善,不得不按照它的思路添加很多东西。下一个项目,我会考虑轻便的jquery,或者先看下YUI能否胜任。太依赖框架,会造成许多东西不可控(也许EXT除外?)

fyting, 感谢你的建议。
我试过build dojo,使用了minimal profile, 确实生成的dojo.js 缩小了很多(从200k到20k),但是性能也没有明显的改善。
widget 的js应该还是从src目录里面动态载入的吧,应为dojo.js 里面只是一些dojo的核心代码。

40 楼 fyting 2008-05-23  
jelly提到dojo渲染速度慢,首先你有没有给利用dojo的build进行打包呢?在局域网内网速足够快,但如果没有进行build,会有很多小的js和模板文件。而这些文件,都是dojo通过xhr动态载入的,浏览器允许的线程数量会限制动态载入的速度,多个文件载入时也有一定延迟,造成总体速度很慢。对于局域网用户,最好的办法就是build为一个大的js,然后用gzip把这个js发送到浏览器端,这样速度会提升很多。
在使用dojo做完一个项目后感觉,dojo就是个食之无味、弃之可惜的鸡肋。很多地方的代码写得很烂,或者是粗制滥造的,或者给你个玩具功能,一旦实际使用时发现要啥啥没有。但有些地方又有独到之处,至少没有任何命名空间、对象污染。dojo有一套看似完美的widget开发机制,可惜它自带的widget可用性都太低,用了过后简直是场噩梦:你不得不跟踪它的整个代码,观察文档未提及的行为。有些功能要么缺失,要么不完善,不得不按照它的思路添加很多东西。下一个项目,我会考虑轻便的jquery,或者先看下YUI能否胜任。太依赖框架,会造成许多东西不可控(也许EXT除外?)
39 楼 KKFC 2008-05-23  
dojo在“开箱即用”上待加强。
38 楼 cscs31 2008-05-23  
我现在是dojo和struts2结合起来,自己写了一套标签封装dojo,来和struts2交互,单从开发的角度来说,还可以我觉得,层次比较清楚。
但是担心的是性能和未知的一些东西。
37 楼 smilerain 2008-05-23  
当我用dojo 做了2个页面后我就放弃了,dojo,
这些东西的性能,太老火,又大
36 楼 jelly 2008-05-22  
cscs31 写道
那么大家觉得现在的1.1版本如何?lz说的那些bug,1.1中依然存在吗?
原来听说过一个软件不到3.0不要使用它,现在觉得前台选择真的是很麻烦啊,举棋不定的。

1.0 好了很多,至少有人维护。
性能提高得到了挺高,据说一倍以上。
样式也好看了很多。
但是dojo还在一个快速变化和发展的阶段,版本之间的变化比较大,而且感觉widget还比较混乱,比如dojox就是一个大杂烩,dojo不可能直接拿来用就可以开发项目,他提供了很多实现的方式,但是怎么使用还是取决于使用者,甚至要自己修改代码,设计控件。
性能就看客户的环境和要求了,毕竟美丽是需要付出代码的,好的用户体验,操作方式,好看的控件等等都需要消耗更多的机器资源和人力资源。学习和使用dojo是需要花费时间的。
35 楼 xuyongping 2008-05-22  
http://www.ibm.com/developerworks/cn/web/wa-aj-perform/

这里有一个js 的测试跟踪工具。很好用可以看看帮你找到性能瓶颈所在。。挺好用的——firebug
太慢了。。发了两次。
34 楼 xuyongping 2008-05-22  
http://www.ibm.com/developerworks/cn/web/wa-aj-perform/

这里有一个js 的测试跟踪工具。很好用可以看看帮你找到性能瓶颈所在。。挺好用的——firebug
33 楼 founder 2008-05-22  
  我们的项目在2007年中旬,从dojo切换到ext。从实际使用上看,我们更偏向ext一些

相关推荐

    DOjo中文使用手册

    DOjo中文使用手册 DOjo中文使用手册是DOjo Toolkit的详细使用手册,涵盖了DOjo的安装、使用、调试等方面的知识点。本手册适合新手和有经验的开发者,旨在提供一个全面的DOjo使用指南。 DOjo安装 DOjo提供了三种...

    dojo dojo实例 dojo例子 dojo资料 dojo项目 dojo实战 dojo模块 dojo编程

    1. **模块系统**:Dojo使用AMD(Asynchronous Module Definition)模块定义协议,允许异步加载模块。`require`和`define`是两个关键函数,`require`用于加载模块,`define`用于定义模块。 2. **dojo/_base**:这是...

    Dojo框架使用教程

    本教程将深入探讨Dojo框架的使用,帮助开发者更好地理解和应用这一工具。 首先,从`dojo-release-0.9.0.tar.gz`这个文件名可以看出,这是一个Dojo框架的早期版本,版本号为0.9.0。在学习过程中,了解不同版本间的...

    dojo中文文档-dojo手册

    通过使用dojo.require和dojo.provide,开发者可以实现代码的模块化,提高代码复用性和可维护性。 Dojo的dojo.query方法类似于jQuery的选择器,用于选取页面中的DOM元素。此外,Dojo还提供了一套强大的DOM操作API,...

    dojo文档 dojo文档 dojo文档

    dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档

    DOJO 学习笔记 dojo

    在 Dojo 中,使用 `dojo.require` 来声明所需的模块和包,类似于其他编程语言中的导入或使用语句。 `djConfig` 是 Dojo 的全局配置对象,允许你在页面加载前设置 Dojo 的行为。例如,`isDebug` 属性可以设置为 `...

    dojo 1.9 Tutorials(使用说明)

    在使用Dojo时,通常会先加载这个基础模块。 3. **dojo/ready**: 用于在DOM准备就绪或页面完全加载后执行指定的函数,是Dojo中的一个重要概念,确保在执行代码时,DOM已经完全构建完毕。 4. **dojo/store**: 提供了...

    dojo js dojo js

    dojo js dojo js dojo js dojo js dojo js dojo js dojo js

    dojo控件的使用和入门心得

    ### Dojo控件的使用和入门心得 #### Dojo简介及其优势 Dojo是一个功能强大的JavaScript框架,专门设计用于简化富互联网应用(RIA)的开发。作为一种DHTML Toolkit,Dojo封装了大量的常用功能,旨在提高前端开发...

    精通Dojo by Dojo之父

    Dojo是一个非常强大的、面向对象的、开源的JavaScript工具箱,它为开发富客户端Ajax...学习完本书后,读者不仅能熟悉Dojo框架的使用,还能了解Ajax框架的工作原理,最重要的是,还能随心所欲地开发出自己的RIA应用。

    Dojo 入门 + Dojo 工具包系列 + Dojo 使用技巧 ......

    在使用Dojo进行Ajax通信时,Dojo的`dojo.xhr`模块提供了与服务器端进行异步数据交换的接口。它可以处理各种HTTP请求类型,如GET、POST、PUT和DELETE,支持JSON、XML等多种数据格式,为开发者提供了统一的API。 Dojo...

    使用Dojo框架

    Dojo是一个用JavaScript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)),这也是为什么叫它a unified toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些、...

    使用Dojo,JSON开发ajax

    ### 使用Dojo与JSON开发AJAX应用 #### Dojo与JSON简介 Dojo是一个开源的JavaScript框架,专门设计用于简化富互联网应用(RIA)的开发。它提供了丰富的UI控件和强大的工具集,使得开发者能够轻松创建高性能的前端...

    dojo快速入门文档

    本文档旨在帮助初学者快速掌握 Dojo 的基本用法,并通过几个实用示例介绍如何在项目中使用 Dojo。 #### 二、环境搭建与基本配置 为了能够开始使用 Dojo,首先需要确保项目中有正确的文件结构和必要的配置。根据...

    dojo练习

    【dojo练习】是一个关于JavaScript库Dojo Toolkit的学习资源集合,主要涵盖了Dojo的源码解析、工具使用以及一些实用API的教程。Dojo Toolkit是一个强大的前端开发框架,它提供了丰富的功能,包括DOM操作、事件处理、...

    dojo精品中文教程(包一)

    很不错的中文教程!文件太大分3个包! 目录如下: dojo精品中文教程 Dojo.1.0 Practice Note [1] ...使用 Dojo 工具包和 JSON-RPC 构建企业 SOA Ajax 客户端 利用Dojo实现拖动(Drag and Drop)效果

    dojo精品中文教程(全)

    分三个包上传时,第三个包好像传不上去,我给整合了一下,打在一个包里上传了! dojo精品中文教程 ...使用 Dojo 工具包和 JSON-RPC 构建企业 SOA Ajax 客户端 利用Dojo实现拖动(Drag and Drop)效果

    dojo常用方法总结

    ### Dojo常用方法总结 Dojo是一个开源的JavaScript框架,用于构建高性能的富客户端Web应用程序。它提供了一系列功能强大的工具和API,可以帮助开发者更轻松地处理DOM操作、AJAX调用、用户界面组件构建等任务。本文...

    DOJO中文手册【出自dojo中国】

    DOJO中文手册是针对JavaScript库Dojo的详细指南,源自中国的本地化版本,旨在帮助开发者理解和使用这个强大的工具包。Dojo是一个开源的DHTML工具集,由nWidgets、Burstlib和f(m)等多个项目的合并发展而来,因此被...

Global site tag (gtag.js) - Google Analytics