1、前言
   dojo利用ajax技术,基本实现的按需要下载js文件,估计与国内jsvm有类似功能(jsvm好久没关注了,不好乱说)。
   a、类库开发人员可以在dojo基础上开发自己的javascript类库。(dojo提供的够多的了,并不断扩大) 
   b、可以按照每个页面的需要,加载有限的类库。
   c、提供了很好的package机制。与java不同,采用dojo的包机制有一定写法要求。见后面说明。
   d、急剧缩小了类库大小。以前写过篇 (乱评prototype.js)中提到过。其实dojo不象我们想的那么庞大,只需要bootstrap1.js  hostenv_browser.js  bootstrap2.js实现底层代码,其它功能代码按需下载。很担忧propotype.js的不断庞大啊。
2、包加载机制源码解读
   其实包加载机制只用到bootstrap1.js  hostenv_browser.js  bootstrap2.js这三个文件。 大家可以看我 例子中 lang.htm ,动态的取lang.js,然后调用函数。使用上也比较简单。 例子中我加了些注释,欢迎大家拍砖。以下我说下个文件作用,以及dojo.require("");函数调用流程。
   bootstrap1.js 启动dojo的第一段代码,定义了些全局变量和全局函数。主要定义了dojo.hostenv”接口“,分别由hostenv_*.js来实现。dojo并不只用在网页环境中。
   hostenv_browser.js,浏览器环境下实现dojo.hostenv的某些方法。根据navigator对象判断当前浏览器的版本,类型,支持的插件....(见dojo.render对象)。还给window.onload()方法注册了dojo的几个方法。
   bootstrap2.js  定义了几个面向类库使用者的几个方法。主要有  dojo.require  dojo.provide 等。这些方法其实调用bootstrap1.js中的方法。
   当我们调用
   dojo.require("dojo.lang");时,有以下几个流程。
   a、dojo.hostenv.loadModule方法,在bootstrap1.js中,根据传入的参数如dojo.lang,转化成文件名  src/lang.js文件。(当然对于失败流程,如cache检查,异常处理等,这不具体细诉了)
   b、dojo.hostenv.loadPath方法,得到javascript文件的url,用xmlhttp得到js文件的内容,eval(s)执行,相当于引入了该文件。
   c、写入cache,加标识等后续方法。告诉dojo,我们加载过这个模块了。
   d、关于dojo的根文件路径比较麻烦,请读 hostenv_browser.js 中设置djConfig["baseScriptUri"] 部分。xmlhttp中js的url是  getBaseScriptUri()+getModulePrefix+lang.js(''+'src'+'/lang.js')  组成。
   具体dojo流程还是比较复杂的,还支持dojo.lang.*等,复杂的处理。
3、如何让dojo加载自己的类库
   我在附件中包括一个简单的例子(有中文问题)。有以下几个注意的地方。
   a、一定要引入bootstrap1.js  hostenv_browser.js  bootstrap2.js三个文件。dojo下载压缩包里的dojo.js包括了这三个文件,但也包括可许多你可能用不到的类库(lang io等)
   b、设置你的类库”包名“。如dojo.setModulePrefix('com.founder','javascript');说明com.founder包下文件都在javascript文件夹下建立。 你的类库必须放到javascript文件夹下面。
   c、你的类库文件。如javascript/myjs.js文件,必须首先声名 dojo.provide("com.founder.myjs");你的类库必须以com.founder.myjs开头。
   d、你的函数或变量必须定义为com.founder.myjs.fun。
   e、当你调用的时候,只需dojo.require("com.founder.myjs");。这样,myjs.js文件会下载到本地。可以直接应用了。

关于自己完成自己的类库,建议先多读读dojo的其他代码吧。这样才能更好的应用dojo包机制。应用了dojo,可能javascript的写法上与平时绝对不一样,但请注意,dojo千万别乱用,就google dojo中文文档很少,估计国内系统也没什么用的吧。

4、乱评dojo
a、javascript类库的文档实在不好弄,就dojo官方网站上转半天也找不到个系统的介绍,中文文档也很少。maillist到是挺活跃的。不看源代码能用好dojo我估计悬。
b、dojo野心极大,需要做的工作还很多。无形中加大dojo的应用难度。就象java中的spring,还好有EJB这个垫脚石。可dojo,推广难度不小啊。
c、下载包中压缩版dojo.js包括了../src/bootstrap1.js,../src/hostenv_browser.js,../src/bootstrap2.js,../src/lang.js,../src/string.js,../src/io.js,../src/dom.js,../src/io/BrowserIO.js,../src/event.js,../src/event/topic.js,../src/event/browser.js,../src/event/__package__.js,../src/alg/Alg.js,../src/alg/__package__.js,../src/uri/Uri.js,../src/math.js,../src/graphics/color.js,../src/style.js,../src/html.js,../src/math/curves.js,../src/animation/Animation.js,../src/animation/__package__.js,../src/fx/html.js,../src/fx/__package__.js,../src/graphics/htmlEffects.js,../src/graphics/__package__.js

这么多个文件,140k。其实也不大,但包括了很多模块。估计dojo的定位就是开发"One page One Application"吧。一般的web应用程序prototype.js就够了。
d、dojo上手相对较难,不象prototype.js。(虽然它们不是一类型的项目,但我喜欢拿一块比较,原因之一是它们没有服务器端的功能)。我相信dojo提供的功能能够覆盖prototype.js,或者我们可以自己把prototype.js移植到dojo.
e、
5、例子说明
   附件中例子我在源代码中加了注释和debug,只供大家参考。

附件