??xml version="1.0" encoding="utf-8" standalone="yes"?> 现在我们发布servlet在线压羃版本。无需安装Q在U压~,l非Java用户一个更加便L使用方式?/p>
目主页Q?a target="blank">http://www.xidea.org/project/jsa/
仍外Qؓ了避免服务器资源被恶意滥用,我们默认启用了图片验证,服务频率限制{保护设|?
查看代码Q?
仔细阅读q两个函C码,发现它是通过XMLHttpRequest对象同步装蝲脚本资源的(对IEQ它采用userdata~存优化Q。而这必将D一U完全阻塞问题(q种问题我在仍外一blog上描q过Q?a target="blank">http://jindw.javaeye.com/blog/66702Q?/p>
说到d问题Q我惛_家可能会以ؓ只是一U下载gq,其实不然?/strong>
我对q个问题可以说深有体会,起初Q在构徏JSI1的项目站Ҏ。因为网站放在sourceforge上,讉K数度不是一般的慢,几个单的例子Q浏览器p完全d好几妙钟。正是厌恶这U完全阻塞的现象Q我才开发了JSI2?/p>
事实上,现在的一堆堆js框架中,采用XHR同步装蝲资源的有不少QJSVM、dojo、a9engine、hax的piesQ其中JSVMQ?
dojo都提供打包工P可能装载的脚本打包到启动文件中Q所以也可以避免XHR同步h。不q这样也失M部分动态装载的意义了?/p>
MQ我非常讨厌q种完全d现象Q认个严重媄响用户体验?
]]>
q多给一些非javE序员带来点不便?/p>
现在的在U压~服务器?a target="blank">Seaprince提供?
Ƣ迎更多有空闲服务器资源的朋友安装JSA在线服务Q我在jsa目主页提供链接Q方便大家用?/p>
l用户带来些不便Q敬误解?/p>
<script type="text/javascript">Include("Csdn.Blog.ShowmeDataDeal");</script>
window.Include=function(namespace, path)
{
..
};
S.load=function(namespace, path)
{
}
下蝲延迟不是完全dQ浏览器依然可以响应用户事g。而同步XHRhd是一U完全的d?
览器在脚本q行与事件响应共用同一个线E(我的猜测Q。Q何脚本尚在运行时Q包括被同步XHRhd的时_Q浏览器无法响应Q何用户事Ӟ无法拖放H口、切换标{、重画页面等{,像E序M一P。与普通的下蝲延迟造成的阻塞,感觉明显不同?/p>
可能也有些主观因素把Q希望听听大家的看法?
]]>
按照ECMA262定义,上面q段脚本{h于:
在刚刚发布的JSA1beta上,q不能处理这个问题(新版本将q周内发布)。同Ӟ鉴于q种语法在不同浏览器上表C同,q是量避免使用Q这点上Q我个hq是更喜Ƣie的方式)?/p>
var语句Q?/strong>
怪癖的代?
常见错误有:
太常用了Q但是,没有注意q是很容易出问题?
var 用来声明全局或函数变量,但是Q只是申明,重复x也不能置I,范围是函数或者全局I间Q位|在函数或脚本顶端,与块无关Q这些与常用高语言区别很大?/p>
function test(){
variable =1;//别担心,不会改动全局变量vaiable
//do ..
var vaiable;//变量x无顺序(一律置ӞQ只是赋值有序?nbsp;
}
while(!flag){//没准那个角落里面已经l当前函数内同名变量l赋g惨?nbsp;
//..
}
]]>
装饰器规范简介:
装饰器指的是所有拥有decorate成员Ҏ的类。一般来_可将一l装饰器归ؓ同一个包中(太复杂的装饰器,可将具体逻辑攄在其他包中)Q能后在配置文g中定义装饰包?br>
scripts/config.js $JSI.addDecoratorProvider("org.xidea.decorator","xidea","*");
装饰器类包含两个Ҏbefore、docorate分别在遍历前Q子节点未装饎ͼ和遍历后Q子节点装饰完成Q调用?br>
同时Q装饰引擎遍历时q将注入如下三个属性:
JSI现有装饰器集合简?/h1>
目前JSI2最高版?.0预览?(2007-04-16)包含如下装饰器:
日期选择控gQ参照xul datepicker标签Q支持弹出方?默认?type='pop')Q和内嵌?type='grid')
~辑器控Ӟ参照xul editor标签
Spinner控gQwindow旉日期理中,q䆾调节的控ӞQ参照backbase ?Spinner标签
TabBox(标签?控gQ参照xul tabbox标签
代码语法高亮昄控gQ参照SyntaxHighlighter的显C风?/li>
片断包含标签Q支持xpath选取文档片断Q支持xslt转换
q些装饰器的演示见:
http://www.xidea.org/project/jsi/decorator/index.html
目前JSI自带的装饰器不够丰富Q而且都还是初U阶D,不够完善。现在发布的q些装饰器,主要是ؓ了演CJSI的工作方式,~码风格Q希望能吸引W三方团队、公司在q个基础上开发出自己的更加实用的装饰器集合?br>
JSI及其装饰引擎采用LGPL协议。可以商业应用,当能Q更希望能开源?br>
目前我一Z力,开发一套完整的装饰器,需时日Q这ơ将q个半成品拿出来演示Q主要是Z展示一下jsd的风|希望能吸引其他开发者,共同参与q个工程Q有兴趣丰富JS自带I装饰器集合的|友Q请msn与我联系Qjindw◎xidea。org
]]>
代码CZQ?/h2>
来一个复杂一点的完整的例?以日期选择控g的演C页面ؓ?br>
面上有: 标签装饰器QTabBox….Q、源代码高亮昄装饰器(CodeQ、日期选择装饰器(DatePickerQ、包含装饰器QIncludeQ?br>
<input type="text" name="test2" />
</d:datepicker>
<textarea name='editorText'>This is some <strong>sample text</strong>. You are using <a
href="http://www.fckeditor.net/">FCKeditor</a>.</textarea>
</d:editor>
<input type="text" name="test2" value='0' />
</d:spinner>
<textarea>alert(‘Hello World’)</textarea>
</d:code>
<d:tabs>
<d:tab>tab1</d:tab>
<d:tab>tab2</d:tab>
<d:tab>tab3</d:tab>
</d:tabs>
<d:tabpanels>
<d:tabpanel>content1</d:tabpanel>
<d:tabpanel>content2</d:tabpanel>
<d:tabpanel>content3</d:tabpanel>
</d:tabpanels>
</d:tabbox>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:d="http://www.xidea.org/taglib/decorator" xml:lang="zh_CN"
lang="zh_CN">
<head>
<script src="../scripts/boot.js"></script>
<title>DatePicker CZ</title>
</head>
<body>
<h2>DatePicker CZ</h2>
<!-- 开始标{N装饰?nbsp;-->
<d:tabbox>
<d:tabs>
<d:tab>效果</d:tab>
<d:tab>代码</d:tab>
</d:tabs>
<d:tabpanels>
<d:tabpanel>
<!-- 开始日期装饰器(内嵌? -->
<d:datepicker type='grid'>
<input type="text" name="test1" />
</d:datepicker>
<!-- 开始日期装饰器(弹出? -->
<d:datepicker>
<input type="text" name="test2" />
</d:datepicker>
</d:tabpanel>
<d:tabpanel>
<!-- 开始代码高亮显C?nbsp;-->
<d:code language="xml">
<textarea>
<!-- 开始日期装饰器(内嵌? -->
<d:datepicker type='grid'>
<input type="text" name="test1" />
</d:datepicker>
<!-- 开始日期装饰器(弹出? -->
<d:datepicker>
<input type="text" name="test2" />
</d:datepicker></textarea>
</d:code>
</d:tabpanel>
</d:tabpanels>
</d:tabbox>
<select style="margin-left:120px"><option>弹出的datepicker 可覆盖IE select</option></select>
<hr />
<!-- 开始Include装饰?包含装饰器菜?nbsp;-->
<d:include url='menu.xml' xslt="menu.xsl"></d:include>
</body>
</html>
装饰l果Q?/h2>
云想衣裳花想容-QJSIlg模型介绍Q二Q已l发布,那里有装饰过E及其原理的介绍Q?/font>
http://www.javaeye.com/topic/71425
]]>
JSI针对每一个装载的脚本都有完全独立的执行上下文。所以这个问题能?/span>JSI上彻底解冟?/span>
下面的例子,我们在同一个页面上同时使用Scriptaculous?/span> jQuery cd。证实一?/span>JSI隔离冲突功能?/span>
CZ面Q?/span>hello-jquery-aculo.htmlQ:
onclick="slidePanel('menu_block1')"q个事g函数在我们点击面板标题时触发,能后会调用Scriptaculous Effect的具体实现去实现我们需要的滑动折叠功能?br>
http://jsintegration.sourceforge.net/example/code.html
http://www.xidea.org/project/jsi/example/code.html
JSI 导入函数Q?function $import(path, callbackOrLazyLoad, target )
我主要说一下模拟这个事件时候容易出现的问题?/p>
对于FFQOpera9Q原生DOMContentLoad支持Q就不说了,最头疼的是IE?
我最初考虑q个问题的时候,惛_的是document的readyState属性?
L一下Dojo的源码,发现它也是基于这个属性去做的Q那Ӟ我基本就认准了这个方法?
于是再后来JSI1和JSI2早期的预览版本中Q都是基于这个属性做的,后来Q有个朋友向我反应,说JSI的装饰引擎在IE上启动比FF慢很多,我当时就猜测Q是否是q个DOMContentLoad的问题?/p>
l过试Q发玎ͼ实QreadyState必须{待囄装蝲完成之后才能|ؓcomplete?
于是到网上搜索一下其他办法,最l?Dean Edwards的blog上描q的一个基于script defer属性的解决办法胜出Qhttp://dean.edwards.name/weblog/category/dom/onload/
不过Q用document.write打印一D脚本,我真的不喜欢Q(
在评论里面我们可以看C些其他的Q有?readyState == 'complete' ? readyState==‘interactive’q个状态可以准模拟DOMContentLoad。我开始简单测试一下,貌似可行Q但是后来发? readyState==‘interactive’可能受alert{函数媄响,是_一般情况下QreadyState== ‘interactive’Ӟdom是装载完了的Q但是,当你文档装蝲q程中,调用了alert函数Q那么,readyState提前置? ‘interactive’?/p>
MQ目前来_我知道的Q只有两个办法可以真正实现IE上模拟DOMContentLoad
再说一下JSI的DOMContentLoad实现的用接口?/p>
js.html.EventUtil.addDOMReadyListener(<Function>listener ,<boolean>runAnyCase )
W二个参数用于确保listener 在Q何时候都会被调用QFF DOMContentLoad事g如果在事件发生之后设|listener是无效的Q?
Z试l果更显客观Q我选择了第三方cd的装载测试:
'com.yahoo.yui.*',
'net.conio.prototype.*',
'net.fckeditor.*',
'org.jquery.*',
'us.aculo.script.*'
?2个脚本文Ӟ对于JSI来说q有诺干包定义文Ӟ?/p>
q行旉试
试脚本理后对新能的媄?影响因素有:全局变量和局部变量的查找旉差异Qeval的脚本和script标记直接插入的脚本的可能差异。(q?
个测试不h普遍性,q里我主要是试了一下浏览器对局部变量的讉K速度【JSI里面讉K变量都是装蝲单元内的局部变量】,所以故意测试了大量局部变量访
问的操作Q?
试面见:test/runtime-eff-test.html
上面的基数太,随机误差太大Q调整原始数据从新测试一遍jsiTime和scriptTime
有个奇怪的问题QJSI在装载类库时Q与传统模式相比Q肯定增加了些额外的q算Q但是,貌似JSI的同步装载模式下Q装载脚本的耗时比传l模式还(IE 表现明显Q?ZQ?/span>
ȝQ?/strong>
JSI的装载性能表现不错Q完全不必计较?
托管代码的运行性能也没有太大区别,不过Q因为。JSI托管脚本使用的变量基本都是装载单元内的局部变量(本地声明变量Q或者外部依赖的引用或值拷贝)Q所以,对于FFq类局部变量比全局变量讉K速度快不的解释引擎QJSI托管脚本可以辑ֈ更好的运行效率?/p>
Ƣ迎大家对这奇怪的现象提出自己的猜惻I我稍后脓出我Ҏ问题的看法^_^
]]>
JSI 是一?开攄?strong>无R?/strong>?脚本库管理框Ӟ内核不提供Q何具体功能,有一些功能子目Q如|页装饰引擎?/p>
更多信息h看:http://www.xidea.org/project/jsi/
q次发布的JSI2Alpha相对于以前的预览版本Q做了一ơ全面的重构Q同时对API做了些简化?/p>
我们会尽量将JSI做成与具体功能无养I专著于脚本管理)?/strong>
对于js.*.*q个cdQ做了些_?
只保留下列元?/p>
发布文g说明Q?
自该版本启,source目录不再打包?
但是在scripts目录下新增boot-with-source.js文gQ该文g中包含全部源代码的数据?
里面~码的源代码可以通过我们?a target="blank">文档工具查看。让大家习惯一下这个工L使用Q)
JSA1betaQ增加了对JSI2的编译支持,同时对于普通脚本的压羃Q也增加了一些功能:
1. ant task 增加多文件分l合q?
2. swing ui 修正文g~码的bug?/p>
下蝲Q?
javaeye group: http://jsi.group.javaeye.com/shares
sourceforge: <pȝ最q好像有问题Q我的文件一直没能上传成?要过一D|间再?gt; 。。。。?
q个API也可以脱JSI使用Q只是,在编写的时候,因ؓ有了JSI的保护,我用了不少内部变量Qؓ避免可能的冲H,做了如下处理?