- 浏览: 302750 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
阿宁sun:
除了把源码上的注释复制过来,没看到啥东西。。。
初步研究Apache common pool -
jelly:
如果开发游戏,用flash 也有被反编译的危险哦
试读《高性能HTML5》——走向完善的web 客户端 -
zhengjie_dna:
最大的问题是代码 可以获取的 你用soket 完全无法保证安全 ...
试读《高性能HTML5》——走向完善的web 客户端 -
paradigm:
谢谢,我用3分钟找到了这里,一分钟解决。GOOD
我用的关键字 ...
一用subclipse 就导致eclipse莫名奇妙的退出(crash) -
yvhiwssn:
请问我如果将BeanDefinitionBuilder 动态的 ...
动态创建Spring Bean
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,一定要谨慎啊。使用新的技术和框架,一定要谨慎,这是我的教训,希望给同行们一个参考。
评论
不过dojo需要自己修改的地方确实挺多的,我用的是0.31.
需要对代码进行性能和压力测试
最好能逐行 分析。
找到问题的根源再下结论。
dojo的widget问题太多,使用dojo,这些东西都要重新编写,dojo的parse问题也很大,它的那个模板缓存机制也需要改善,总之,使用dojo,挑战就来了。
模板的问题,需要用internstring做提取,然后缓存这个string效率会好很多。
使用dojo,和jquery等比较,它不算是lightweight的,因为他考虑了太多,而他所考虑的大部分内容目前还不是国内的大部分开发用户所能考虑到的。
如果你的代码从长远的考虑要考虑各种应用环境,支持各种语言,要卖到国外去,要做到没有license的问题,要想以后做offline,air等有可能会做的事情,dojo应该是目前来看好的选择。
希望付出了就能有回报,总之在开放性的web技术上,我们相信路线是正确的!
需要对代码进行性能和压力测试
最好能逐行 分析。
找到问题的根源再下结论。
dojo的widget问题太多,使用dojo,这些东西都要重新编写,dojo的parse问题也很大,它的那个模板缓存机制也需要改善,总之,使用dojo,挑战就来了。
需要对代码进行性能和压力测试
最好能逐行 分析。
找到问题的根源再下结论。
一个页面如果超过10秒,那么是不是会让人跳楼。
我现在做的项目之所以立项,正是因为前面的系统比较慢,所以性能问题变得无法回避。
现在客户的要求是一搬的页面载入的时间必须4,5s。
特别复杂的页面10多s。
现在即使简单的页面在配置比较差的情况下竟然需要10s以上,特别是如果系统使用的越久,就越来越慢。
当然,dojo0.43 是老版本,新版本是不是解决问题,我不敢保证。但是冒然升级到1.1 ,却也是一个巨大的风险。
现在我们开始考虑暂时放弃dojo,毕竟性能对我们来说是至关重要。现在正在考虑修改的方案,比较头疼。
jelly 我提点比较实际的想法 可能有些唐突
我觉得从你的描述中看 你并没有掌握效率的根本问题
DOJO有很多问题 我也借你的帖子对DOJO小小发泄了一下
不过你想在所要面对的问题 不是将问题推向DOJO 而是搞清楚效率问题究竟出在哪里 对使用DOJO的反思应该留给下一个项目 在找到问题所在之前 试图靠升级框架解决问题是不合适的
页面加载时间仅仅是表面现象 你现在要做的是找出时间瓶颈
首先应该确定的是 时间消耗在CPU时钟上 还是内存页置换上(因为网页内存泄露很多 所以很难说时间不是因为内存申请或者物理内存不足导致的换页耗费的) 如果你不是局域网
而且从你说的"系统使用的越久,就越来越慢" 内存泄露是很有可能的。(如果是DOJO自己内存泄露那就比较麻烦了)
80%的时间消耗在20%的代码上 你应该很清楚这个道理 所以你应该观察时间消耗的位置 是集中于某一个控件 还是平均分布在所有控件上。如果是平均分布,你则应该搞清楚是控件生成的哪个阶段消耗了如此多的时间。
其实网页上CPU长期100%的情况不多 除了死循环和跑一些bt算法 就只有expression能做到了
最坏情况下 你可能需要重新实现某些DOJO的组件。
Good luck.
写的全是java代码,编译后全是js+html .界面也很漂亮, 应该爽死了
一个页面如果超过10秒,那么是不是会让人跳楼。
我现在做的项目之所以立项,正是因为前面的系统比较慢,所以性能问题变得无法回避。
现在客户的要求是一搬的页面载入的时间必须4,5s。
特别复杂的页面10多s。
现在即使简单的页面在配置比较差的情况下竟然需要10s以上,特别是如果系统使用的越久,就越来越慢。
当然,dojo0.43 是老版本,新版本是不是解决问题,我不敢保证。但是冒然升级到1.1 ,却也是一个巨大的风险。
现在我们开始考虑暂时放弃dojo,毕竟性能对我们来说是至关重要。现在正在考虑修改的方案,比较头疼。
dojo自带的theme test载入最多也就4,5秒吧,所有的dojo控件都囊括了。如果说你是几十个控件的话,我认为不是一开始页面render都需要解析出来的,比如dialog之类的,完全可以lazy parse的,使用dojo.parse.
....考虑做custom build吧,上百个... 合并成一个再做压缩,后台cache. 前台cache,性能会好很多很多。
下载js的时间对于局域网的应用来说应该不会有太多问题。
而且暂时我们都测试到下载js的时间还是比较短的。但是dojo渲染页面的时间比较长。
我估计你们是不是大量的应用了诸如contentpane, layoutpane之类的widget,我觉得还是不要使用js做布局管理,那是Css的任务。
....考虑做custom build吧,上百个... 合并成一个再做压缩,后台cache. 前台cache,性能会好很多很多。
下载js的时间对于局域网的应用来说应该不会有太多问题。
而且暂时我们都测试到下载js的时间还是比较短的。但是dojo渲染页面的时间比较长。
一个页面如果超过10秒,那么是不是会让人跳楼。
我现在做的项目之所以立项,正是因为前面的系统比较慢,所以性能问题变得无法回避。
现在客户的要求是一搬的页面载入的时间必须4,5s。
特别复杂的页面10多s。
现在即使简单的页面在配置比较差的情况下竟然需要10s以上,特别是如果系统使用的越久,就越来越慢。
当然,dojo0.43 是老版本,新版本是不是解决问题,我不敢保证。但是冒然升级到1.1 ,却也是一个巨大的风险。
现在我们开始考虑暂时放弃dojo,毕竟性能对我们来说是至关重要。现在正在考虑修改的方案,比较头疼。
....考虑做custom build吧,上百个... 合并成一个再做压缩,后台cache. 前台cache,性能会好很多很多。
什么叫两次渲染? 不明白你的意思。
这个dojo的官方站点的文档很清楚了吧。像java一样按照文件目录结构自己规划好package,比如com.xx.js.utils, com.xx.js.utils.array, com.xx.js.model 等等。
根据页面的使用情况,使用custom build做出比较多的layer.将页面上所需要的js合并成一个大的压缩过的,混淆过的js文件,尽可能的防止在页面初始化的时候进行dojo.require同步装载。那么你的应用性能无疑是最佳的,每个页面只装载需要的js内容,甚至说我只会用到某几个function,其他的不需要,那么我就不打包进来。当然如果页面有可能会用到某个function,但是用户使用的概率很小,那么这样的则可以进行同步的装载,load on demand. 当然甚至你可以自己做到在页面初始化完毕之后,采用异步的方式去装载那些并非是页面初始render时候所需要的js,这样的话,用户在需要的时候,有很大可能这个function已经在上下文中了。
dojo没ext那么多license问题。
SmartClient不知怎么样,使用LGPL的license。这不,就见到一个用户前来咨询ext-->SmartClient的情况(估计受license的影响):
new Ext.grid.GridPanel -> isc.ListGrid.create
columns -> fields
stripeRows -> alternateRecordStyles
Then in each field:
id/dataIndex -> name
renderer -> formatCellValue
sortable -> canSort
header -> title
http://forums.smartclient.com/showthread.php?p=7615#post7615
Ext、SmartClient改变license,个人认为确实是基于商业利益而作出的调整。此前,SmartClient一直纯商业运作,Ext则在LGPL的“庇护”下快速成长(相信作者本人也没有预料到Ext发展如此之快),但各有各的烦恼。
SmartClient公司(确切说是Isomorphic)的客户一直不是很多,但该公司能坚持7、8年之久,估计还是赢利的。推出LGPL版本的产品,目的还是吸引更多客户,他们的商业策略是靠推销高端组件或定制服务来挣钱,想要使用LGPL实现自己的商业应用估计是没有希望的,只能玩玩而已,因为此版本的所包含的精简服务端组件不允许部署,见http://www.smartclient.com/product/smartLGPL.jsp。而且,所谓LGPL版本,在开放源代码方面也只是做个样子,因为SmartClient开放了基本组件的源代码,更基础的源代码还没有开放,即使开放也没有什么意义,原因是看惯了Prototype和Ext的源代码,读真正的SmartClient源码会让人疯掉的。
在SmartClient实际开发过程中,会遇到组件扩展或一些诡异问题,都会由于无法找到类似ext-all-debug.js那样的源代码让你放弃跟踪转而请求SmartClient帮助,要是遇到扩展或性能提升,估计只有买商业组件了。没有服务端的SmartClient,什么都做不了。
综上所述,推出LGPL协议的SmartClient,最终目的还是商业利益。
至于是否选择SmartClient,我觉得要综合考虑很多因素:
首先,选择框架不能基于道德评判。就像不应该因为“开源”盲目选择Ext一样,也不应该因为是商业一概排斥。更不能把所谓的不道德和背信(试想SmartClient的老用户看到开源版本,是否会像大批Ext的支持者一样批判SmartClient)作为选择框架的条件。
其次,适合的才是好的。对于专注商业应用而非技术本身的客户,采用SmartClient这类不透明的Ajax框架,做应用更加快速和专业。看到有人哭诉采用dojo导致的种种bug和版本不兼容,使用专业和组件化的库、购买专业的服务,不是更明智吗。当然前提是要有足够的money。
声明,根据我本人的实际经验,在Ajax框架中,SmartClient无论在效果、功能、标准化和扩展性上,都算得上是比较好的框架。至于性能,我还没有足够的经验和数据来证明。
无论如何,我觉得Ext中途改变license,还是不太“讲究”的。看GWT-Ext的作者如何说http://jroller.com/sjivan/entry/update_on_future_direction_of1。
The first is the ethical aspect of a company choosing to change licenses on a dime and the questionable way they got to the point they have. There are several other excellent Javascript libraries like SmartClient that haven't gained the recognition they deserve and community support only because they were honest and consistent in their licensing model. While its no big deal to many to buy a (currently) reasonably priced commercial Ext license, supporting such a move from LGPL to GPL is an extremely bad precedent to set in the OSS community that has flourished on the basis of trust.
作者还提到SmartClient是一个非常出色的框架,只是没有被大家认可。
我现在也在用dojo 1.0做RIA,基本上只有一个页面,也就是初始载入慢一点(可以说我们会载入上百个js文件,本地大概10s左右),其他的都还好,包括性能都是可以接受的。另外我们想把载入js做成lazy load的方式,这样进一步提高初始速度。
至于命名冲突,这个在dojo应该管理的非常好了,跟java的package几乎等效,不明白LZ怎么会有冲突的问题,可能对dojo没吃透?
不过我也要承认Dojo有些东西确实考虑的很不周全,有很多bug,但是作为企业开发,你总不能指望一个开源框架把你的需要都做出来吧,总是要改点代码的吧?
发表评论
-
JQuery 文件上传收集
2009-08-14 12:25 14581http://www.webjx.com/javascript ... -
js 判断session过期,并注销
2009-07-14 15:38 12653客户希望如果没有操作,在30分钟后session过期,并且自动 ... -
Dojo 客户端性能优化
2008-06-05 12:05 5333Dojo 客户端调优的方式: 1. 编译合适的dojo文件。 ... -
体验dojo强大的grid控件——简单示例剖析
2007-12-11 15:38 12250Dojo 从 v1.0 开始引入了一个功能强大,快速,健壮的控 ... -
Dojo和Ajax 程序的浏览器History 控制
2007-12-07 16:56 3563web应用程序都面临浏览器上的history功能的困扰,前进, ... -
开始学习和使用Dojo
2007-12-07 14:38 96dojo现在最新的发行版本是1.0.1. 这个版本跟0.43的 ... -
Dojo, 从0.43 向1.0 迁移(二)widget 变化列表
2007-12-07 11:49 2004widget change list ... -
Dojo, 从0.43 向1.0 迁移(一)
2007-12-07 10:47 1691公司的项目4月份开始,我们选择了dojo,不为别的,因为他 ... -
用 javascript 处理 JSON
2007-11-07 11:07 72625因为JSON 是 javascript 的一个子集,所 ... -
JSON简介
2007-02-06 15:37 2160JSON (JavaScript Object Notatio ... -
JSON-RPC的简介
2007-02-06 13:28 2329JSON-RPC协议是一种远程过程调用协议,其设计的目 ...
相关推荐
DOjo中文使用手册 DOjo中文使用手册是DOjo Toolkit的详细使用手册,涵盖了DOjo的安装、使用、调试等方面的知识点。本手册适合新手和有经验的开发者,旨在提供一个全面的DOjo使用指南。 DOjo安装 DOjo提供了三种...
1. **模块系统**:Dojo使用AMD(Asynchronous Module Definition)模块定义协议,允许异步加载模块。`require`和`define`是两个关键函数,`require`用于加载模块,`define`用于定义模块。 2. **dojo/_base**:这是...
本教程将深入探讨Dojo框架的使用,帮助开发者更好地理解和应用这一工具。 首先,从`dojo-release-0.9.0.tar.gz`这个文件名可以看出,这是一个Dojo框架的早期版本,版本号为0.9.0。在学习过程中,了解不同版本间的...
通过使用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.require` 来声明所需的模块和包,类似于其他编程语言中的导入或使用语句。 `djConfig` 是 Dojo 的全局配置对象,允许你在页面加载前设置 Dojo 的行为。例如,`isDebug` 属性可以设置为 `...
在使用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控件的使用和入门心得 #### Dojo简介及其优势 Dojo是一个功能强大的JavaScript框架,专门设计用于简化富互联网应用(RIA)的开发。作为一种DHTML Toolkit,Dojo封装了大量的常用功能,旨在提高前端开发...
Dojo是一个非常强大的、面向对象的、开源的JavaScript工具箱,它为开发富客户端Ajax...学习完本书后,读者不仅能熟悉Dojo框架的使用,还能了解Ajax框架的工作原理,最重要的是,还能随心所欲地开发出自己的RIA应用。
在使用Dojo进行Ajax通信时,Dojo的`dojo.xhr`模块提供了与服务器端进行异步数据交换的接口。它可以处理各种HTTP请求类型,如GET、POST、PUT和DELETE,支持JSON、XML等多种数据格式,为开发者提供了统一的API。 Dojo...
首先,为了使用Struts Dojo插件,你需要在JSP页面的顶部添加`<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>`的taglib指令,这使得页面能够识别并使用Struts Dojo提供的标签。接着,确保将插件的jar文件复制到...
Dojo是一个用JavaScript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)),这也是为什么叫它a unified toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些、...
### 使用Dojo与JSON开发AJAX应用 #### Dojo与JSON简介 Dojo是一个开源的JavaScript框架,专门设计用于简化富互联网应用(RIA)的开发。它提供了丰富的UI控件和强大的工具集,使得开发者能够轻松创建高性能的前端...
本文档旨在帮助初学者快速掌握 Dojo 的基本用法,并通过几个实用示例介绍如何在项目中使用 Dojo。 #### 二、环境搭建与基本配置 为了能够开始使用 Dojo,首先需要确保项目中有正确的文件结构和必要的配置。根据...
【dojo练习】是一个关于JavaScript库Dojo Toolkit的学习资源集合,主要涵盖了Dojo的源码解析、工具使用以及一些实用API的教程。Dojo Toolkit是一个强大的前端开发框架,它提供了丰富的功能,包括DOM操作、事件处理、...
很不错的中文教程!文件太大分3个包! 目录如下: dojo精品中文教程 Dojo.1.0 Practice Note [1] ...使用 Dojo 工具包和 JSON-RPC 构建企业 SOA Ajax 客户端 利用Dojo实现拖动(Drag and Drop)效果
分三个包上传时,第三个包好像传不上去,我给整合了一下,打在一个包里上传了! dojo精品中文教程 ...使用 Dojo 工具包和 JSON-RPC 构建企业 SOA Ajax 客户端 利用Dojo实现拖动(Drag and Drop)效果
### Dojo常用方法总结 Dojo是一个开源的JavaScript框架,用于构建高性能的富客户端Web应用程序。它提供了一系列功能强大的工具和API,可以帮助开发者更轻松地处理DOM操作、AJAX调用、用户界面组件构建等任务。本文...
DOJO中文手册是针对JavaScript库Dojo的详细指南,源自中国的本地化版本,旨在帮助开发者理解和使用这个强大的工具包。Dojo是一个开源的DHTML工具集,由nWidgets、Burstlib和f(m)等多个项目的合并发展而来,因此被...