﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-jindw的blog-随笔分类-JavaScript</title><link>http://www.blogjava.net/jindw/category/22725.html</link><description>关注：&lt;a href="http://www.xidea.org/project/jsi/index.html"&gt;JSI 无侵入的脚本管理框架&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 14 Oct 2007 20:31:10 GMT</lastBuildDate><pubDate>Sun, 14 Oct 2007 20:31:10 GMT</pubDate><ttl>60</ttl><item><title>运动曲线研究(缓动效果)</title><link>http://www.blogjava.net/jindw/archive/2007/10/14/152793.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Sun, 14 Oct 2007 13:14:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/10/14/152793.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/152793.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/10/14/152793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/152793.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/152793.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 刚刚学习了一下网页动画中上的缓动效果，分享一下学习心得。缓动曲线的概念：缓动曲线是一个0为起点的连续函数曲线，x轴表示时间变化，y轴表示位移变化。曲线的斜率反映出运动的数度。缓动效果在Flash动画中比较常见，用于模拟一些现实中常见的运动轨迹，或者制造一些超绚的效果。而且新版本的Flash中，内置了一些常用的缓动曲线函数。可惜,Flash的这些曲线函数不是开源的...&nbsp;&nbsp;<a href='http://www.blogjava.net/jindw/archive/2007/10/14/152793.html'>阅读全文</a><img src ="http://www.blogjava.net/jindw/aggbug/152793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-10-14 21:14 <a href="http://www.blogjava.net/jindw/archive/2007/10/14/152793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> JSA在线压缩程序发布</title><link>http://www.blogjava.net/jindw/archive/2007/08/22/138646.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 22 Aug 2007 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/08/22/138646.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/138646.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/08/22/138646.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/138646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/138646.html</trackback:ping><description><![CDATA[<p><a href="http://www.xidea.org/project/jsa/" target="blank">JSA</a>这个压缩工具，是java编写的，需要安装java运行环境。
<br>这多少给一些非jav程序员带来点不便。</p>
<p>现在我们发布servlet在线压缩版本。无需安装，在线压缩，给非Java用户一个更加便捷的使用方式。</p>
<p>项目主页：<a href="http://www.xidea.org/project/jsa/" target="blank">http://www.xidea.org/project/jsa/</a>
<br>现在的在线压缩服务器由<a href="http://blog.eaxi.com/" target="blank">Seaprince</a>提供。
<br>欢迎更多有空闲服务器资源的朋友安装JSA在线服务，我将在jsa项目主页提供链接，方便大家使用。</p>
<p>仍外，为了避免服务器资源被恶意滥用，我们默认启用了图片验证，服务频率限制等保护设置。
<br>给用户带来些不便，敬请谅解。</p>
<br><img src ="http://www.blogjava.net/jindw/aggbug/138646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-08-22 16:28 <a href="http://www.blogjava.net/jindw/archive/2007/08/22/138646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>脚本装载时一个似乎应该有所重视的问题。 </title><link>http://www.blogjava.net/jindw/archive/2007/08/12/136244.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Sun, 12 Aug 2007 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/08/12/136244.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/136244.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/08/12/136244.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/136244.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/136244.html</trackback:ping><description><![CDATA[<p>今天无意间打开了一个CSDN上的个人blog，发现窗口无法拖动，Firefox的标签页也无法切换。</p>
<p>查看代码：
<br>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">Include(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">Csdn.Blog.UserOnline</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">Include(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">Csdn.Blog.ShowmeDataDeal</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span></div>
<p>&#160;</p>
<script>render_code();</script>
看到Include函数，马上可以想到，它很可能使用了动态包含脚本的设计。
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">http://blog.csdn.net/scripts/jsframework.js&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">window.Include</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(namespace,&nbsp;path)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">..&nbsp;&nbsp;<br>};&nbsp;&nbsp;<br>S.load</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(namespace,&nbsp;path)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;&nbsp;<br>}&nbsp;&nbsp;</span></div>
<br><script>render_code();</script>
<p>仔细阅读这两个函数代码，发现它是通过XMLHttpRequest对象同步装载脚本资源的（对IE，它采用userdata缓存优化）。而这必将导致一种完全阻塞问题（这种问题我在仍外一篇blog上描述过：<a href="http://jindw.javaeye.com/blog/66702" target="blank">http://jindw.javaeye.com/blog/66702</a>）。</p>
<p><strong style="color: red;">说到阻塞问题，我想大家可能会以为只是一种下载延迟，其实不然。</strong><span style="color: red;">
</span><br>下载延迟不是完全阻塞，浏览器依然可以响应用户事件。而同步XHR请求阻塞是一种完全的阻塞。
<br>浏览器在脚本运行与事件响应共用同一个线程（我的猜测）。任何脚本尚在运行时（包括被同步XHR请求阻塞的时间），浏览器将无法响应任何用户事件（无法拖放窗口、切换标签、重画页面等等，就像程序死了一样）。与普通的下载延迟造成的阻塞，感觉明显不同。</p>
<p>我对这个问题可以说深有体会，起初，在构建JSI1的项目站点时。因为网站放在sourceforge上，访问数度不是一般的慢，几个简单的例子，浏览器就要完全阻塞好几妙钟。正是厌恶这种完全阻塞的现象，我才开发了JSI2。</p>
<p>事实上，现在的一堆堆js框架中，采用XHR同步装载资源的有不少，JSVM、dojo、a9engine、hax的pies；其中JSVM，
dojo都提供打包工具，将可能装载的脚本打包到启动文件中，所以也可以避免XHR同步请求。不过这样也就失去了部分动态装载的意义了。</p>
<p>总之，我非常讨厌这种完全阻塞现象，认为这个严重影响用户体验。
<br>可能也有些主观因素把，希望听听大家的看法。
</p>
<br> <img src ="http://www.blogjava.net/jindw/aggbug/136244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-08-12 22:22 <a href="http://www.blogjava.net/jindw/archive/2007/08/12/136244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS几处怪癖的语义</title><link>http://www.blogjava.net/jindw/archive/2007/06/30/127243.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Sat, 30 Jun 2007 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/30/127243.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/127243.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/30/127243.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/127243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/127243.html</trackback:ping><description><![CDATA[<p><strong>带ID的函数表达式：
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;"><strong>var</strong></span><span style="color: #000000;"><strong>&nbsp;fn&nbsp;</strong></span><span style="color: #000000;"><strong>=</strong></span><span style="color: #000000;"><strong>&nbsp;</strong></span><span style="color: #0000ff;"><strong>function</strong></span><span style="color: #000000;"><strong>&nbsp;fnid(){};&nbsp;&nbsp;</strong></span></div>
</strong></p>
<script>render_code();</script>
<p>按照ECMA262定义,上面这段脚本等价于：
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">with</span><span style="color: #000000;">({fnid:</span><span style="color: #0000ff;">null</span><span style="color: #000000;">}){&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;fn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fnid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){};&nbsp;&nbsp;<br>}&nbsp;&nbsp;</span></div>
<p>&nbsp;</p>
<script>render_code();</script>
<br>注意：fnid在with外是不可见的，但是IE没有严格遵守ECMA规范(同样的情况发生在catch语法上)。在IE上相当于：
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;fnid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){};&nbsp;&nbsp;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;fn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fnid;&nbsp;&nbsp;</span></div>
<br>
<script>render_code();</script>
<p>在刚刚发布的JSA1beta上，还不能处理这个问题（新版本将这周内发布）。同时，鉴于这种语法在不同浏览器上表现不同，还是建议尽量避免使用（这点上，我个人还是更喜欢ie的方式）。</p>
<p><strong>var语句：</strong>
<br>太常用了，但是，没有注意还是很容易出问题。
<br>var 用来声明全局或函数变量，但是，只是申明，重复申明也不能置空，范围是函数或者全局空间，位置在函数或脚本顶端，与块无关，这些与常用高级语言区别很大。</p>
<p>怪癖的代码
<br>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;vaiable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;&nbsp;<br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;test(){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;variable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;">别担心，不会改动全局变量vaiable&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">do&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">..&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;vaiable;</span><span style="color: #008000;">//</span><span style="color: #008000;">变量申明无顺序（一律置顶），只是赋值有顺序。&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">}&nbsp;&nbsp;</span></div>
<p>&nbsp;</p>
<script>render_code();</script>
<p>常见错误有：
<br>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;flag;</span><span style="color: #008000;">//</span><span style="color: #008000;">这里可能有人（包括我自己）喜欢自做聪明的利用一下变量的初始值undefined&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">while</span><span style="color: #000000;">(!flag){</span><span style="color: #008000;">//</span><span style="color: #008000;">没准那个角落里面已经给当前函数内同名变量给赋值了就惨了&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"><img src="http://www.blogjava.net/Images/dot.gif">..&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">}&nbsp;&nbsp;</span></div>
<p>&nbsp;</p>
<script>render_code();</script>  <img src ="http://www.blogjava.net/jindw/aggbug/127243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-30 16:47 <a href="http://www.blogjava.net/jindw/archive/2007/06/30/127243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]云想衣裳花想容－－JSI组件模型介绍（二）</title><link>http://www.blogjava.net/jindw/archive/2007/06/27/126498.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 27 Jun 2007 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/27/126498.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126498.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/27/126498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126498.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126498.html</trackback:ping><description><![CDATA[<h1>装饰引擎简介：</h1>
系统默认的装饰引擎为：org.xidea.decorator.DecoratorEngine。<br>
JSI装载后，将做如下操作：<br>
<ol>
    <li>判断有无装饰器命名空间声明（xmlns:d= "http://www.xidea.org/taglib/decorator"）</li>
    <li>若有，将在文档装载结束后，启动装饰引擎，初始化当前可用的装饰提供者表。（装饰提供者是一个JavaScript包，在注册这种装饰包时可同时指定他的别名，别名*表示默认包）</li>
    <li>遍历当前文档，凡是该命名空间的节点，都被看作需要装饰的元素。若当前文档存在装饰元素，启用遮罩（关机效果），页面将不可操作（仍可查阅）。</li>
    <li>查找装饰元素对应的装饰类（通过tagName判断类名），采用异步方式动态装载这些装饰器类（不会装载到全局空间），并更新当前进度信息，同时设置装饰器之间的关系（parent,children）。</li>
    <li>以深度遍历的方式遍历这些节点，注册组件（以后可以通过$JSI.getComponent函数获取装饰器对象），依次执行他们的before操作，和decorate操作。</li>
    <li>完成装饰，取消遮罩，页面进入可用状态。</li>
</ol>
<h1>装饰器规范简介：</h1>
装饰器指的是所有拥有decorate成员方法的类。一般来说，可将一组装饰器归为同一个包中（太复杂的装饰器，可将具体逻辑放置在其他包中），能后在配置文件中定义装饰包。<br>
scripts/config.js&nbsp;&nbsp; $JSI.addDecoratorProvider("org.xidea.decorator","xidea","*");<br>
<br>
装饰器类包含两个方法before、docorate分别在遍历前（子节点未装饰）和遍历后（子节点装饰完成）调用。<br>
<br>
同时，装饰引擎遍历时还将注入如下三个属性：<br>
<ol>
    <li>parent：父装饰器</li>
    <li>children：子装饰器集合</li>
    <li>attributes：装饰器属性集对象（只有一个成员函数：get(attrName)&nbsp; ）</li>
</ol>
<h1>JSI现有装饰器集合简介</h1>
目前JSI2最高版本2.0预览版 (2007-04-16)包含如下装饰器：<br>
<ol>
    <li>DatePicker<br>
    日期选择控件，参照xul datepicker标签，支持弹出方式(默认值 type='pop')，和内嵌式(type='grid')</li>
    <li>Editor<br>
    编辑器控件，参照xul editor标签</li>
    <li>Spinner<br>
    Spinner控件（window时间日期管理中，年份调节的控件），参照backbase 的 Spinner标签</li>
    <li>TabBox、Tabs、Tab、TabPanels、TabPanel<br>
    TabBox(标签页)控件，参照xul tabbox标签</li>
    <li>&nbsp;Code<br>
    代码语法高亮显示控件，参照SyntaxHighlighter的显示风格</li>
    <li>Include<br>
    片断包含标签，支持xpath选取文档片断，支持xslt转换<br>
    </li>
</ol>
<br>
这些装饰器的演示见：<br><a  href="http://www.xidea.org/project/jsi/decorator/index.html">
http://www.xidea.org/project/jsi/decorator/index.html</a><br>
<br>
目前JSI自带的装饰器不够丰富，而且都还是初级阶段，不够完善。现在发布的这些装饰器，主要是为了演示JSI的工作方式，编码风格，希望能吸引第三方团队、公司在这个基础上开发出自己的更加实用的装饰器集合。<br>
<br>
JSI及其装饰引擎采用LGPL协议。可以商业应用，当能，更希望能开源。<br>
<br>
目前就我一人之力，开发一套完整的装饰器，尚需时日，这次将这个半成品拿出来演示，主要是为了展示一下jsd的风格，希望能吸引其他开发者，共同参与这个工程，有兴趣丰富JS自带I装饰器集合的网友，请msn与我联系：jindw◎xidea。org<img src ="http://www.blogjava.net/jindw/aggbug/126498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-27 10:35 <a href="http://www.blogjava.net/jindw/archive/2007/06/27/126498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> [导入]云想衣裳花想容－－JSI组件模型介绍（一）</title><link>http://www.blogjava.net/jindw/archive/2007/06/27/126492.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 27 Jun 2007 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/27/126492.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126492.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/27/126492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126492.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126492.html</trackback:ping><description><![CDATA[JSI组件模型是一种用来装饰简单html元素的框架，使用简单的xml标记，标识其装饰行为，比如将一个普通的input装饰成一个日期输入控件，将一
个html ul标记装饰成菜单或树，将一个textarea装饰成一个代码语法高亮显示区域，或一个wysiwyg html编辑器。<br>
JSI启动后将自动检查decorator标记，构建层次结构，自动做相关类的寻找、导入和装饰操作；实现零脚本代码的web富客户端编程。<br>
<br>
<h2>代码示例：</h2>
<ol>
    <li>日期选择器 (DatePicker):<br>
    <br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="test2"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>编辑器示例 (Editor):<br>
    <br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:editor</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">textarea&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">='editorText'</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">This&nbsp;is&nbsp;some&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">strong</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">sample&nbsp;text</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">strong</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">.&nbsp;You&nbsp;are&nbsp;using&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="http://www.fckeditor.net/"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">FCKeditor</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">.</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:editor</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>Spinner控件（Spinner 类似window时间日期管理中，年份调节的控件）:<br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:spinner&nbsp;</span><span style="color: #ff0000;">start</span><span style="color: #0000ff;">='0'&nbsp;</span><span style="color: #ff0000;">end</span><span style="color: #0000ff;">='8'&nbsp;</span><span style="color: #ff0000;">step</span><span style="color: #0000ff;">='2'</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="test2"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">='0'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:spinner</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>客户端包含(Include):<br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:include&nbsp;</span><span style="color: #ff0000;">url</span><span style="color: #0000ff;">='menu.xml'&nbsp;</span><span style="color: #ff0000;">xslt</span><span style="color: #0000ff;">="menu.xsl"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">d:include</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>代码语法高亮显示控件(Code):<br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:code&nbsp;</span><span style="color: #ff0000;">language</span><span style="color: #0000ff;">="js"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">alert(&#8216;Hello&nbsp;World&#8217;)</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:code</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    </li>
    <li>标签页控件(TabBox参照xul tabbox标签):<br>
    <br>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabbox</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabs</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">tab1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">tab2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">tab3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabs</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanels</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">content1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">content2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">content3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanels</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabbox</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></div>
    <br>
    <br>
    </li>
    <li> 综合示例:</li>
</ol>
来一个复杂一点的完整的例子,以日期选择控件的演示页面为例<br>
页面上有: 标签页装饰器（TabBox&#8230;.）、源代码高亮显示装饰器（Code）、日期选择装饰器（DatePicker）、包含装饰器（Include）<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Strict//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://www.w3.org/1999/xhtml"</span><span style="color: #ff0000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;xmlns:d</span><span style="color: #0000ff;">="http://www.xidea.org/taglib/decorator"</span><span style="color: #ff0000;">&nbsp;xml:lang</span><span style="color: #0000ff;">="zh_CN"</span><span style="color: #ff0000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;lang</span><span style="color: #0000ff;">="zh_CN"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">DatePicker&nbsp;示例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">DatePicker&nbsp;示例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始标签页装饰器&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabbox</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabs</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">效果</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">代码</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tab</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabs</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanels</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始日期装饰器(内嵌式)&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:datepicker&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">='grid'</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="test1"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始日期装饰器(弹出式)&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="test2"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:datepicker</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始代码高亮显示&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:code&nbsp;</span><span style="color: #ff0000;">language</span><span style="color: #0000ff;">="xml"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">!--&nbsp;开始日期装饰器(内嵌式)&nbsp;--</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">d:datepicker&nbsp;type='grid'</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">input&nbsp;type="text"&nbsp;name="test1"&nbsp;/</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">/d:datepicker</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">!--&nbsp;开始日期装饰器(弹出式)&nbsp;--</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">d:datepicker</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">input&nbsp;type="text"&nbsp;name="test2"&nbsp;/</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&amp;lt;</span><span style="color: #000000;">/d:datepicker</span><span style="color: #ff0000;">&amp;gt;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:code</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabpanels</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">d:tabbox</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">select&nbsp;</span><span style="color: #ff0000;">style</span><span style="color: #0000ff;">="margin-left:120px"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">option</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">弹出的datepicker&nbsp;可覆盖IE&nbsp;select</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">option</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">select</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">hr&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;开始Include装饰器,包含装饰器菜单&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">d:include&nbsp;</span><span style="color: #ff0000;">url</span><span style="color: #0000ff;">='menu.xml'&nbsp;</span><span style="color: #ff0000;">xslt</span><span style="color: #0000ff;">="menu.xsl"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">d:include</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span></div>
<br><span></span>
<div class="dp-highlighter">
</div>
<br>
<br>
<h2> 装饰结果：</h2>
<br>
<img src="http://www.blogjava.net/images/blogjava_net/jindw/dp.JPG" alt=""><br>
<br>
<br>
<br>
<font color="#ff0000">云想衣裳花想容－－JSI组件模型介绍（二）已经发布，那里有装饰过程及其原理的介绍：</font><br>
<a href="http://www.javaeye.com/topic/71425">http://www.javaeye.com/topic/71425</a><br>
<h1><br>
</h1><img src ="http://www.blogjava.net/jindw/aggbug/126492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-27 10:24 <a href="http://www.blogjava.net/jindw/archive/2007/06/27/126492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入] 百花齐放 日月同辉――采用JSI解决不同类库间的冲突  </title><link>http://www.blogjava.net/jindw/archive/2007/06/26/126241.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Mon, 25 Jun 2007 23:46:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/26/126241.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126241.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/26/126241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126241.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span style="font-family: 宋体;">众所周知，</span> <span lang="EN-US">Scriptaculous</span><span>所依赖的</span><span lang="EN-US">Prototype</span><span>库与</span><span lang="EN-US">jQuery</span><span>存在冲突。所以同时使用比较困难。</span></p>
<p class="MsoNormal"><span lang="EN-US">JSI</span><span>针对每一个装载的脚本都有完全独立的执行上下文。所以这个问题能在</span><span lang="EN-US">JSI</span><span>上彻底解决。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">下面的例子，我们将在同一个页面上同时使用</span><span lang="EN-US">Scriptaculous</span><span>和</span><span lang="EN-US"> jQuery </span><span>类库。证实一下</span><span lang="EN-US">JSI</span><span>隔离冲突功能。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">示例页面（</span><span lang="EN-US">hello-jquery-aculo.html</span><span>）：</span></p>
<span style="font-family: 宋体;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Hello&nbsp;jQuery&nbsp;And&nbsp;Scriptaculous</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;加入引导脚本&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp; <br></span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">导入jQuery&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;"></span><span style="background-color: #f5f5f5; color: #000000;"><br>$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">org.jquery.$</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);&nbsp; <br></span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">导入Scriptaculous&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;"></span><span style="background-color: #f5f5f5; color: #000000;"><br>$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">us.aculo.script.Effect</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);&nbsp;&nbsp;<br>&nbsp; <br>&nbsp;&nbsp;<br>$(document).ready(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){&nbsp; <br>&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">使用jQuery添加一段问候语&nbsp; </span><span style="background-color: #f5f5f5; color: #000000;"> <br>&nbsp;&nbsp;$(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&lt;p&nbsp;id='helloBox'&nbsp;style='background:#0F0;text-align:center;font-size:40px;cursor:pointer;'&gt;Hello&nbsp;jQuery&nbsp;And&nbsp;Scriptaculous&lt;/p&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; .appendTo('body');&nbsp;&nbsp;<br>&nbsp; $('#helloBox').ready(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; </span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">使用Scriptaculous高亮显示一下刚才添加的内容&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="background-color: #f5f5f5; color: #0000ff;">new</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;Effect.Highlight('helloBox');&nbsp;&nbsp;<br>&nbsp; }).click(</span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; </span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">当用户单击该内容后使用jQuery实现渐出&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;"><br></span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;&nbsp; $('#helloBox').fadeOut();&nbsp;&nbsp;<br>&nbsp; });&nbsp;&nbsp;<br>&nbsp;});&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp; &nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp; &nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">文档装载后，jQuery将在后面添加一段问候语；并使用Scriptaculous高亮显示（Highlight）；在鼠标点击后在使用jQuery渐出（fadeOut）。</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;</span></div>
<br>
</span><img src ="http://www.blogjava.net/jindw/aggbug/126241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-26 07:46 <a href="http://www.blogjava.net/jindw/archive/2007/06/26/126241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入] 海纳百川 有容乃大――采用JSI封装、集成第三方类库   </title><link>http://www.blogjava.net/jindw/archive/2007/06/25/126038.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Mon, 25 Jun 2007 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/25/126038.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126038.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/25/126038.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126038.html</trackback:ping><description><![CDATA[Java的成功，离不开它那个庞大的类库，不单是sun的类库，很多细节的实现都取自第三方（如xml解析采用Apache的实现）。<br>
<br>JSI暂时不大算编写丰富的公共API，但是我们可以集成其他成熟的类库，同时隔离他们的依赖，隔离各个脚本的执行上下文，消除命名冲突的危险。<br>
<br>
这里我们详细介绍一个复杂一点的实例：类似Windows XP文件浏览器左侧的滑动折叠面板(任务菜单)效果。<br>
<br>
我们先集成Scriptaculous Effect类库，并且在这个基础上按我个人的习惯对一个面板折叠效果做一个简单的封装，展示框架的类库封装功能。<br>
<br>
1。集成Scriptaculous类库：<br>
<br>
这里我们不做过多介绍，详细情况请参考集成实战；我们发布的版本中已经把Scriptaculous放置于us.aculo.script包中，您可以把这些作为系统内置的类库使用。<br>
<br>
2。编写我们的折叠面板函数（example/effect.js）：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">*&nbsp;<br>&nbsp;*&nbsp;滑动面板实现.&nbsp;<br>&nbsp;*&nbsp;当指定元素可见时，将其第一个子元素向上滑动至完全被遮掩（折叠）。&nbsp;<br>&nbsp;*&nbsp;当指定元素不可见时，将其第一个子元素向下滑动至完全显示（展开）。&nbsp;<br>&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;slidePanel(panel){&nbsp;&nbsp;<br>&nbsp;&nbsp;panel&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(panel);&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(panel.style.display</span><span style="color: #000000;">==</span><span style="color: #000000;">'none'){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用Scriptaculous&nbsp;Effect的具体滑动展开实现&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Effect.SlideDown(panel);&nbsp;&nbsp;<br>&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用Scriptaculous&nbsp;Effect的具体滑动闭合实现&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Effect.SlideUp(panel);&nbsp;&nbsp;<br>&nbsp;&nbsp;}&nbsp;&nbsp;<br>}&nbsp;&nbsp;</span></div>
<br>3。编写包定义脚本（example/__$package.js）：
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">添加slidePanel（滑动面板控制）函数&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.addScript(</span><span style="color: #000000;">"</span><span style="color: #000000;">effect.js</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">slidePanel</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);&nbsp;&nbsp;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">给effect.js脚本添加对us.aculo.script包中effects.js脚本的装载后依赖this.addScriptDependence("effect.js",&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">"</span><span style="color: #000000;">us/aculo/script/effects.js</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">false</span><span style="color: #000000;">); </span><span style="color: #000000;"></span></div>
<br>
4。在网页上运用上面的类库：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">重用aculo&nbsp;Effect脚本实例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="text/css"</span><span style="color: #ff0000;">&nbsp;href</span><span style="color: #0000ff;">="/styles/default.css"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/boot.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">example.slidePanel</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">);&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_header"</span><span style="color: #ff0000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onclick</span><span style="color: #0000ff;">="slidePanel('menu_block1')"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面板&nbsp;1&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_block"</span><span style="color: #ff0000;">&nbsp;id</span><span style="color: #0000ff;">="menu_block1"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span></div>
<br>
<p class="MsoNormal"><strong><span new="" courier="" color:="" lang="EN-US">onclick</span></strong><strong courier="" color:="" style="font-size: 10pt;" lang="EN-US">=</strong><strong courier="" color:="" style="font-size: 10pt;" lang="EN-US"></strong>"slidePanel('menu_block1')"这个事件函数将在我们点击面板标题时触发，能后会调用Scriptaculous Effect的具体实现去实现我们需要的滑动折叠功能。<br>
</p>
<br>
&nbsp;<br>
<h1>壁立千仞 无欲则刚――控制依赖</h1>
<br>
java可以随意的使用第三方类库，可是JavaScript却没那么幸运，随着类库的丰富，烦杂的依赖关系和可能的命名冲突将使得类库的发展越来越困难。程序的易用性也将大打折扣。<br>
<br>
命名冲突的危险无形的增加你大脑的负担；随着使用的类库的增加，暴露的依赖也将随之增加，这是复杂度陡增的极大祸根，将使得系统越来越复杂，越来越难以控制。潜在的问题越来越多，防不胜防。<br>
<br>
JSI的出现，可以解决上述问题，我们建议类库的开发者将自己类库的依赖终结在自己手中，避免依赖扩散，以提高类库的易用性。<br>
<br>
同样使用上面的例子，假如我们想抛开JSI，实现同样的功能，那我们的页面代码将是（类库代码不用改动）：<br>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">重用aculo&nbsp;Effect脚本实例</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="text/css"</span><span style="color: #ff0000;">&nbsp;href</span><span style="color: #0000ff;">="/styles/default.css"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;script&nbsp;src="/scripts/boot.js"&gt;&lt;/s&nbsp;cript&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;script&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;$import("example.slidePanel");&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;/sc&nbsp;ript&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/net/conio/prototype/v1_5/prototype.js"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/us/aculo/script/v1_7/effects.js"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/us/aculo/script/v1_7/builder.js"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/scripts/example/effect.js"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_header"</span><span style="color: #ff0000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onclick</span><span style="color: #0000ff;">="slidePanel('menu_block1')"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面板&nbsp;1&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="menu_block"</span><span style="color: #ff0000;">&nbsp;id</span><span style="color: #0000ff;">="menu_block1"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">text3</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;</span></div>
<br>
这个例子的html代码明显比上面的复杂了，一堆堆的script标签，而且还是有序的；还出现在页面上，重构起来也极其麻烦。<br>
<br>
可以看出，JSI的加入可以让类库更加易用，html代码更为简洁，最终用户已经不必关心所用类库的依赖了。<br>
<br>
JSI中每一个脚本有一个单独的执行上下文。各个脚本顶部变量你可以随便使用，不必担心不同脚本中的命名冲突，不会污染全局变量空间，这种方式可以用于解
决某些类库间变量冲突的问题（如jQuery和Prototype的$函数）。我们甚至可以做到同一个页面上间接加载同一种类库的两个不同版本，不相互影
响。<br>
<br>
使用JSI后，很多细节我们可以在包中封装掉，不需要告诉类库使用者太多。大大增加类库的易用性。同时，类库封装的支持可以让我们在第三方库的基础上轻松的按自己的喜好编写自己的类库，同时避免依赖扩散造成的复杂度增加。<br>
<br>
使用JSIntegration唯一多出的负担就是编写包定义文件，不过想想这种定义文件可是一劳永逸的（以后就不需要每次导入脚本的时候都小心翼翼的判
断那个脚本先导入那个后导入，有那些间接使用到的类库需要导入，等等），而且有了包结构后对于代码组织、重用，以及文档的编写阅读，都将非常有利。<img src ="http://www.blogjava.net/jindw/aggbug/126038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-25 10:14 <a href="http://www.blogjava.net/jindw/archive/2007/06/25/126038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]脚本安需导入的三种模式的对比</title><link>http://www.blogjava.net/jindw/archive/2007/06/25/126020.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Mon, 25 Jun 2007 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/25/126020.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126020.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/25/126020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126020.html</trackback:ping><description><![CDATA[<h2><font><strong><font size="4"><strong>何谓安需装载？</strong></font></strong></font></h2>
<div><font size="2"> 脚本程序一般都是下载后执行
，当脚本库非常庞大时，一次性下载起来非常费时，传统的解决方式是，按功能模块把脚本写在不同的文件中，页面上手动加入script标签装载指定内容，但
是这有一些缺点，类库的使用者需要知道没个脚本之间的关系，顺序要求等等，而不可能要求每个类库使用者都对其非常熟悉，出错的可能性很大。于是很多框架开
始支持导入指令，想使用什么一个导入函数就完了，不必一堆堆的script文件，不用小心翼翼的关注着他们的依赖关系。</font></div>
<br>
<h2><font size="4"><strong>安需装载可分如下三种模式：</strong></font></h2>
<ul>
    <li><font color="#000066"><strong>即时同步按需装载</strong></font><font color="#000066"><strong>（</strong></font><font color="#000066"><strong>阻塞，</strong></font><font color="#000066"><strong>JSI、JSVM、dojo）</strong></font><font color="#000066"><strong>。</strong></font><font color="#000066"><font color="#000000"><br>
    最简单的按需装载实现，通过XMLHttpRequest同步装载脚本文件实现。问题是，浏览器使用这种方式同步获取资源时将导致浏览器阻塞：停止响应用户事件、停止页面重画操作。所以，虽然编程最为简单，但是用户体验最差。 <br>
    </font></font></li>
    <li><font color="#000066"><strong>异步</strong></font><font color="#000066"><strong>按</strong></font><font color="#000066"><strong>需</strong></font><font color="#000066"><strong>装载</strong></font><font color="#000066"><strong>（</strong></font><font color="#000066"><strong>无阻塞，</strong></font><font color="#000066"><strong>JSI</strong></font><font color="#000066"><strong>2.0+</strong></font><font color="#000066"><strong>）。<br>
    </strong></font><font color="#000066"><font color="#000000">异步导入，不必多做解释，用户体验好，但是因为其异步特征，处理起来比较麻烦。</font></font></li>
    <li><font color="#000066"><strong>延迟同步按需</strong></font><font color="#000066"><strong>装载</strong></font><font color="#000066"><strong>（</strong></font><font color="#000066"><strong>无阻塞，</strong></font><font color="#000066"><strong>JSI</strong></font><font color="#000066"><strong>2.0+）</strong></font><font color="#000066"><strong>。</strong></font><font color="#000066"><font color="#000000"><br>
    JSI通过动态预装载功能实现的一种同步获取资源的方法，虽然也是同步，但没有阻塞，可以算时兼顾易用性和用户体验的机决方按。缺点时</font></font><font color="#000066"><font color="#000000">有一定延迟，当前脚本标签中不可用。 </font></font> <br>
    </li>
</ul>
<h2><strong>使用方法（JSI示例）</strong></h2>
以一个代码语法着色程序为例：<br>
类库位置：example/<span style="color: #000000;">codedecorator</span>/code.js<br>
页面位置：example/xxx.html
<ul>
    <li><font color="#000066"><strong>即时同步按需装载</strong></font><font color="#000066"><font color="#000000"><br>
    </font></font>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">$import(</span><span style="color: #000000;">"</span><span style="color: #000000;">example.codedecorator.Code</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;code1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Code();<br>code1.id&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">libCode</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>code1.decorate();&nbsp;</span></div>
    <br></li>
    <strong>    </strong>
    <li><strong><font color="#000066"><strong>异步</strong></font><font color="#000066"><strong>按</strong></font><font color="#000066"><strong>需</strong></font><font color="#000066"><strong>装载</strong></font><font color="#000066"><font color="#000000"><br>
    </font></font></strong>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">$import(</span><span style="color: #000000;">"</span><span style="color: #000000;">example.</span><span style="color: #000000;">codedecorator</span><span style="color: #000000;">.Code</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(Code){<br>&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;code1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Code();<br>&nbsp;code1.id&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">libCode</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;code1.decorate();<br>})&nbsp;</span></div>
    <br>
    <strong><font color="#000066"><font color="#000000">    </font></font></strong>
    <strong><font color="#000066"><font color="#000000">        </font></font><font color="#000066"><font color="#000000">
    </font></font></strong></li>
    <strong>        </strong>
    <li><strong><font color="#000066"><strong>延迟同步按需</strong></font><font color="#000066"><strong>装载</strong></font><font color="#000066"><strong>（</strong></font><font color="#000066"><strong>无阻塞，</strong></font><font color="#000066"><strong>JSI</strong></font><font color="#000066"><strong>2.0+）</strong></font><font color="#000066"><strong>。</strong></font><font color="#000066"><font color="#000000"><br>
    </font></font>         </strong>
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">../scripts/boot.js</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&gt;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br>$import(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">example.</span><span style="color: #000000;">codedecorator</span><span style="background-color: #f5f5f5; color: #000000;">.Code</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">,</span><span style="background-color: #f5f5f5; color: #0000ff;">true</span><span style="background-color: #f5f5f5; color: #000000;">);<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"><br></span><span style="background-color: #f5f5f5; color: #0000ff;">var</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;code1&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff;">new</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;Code();<br>code1.id&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">libCode</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">;<br>code1.decorate();<br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span></div>
    <br>
    </li>
    <strong><font color="#000066">    </font></strong></ul>
    <strong><font color="#000066">    </font></strong>
    <h2><strong><font color="#000066"> 示例说明：</font></strong></h2>
    <font color="#000066">在线测试 <br>
    </font>
    <p><font color="#000066"><a href="http://jsintegration.sourceforge.net/example/code.html">http://jsintegration.sourceforge.net/example/code.html</a></font></p>
    <p><font color="#000066"><a href="http://www.xidea.org/project/jsi/example/code.html">http://www.xidea.org/project/jsi/example/code.html</a><br>
    </font></p>
    <p><strong><font color="#000066">     </font></strong></p>
    <h2><strong><font color="#000066">参考：</font></strong></h2>
    <strong><font color="#000066">    </font></strong>
    <p><strong><font color="#000066"><font color="#000000" size="4">JSI 导入函数： <a href="http://www.xidea.org/project/jsi/scripts/org/xidea/jsdoc/index.html?{cmd:'genObject',args:['$import','']}#$import">function $import(path, callbackOrLazyLoad, target )</a></font></font></strong></p>
    <strong><font color="#000066">    </font></strong>
    <strong></strong>  <img src ="http://www.blogjava.net/jindw/aggbug/126020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-25 09:24 <a href="http://www.blogjava.net/jindw/archive/2007/06/25/126020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]再谈一下DOMContentLoad事件</title><link>http://www.blogjava.net/jindw/archive/2007/06/25/126018.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Mon, 25 Jun 2007 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/25/126018.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/126018.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/25/126018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/126018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/126018.html</trackback:ping><description><![CDATA[<p>这个问题算是个老问题了。
<br>所以，标题加上一个再字。</p>
<p>我主要说一下模拟这个事件时候容易出现的问题。</p>
<p>对于FF，Opera9，原生DOMContentLoad支持，就不说了，最头疼的是IE。
<br>我最初考虑这个问题的时候，想到的是document的readyState属性。
<br>偷窥一下Dojo的源码，发现它也是基于这个属性去做的，那时，我基本就认准了这个方法。
<br>于是再后来JSI1和JSI2早期的预览版本中，都是基于这个属性做的，后来，有个朋友向我反应，说JSI的装饰引擎在IE上启动比FF慢很多，我当时就猜测，是否是这个DOMContentLoad的问题。</p>
<p>经过测试，发现，确实，readyState必须等待图片装载完成之后才能置为complete。
<br>于是到网上搜索一下其他办法，最终 Dean Edwards的blog上描述的一个基于script defer属性的解决办法胜出：http://dean.edwards.name/weblog/category/dom/onload/
<br>不过，使用document.write打印一段脚本，我真的不喜欢：（</p>
<p>在评论里面我们可以看到一些其他的建议，有人认为 readyState == 'complete' 加
readyState==&#8216;interactive&#8217;这个状态可以准确模拟DOMContentLoad。我开始简单测试一下，貌似可行，但是后来发现
readyState==&#8216;interactive&#8217;可能受alert等函数影响，就是说，一般情况下，readyState==
&#8216;interactive&#8217;时，dom是装载完了的，但是，当你文档装载过程中，调用了alert函数，那么，readyState将提前置为
&#8216;interactive&#8217;。</p>
<p><strong>总之，目前来说，我知道的，只有两个办法可以真正实现IE上模拟DOMContentLoad </strong>
<br></p>
<ul>1.htc ondocumentready（需要额外的HTC文件）
    <br>2.script defer(必须使用document.write打印一段脚本标记,jquery目前采用的方式)
    <br></ul>
    <br><strong>最常见的一个错误：</strong>
    <br>
    <ul>document.readyState(Dojo目前（0.4.1）采用的方式)
        <br></ul>
        <p>再说一下JSI的DOMContentLoad实现的使用接口。</p>
        <p><a href="http://www.xidea.org/project/jsi/scripts/org/xidea/jsdoc/index.html?{cmd:'genObject',args:['EventUtil','js.html']}#EventUtil.addDOMReadyListener">js.html.EventUtil.addDOMReadyListener(&lt;Function&gt;listener ,&lt;boolean&gt;runAnyCase )</a></p>
        <p>第二个参数用于确保listener 在任何时候都会被调用（FF DOMContentLoad事件如果在事件发生之后设置listener是无效的）
        </p><img src ="http://www.blogjava.net/jindw/aggbug/126018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-25 09:13 <a href="http://www.blogjava.net/jindw/archive/2007/06/25/126018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSI2性能测试报告</title><link>http://www.blogjava.net/jindw/archive/2007/06/22/125843.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Fri, 22 Jun 2007 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/22/125843.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/125843.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/22/125843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/125843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/125843.html</trackback:ping><description><![CDATA[<p><strong>装载效率测试</strong>
<br>测试页面见：test/load-eff-test.html</p>
<p>为了测试结果更显客观，我选择了第三方类库的装载测试：
<br>'com.yahoo.yui.*',
<br>'net.conio.prototype.*',
<br>'net.fckeditor.*',
<br>'org.jquery.*',
<br>'us.aculo.script.*'
<br>共22个脚本文件（对于JSI来说还有诺干包定义文件）。</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">FF2:&nbsp;&nbsp;<br>标记导入时间（原始方式）:</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">1047</span><span style="color: #000000;">,</span><span style="color: #000000;">484</span><span style="color: #000000;">,</span><span style="color: #000000;">484</span><span style="color: #000000;">,</span><span style="color: #000000;">437</span><span style="color: #000000;">,</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">484</span><span style="color: #000000;">&nbsp;&nbsp;<br>同步导入时间:</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">453</span><span style="color: #000000;">,</span><span style="color: #000000;">484</span><span style="color: #000000;">,</span><span style="color: #000000;">437</span><span style="color: #000000;">,</span><span style="color: #000000;">469</span><span style="color: #000000;">,</span><span style="color: #000000;">453</span><span style="color: #000000;">&nbsp;&nbsp;<br>延迟导入时间:</span><span style="color: #000000;">921</span><span style="color: #000000;">,</span><span style="color: #000000;">765</span><span style="color: #000000;">,</span><span style="color: #000000;">891</span><span style="color: #000000;">,</span><span style="color: #000000;">906</span><span style="color: #000000;">,</span><span style="color: #000000;">953</span><span style="color: #000000;">,</span><span style="color: #000000;">906</span><span style="color: #000000;">,</span><span style="color: #000000;">922</span><span style="color: #000000;">&nbsp;&nbsp;<br>异步导入时间:</span><span style="color: #000000;">859</span><span style="color: #000000;">,</span><span style="color: #000000;">1093</span><span style="color: #000000;">,</span><span style="color: #000000;">1141</span><span style="color: #000000;">,</span><span style="color: #000000;">1031</span><span style="color: #000000;">,</span><span style="color: #000000;">1641</span><span style="color: #000000;">,</span><span style="color: #000000;">1125</span><span style="color: #000000;">,</span><span style="color: #000000;">1078</span><span style="color: #000000;">,</span><span style="color: #000000;">1093</span><span style="color: #000000;">,</span><span style="color: #000000;">1157</span><span style="color: #000000;">,</span><span style="color: #000000;">1141</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>IE7:&nbsp;&nbsp;<br>标记导入时间:</span><span style="color: #000000;">343</span><span style="color: #000000;">,</span><span style="color: #000000;">297</span><span style="color: #000000;">,</span><span style="color: #000000;">297</span><span style="color: #000000;">,</span><span style="color: #000000;">344</span><span style="color: #000000;">,</span><span style="color: #000000;">328</span><span style="color: #000000;">,</span><span style="color: #000000;">328</span><span style="color: #000000;">&nbsp;&nbsp;<br>同步导入时间:</span><span style="color: #000000;">281</span><span style="color: #000000;">,</span><span style="color: #000000;">250</span><span style="color: #000000;">,</span><span style="color: #000000;">235</span><span style="color: #000000;">,</span><span style="color: #000000;">235</span><span style="color: #000000;">,</span><span style="color: #000000;">234</span><span style="color: #000000;">,</span><span style="color: #000000;">234</span><span style="color: #000000;">,</span><span style="color: #000000;">250</span><span style="color: #000000;">,</span><span style="color: #000000;">265</span><span style="color: #000000;">&nbsp;&nbsp;<br>延迟导入时间:</span><span style="color: #000000;">922</span><span style="color: #000000;">,</span><span style="color: #000000;">422</span><span style="color: #000000;">,</span><span style="color: #000000;">406</span><span style="color: #000000;">,</span><span style="color: #000000;">391</span><span style="color: #000000;">,</span><span style="color: #000000;">391</span><span style="color: #000000;">,</span><span style="color: #000000;">391</span><span style="color: #000000;">,</span><span style="color: #000000;">407</span><span style="color: #000000;">,</span><span style="color: #000000;">391</span><span style="color: #000000;">&nbsp;&nbsp;<br>异步导入时间:</span><span style="color: #000000;">625</span><span style="color: #000000;">,</span><span style="color: #000000;">672</span><span style="color: #000000;">,</span><span style="color: #000000;">672</span><span style="color: #000000;">,</span><span style="color: #000000;">703</span><span style="color: #000000;">,</span><span style="color: #000000;">703</span><span style="color: #000000;">,</span><span style="color: #000000;">672</span><span style="color: #000000;">,</span><span style="color: #000000;">703</span><span style="color: #000000;">,</span><span style="color: #000000;">704</span><span style="color: #000000;">,</span><span style="color: #000000;">688</span><span style="color: #000000;">&nbsp;&nbsp;<br></span></div>
<br>
<p><br></p>
<p><br></p>
<p><strong>运行时间测试</strong>
<br>测试脚本管理后对新能的影响,影响因素有：全局变量和局部变量的查找时间差异，eval的脚本和script标记直接插入的脚本的可能差异。（这
个测试不具有普遍性，这里我主要是测试了一下浏览器对局部变量的访问速度【JSI里面访问变量都是装载单元内的局部变量】，所以故意测试了大量局部变量访
问的操作）
<br>测试页面见：test/runtime-eff-test.html
<br></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">FF2：&nbsp;&nbsp;<br>jsiTime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">845</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">927</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">598</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">687</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">764</span><span style="color: #000000;">,&nbsp;&nbsp;<br>scriptTime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1432</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">950</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1305</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1278</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1219</span><span style="color: #000000;">,&nbsp;&nbsp;<br>evalTime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1644</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1373</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1322</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1186</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1360</span><span style="color: #000000;">,&nbsp;&nbsp;<br>execTime:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;&nbsp;<br>dscriptTime:&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1432</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">950</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1305</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1278</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1219</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>IE7:&nbsp;&nbsp;<br>jsiTime:&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">295</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">205</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">157</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">315</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">156</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">142</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">375</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">328</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>scriptTime:&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">189</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">140</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">251</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">187</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">217</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">203</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">234</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>evalTime:&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">236</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">249</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">139</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">281</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">171</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">172</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">108</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">436</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">359</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>execTime:&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">219</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">234</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">314</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">157</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">220</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">266</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">204</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">234</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">187</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">95</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;<br>dscriptTime:&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">187</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">265</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">294</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">326</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">187</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">328</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">141</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">221</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">127</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">249</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span></div>
<br>
<p><br></p>
<p><br></p>
<script>render_code();</script>
<p>上面的基数太小，随机误差太大，调整原始数据从新测试一遍jsiTime和scriptTime
<br></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">jsiTime:&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">576</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">658</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">688</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">703</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">611</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">608</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>scriptTime:&nbsp;</span><span style="color: #000000;">706</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">608</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">562</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">547</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">655</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">657</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<br>
<p><strong><br>总结：</strong>
<br>JSI的装载性能表现不错，完全不必计较。
<br>托管代码的运行性能也没有太大区别，不过，因为。JSI托管脚本使用的变量基本都是装载单元内的局部变量（本地声明变量，或者外部依赖的引用或值拷贝），所以，对于FF这类局部变量比全局变量访问速度快不少的解释引擎，JSI托管脚本可以达到更好的运行效率。</p>
<p><span style="color: red;">有个奇怪的问题，JSI在装载类库时，与传统模式相比，肯定增加了些额外的运算，但是，貌似JSI的同步装载模式下，装载脚本的耗时比传统模式还少（IE 表现明显）？为何？</span>
<br>欢迎大家对这奇怪的现象提出自己的猜想，我稍后贴出我对此问题的看法^_^</p><img src ="http://www.blogjava.net/jindw/aggbug/125843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-22 15:01 <a href="http://www.blogjava.net/jindw/archive/2007/06/22/125843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSI2Alpha及JSA1beta 发布：</title><link>http://www.blogjava.net/jindw/archive/2007/06/22/125829.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Fri, 22 Jun 2007 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/22/125829.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/125829.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/22/125829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/125829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/125829.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div id="" style="border: 1px dotted #0010ff; color: #454548;"><span style="font-weight: bold;">JSI简介：</span><br>
<p>JSI 是一个 开放的、<strong>无侵入</strong>的 脚本库管理框架，内核不提供任何具体功能，有一些功能子项目，如网页装饰引擎。</p>
<p>更多信息请查看：<a href="http://www.xidea.org/project/jsi/">http://www.xidea.org/project/jsi/</a></p>
<br><span style="font-weight: bold;">JSA简介：</span><br>JSA最初是做JSI编译处理的一个小工具，现在也可以用来混淆、压缩脚本。支持swing和ant task两种工作方式。<br>可以通过webstart启动：<a href="http://www.xidea.org/webstart/JSA.jnlp">启动JSA（允许访问文件系统）</a>，<span style="text-decoration: underline;"></span><a href="http://www.xidea.org/webstart/JSA2.jnlp">沙箱内运行（功能受限）</a><br>
<br></div>
<br>
<p><br></p>
<p><br></p>
<p>这次发布的JSI2Alpha相对于以前的预览版本，做了一次全面的重构；同时对API做了些简化。</p>
<p><a href="http://www.xidea.org/project/jsi/scripts/org/xidea/jsdoc/index.html">目前JSI2的公开API有：</a></p>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;导入函数&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br>$import(</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">path,</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">|</span><span style="color: #000000;">Function</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">callbackOrLazyLoad[可选参数],</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Object</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">target[可选参数])&nbsp;&nbsp;<br>&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;日志设置相关&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br>$JSI.setDefaultLogLevel(level)&nbsp;&nbsp;<br>$JSI.setLogLevel(pathPattern,level)&nbsp;&nbsp;<br>&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;装饰引擎相关函数&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br>$JSI.addDecoratorProvider(pkg,alias&#8230;)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">添加装饰包.&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">$JSI.decorate&nbsp;(&nbsp;)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">准备执行装饰器任务,一般在配置文件（config.js）中调用.&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;用于包定义的Package成员函数，在__package__.js中调用（this指向当前package对象）&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.addScript(scriptPath,objectNames)</span><span style="color: #008000;">//</span><span style="color: #008000;">添加脚本及其声明的对象（函数、方法名）.&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.add</span><span style="color: #000000;">*</span><span style="color: #000000;">Dependence(thisPath,targetPath,beforeLoad)</span><span style="color: #008000;">//</span><span style="color: #008000;">添加脚本依赖.&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">this</span><span style="color: #000000;">.setImplementation(realPackage)</span><span style="color: #008000;">//</span><span style="color: #008000;">设置具体实现包(当前包只是其别名，并无任何内容)。&nbsp;</span></div>
<br>
<p>&nbsp;</p>
<br>
<p><strong>我们会尽量将JSI做成与具体功能无关（专著于脚本管理）。</strong></p>
<p>对于js.*.*这个类库，做了些精简。
<br>只保留下列元素</p>
<p>&nbsp;</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#js.html&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">保留这个包，因为这些实在太常用了。&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;BrowserInfo&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;EventUtil&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;StyleUtil&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>#js.util</span><span style="color: #008000;">//</span><span style="color: #008000;">保留这个包主要因为异步装载用到这些类库&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;LoadTask&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Request&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;ScriptLoadTask&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;TaskQueue&nbsp;&nbsp;</span></div>
<br>
<p>&nbsp;</p>
<script>render_code();</script>
<p>发布文件说明：
<br>自该版本启，source目录将不再打包。
<br>但是在scripts目录下新增boot-with-source.js文件，该文件中包含全部源代码的数据。
<br>里面编码的源代码可以通过我们的<a href="http://www.xidea.org/project/jsi/scripts/org/xidea/jsdoc/index.html" target="blank">文档工具</a>查看。让大家习惯一下这个工具的使用：）</p>
<p>JSA1beta：增加了对JSI2的编译支持，同时对于普通脚本的压缩，也增加了一些功能：
<br>  1. ant task 增加多文件分组合并。
<br>  2. swing ui 修正文件编码的bug。</p>
<p>下载：
<br>javaeye group:  <a href="http://jsi.group.javaeye.com/shares" target="blank">http://jsi.group.javaeye.com/shares</a>
<br>sourceforge:    &lt;系统最近好像有问题，我的文件一直没能上传成功,要过一段时间再说&gt; 。。。。。
</p><img src ="http://www.blogjava.net/jindw/aggbug/125829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-22 14:36 <a href="http://www.blogjava.net/jindw/archive/2007/06/22/125829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>貌似Opera的一个bug</title><link>http://www.blogjava.net/jindw/archive/2007/06/20/125422.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 20 Jun 2007 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/20/125422.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/125422.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/20/125422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/125422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/125422.html</trackback:ping><description><![CDATA[今天抽空测试了一下JSI当前状态的浏览器兼容性，一个头疼的问题困扰了很久。<br>找出问题出自，怀疑是一个opera的bug。<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;test(x){<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(x){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(e){<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;}</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">=</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br>&nbsp;&nbsp;}<br>}</span></div>
<br>语法检查就通不过，报告错误：<br>le://localhost/D:/eclipse/workspace/JSI/web/scripts/core.js<br>Event thread: BeforeExternalScript<br><br>opera8报错，opera9好像就没有这个问题。<br>贴出来，让有类似问题的人省点心。<br> <img src ="http://www.blogjava.net/jindw/aggbug/125422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-20 21:42 <a href="http://www.blogjava.net/jindw/archive/2007/06/20/125422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript模板引擎测试，让我空欢喜一场：（</title><link>http://www.blogjava.net/jindw/archive/2007/06/08/122871.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Fri, 08 Jun 2007 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/08/122871.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122871.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/08/122871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122871.html</trackback:ping><description><![CDATA[测试了一下trimpath模板引擎和一个我以前编写xml模板引擎，显示测试结果，828/16。<br><br>太让我振奋了。原想，如果效率太低我就放弃这个项目，貌似结果：这个流行的js模板引擎，和我没做优化的xml模板引擎还有这么大的差距？？？<br><br>仔细检查一下，晕倒，测试模板数据搞错了：（<br><br>纠正过来，测试数据显示，trimpath比xml模板引擎要快好几倍：（<br><br>而且，如果模板内使用的循环次数越多，差距越大：（<br><br>比较扫兴的结果。<br>决定吧这个东西从jsi系统api中删除。<br><br>不过，感觉，虽然有这点差距，xml模板引擎还是可以作为一个备用选择。<br>基于js标记库，类el表达式，对于熟悉jsp2.0，jstl的程序员来说，还是比较易懂，扩展也相对简单（trimpath没怎么研究，或许是错的）。<br><br><a href="http://www.blogjava.net/Files/jindw/template-test.rar">下载测试：</a><br>（XML Template是从jsi中拉出来的，部分测试中没有用到的依赖没有包括进去）<br><br> <img src ="http://www.blogjava.net/jindw/aggbug/122871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-08 16:15 <a href="http://www.blogjava.net/jindw/archive/2007/06/08/122871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用正则在Eclipse上对javascript批量缩进。</title><link>http://www.blogjava.net/jindw/archive/2007/06/08/122803.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Fri, 08 Jun 2007 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/08/122803.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122803.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/08/122803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122803.html</trackback:ping><description><![CDATA[&nbsp; 一直没有找到好用的 javascript格式化工具，不过UE有个非常漂亮的功能，多行编辑，可以轻松的批量缩进。<br>&nbsp; 但是eclipse呢？很遗憾，没有，不过用正则表达式可以轻松完成这个功能，匹配整行，替换时在行前加上缩进空格。<br><br>find：^.*<br>replace With：&nbsp; $0<br><br>说到这个正则，鄙视一下js的正则语法，居然匹配组是 $1 $2 $3 ....索引从1开始，但是匹配全部为什么要来个$&amp;?&nbsp; 多么难记？？还是eclipse的$0方便<br>而且js的match函数返回的数组还是 [全匹配,组1，组2....]，全匹配索引就是0嘛！ 居然要来个$&amp;??<br>扼杀我们的联想天性。<br><br><img src ="http://www.blogjava.net/jindw/aggbug/122803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-08 11:33 <a href="http://www.blogjava.net/jindw/archive/2007/06/08/122803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式实现JavaScript日期格式化的想法。</title><link>http://www.blogjava.net/jindw/archive/2007/06/07/122635.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Thu, 07 Jun 2007 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/07/122635.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122635.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/07/122635.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122635.html</trackback:ping><description><![CDATA[今天和网友聊起在javascript里面实现DateFormat 的话题。<br><br>把想法发布一下，当是笔记。<br><br>格式化：<br>&nbsp; 1、先用正则把日期表达式分段：<br>&nbsp;&nbsp;&nbsp; var tokens = "yyyy-MM-dd(没有时间)".match(/y+|M+|d+|m+|[^yMdm]+/g)<br>&nbsp;&nbsp;&nbsp; //结果数组为：yyyy,-,MM,-,dd,(没有时间)<br>&nbsp; 2、将其中的yyyy MM dd 替换成相映的处理对象<br>&nbsp; <br>&nbsp; 3、格式化时，先复制数组，依次遍历，如果元素是处理对象，那么元素值替换成处理结果。<br><br>&nbsp; 4、将新数组join。即为需要结果。<br><br>&nbsp; 5、parse时。先复制数组，若元素为字符串，精确匹配。若未处理对象，读取需要的值，匹配失败，则终止操作，返回结果。<br><br><br><br><br>想法而已，实际实现时可能还有很多现在无法意料的事情：）<br><br>  <img src ="http://www.blogjava.net/jindw/aggbug/122635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-07 16:27 <a href="http://www.blogjava.net/jindw/archive/2007/06/07/122635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSI API之BrowserInfo、EventUtil讨论</title><link>http://www.blogjava.net/jindw/archive/2007/06/06/122330.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 06 Jun 2007 04:17:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/06/06/122330.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/122330.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/06/06/122330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/122330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/122330.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #666666;">JSI 自身提供一些常用API，数量极少，尽量以一种正式的风格提供，尽量回避争议。<br>有些是启动文件用到的，如任务队列支持，还有如装饰引擎直接用到的，如BrowserInfo、EventUtil、StyleUtil等。<br>对于启动文件中未直接用到的，如果风格的争议太大，都将剔除出去。</div>
<br><br>
<h2>BrowserInfo对象：</h2>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">*<br>&nbsp;*&nbsp;BrowserInfo&nbsp;对象，用于判断浏览器的相关信息，如浏览器类型、quirks模式、客户端语言（简体中文？英语..未实现）、操作系统（未实现）等等。<br>&nbsp;*&nbsp;@public<br>&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;BrowserInfo&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;isIE&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isOpera&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isGecko&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isNetscape&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isMozilla&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isFirefox&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isKhtml&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isSafari&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isKonqueror&nbsp;:&nbsp;falseChecker,<br>&nbsp;&nbsp;isQuirks&nbsp;:&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){&#8230;}<br>};</span></div>
<br>其中最常用的要数 is&lt;浏览器类别&gt;（最小版本号码,最大版本号）。<br>此外，我还将BrowserInfo的函数拷贝到navigator对象上，这个有无必要呢？<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">@Deprecated&nbsp;???</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;BrowserInfo){<br>&nbsp;&nbsp;window.navigator[n]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;BrowserInfo[n];<br>}<br></span></div>
<br>
<h4>不同之处：</h4>
现在在浏览器判断上面，一般是用常量表示，比如isIE之类的，JSI的BrowserInfo使用函数，以便提供更强大更灵活的功能。<br><br>EventUtil<br>EventType 对象的成员函数有：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>addListener(el,&nbsp;type,&nbsp;fn,&nbsp;cap)<br>removeListener(el,&nbsp;type,&nbsp;fn,&nbsp;cap)<br><br>add</span><span style="color: red; font-weight: bold;">&lt;Eventtype&gt;</span><span style="color: #000000;">Listener(element,&nbsp;listener,&nbsp;captrue)<br>如addLoadListener，addMousedownListener，addMouseoutListener&nbsp;&nbsp;&nbsp;&nbsp;<br>remove</span><span style="color: red; font-weight: bold;">&lt;Eventtype&gt;</span><span style="color: #000000;">Listener(element,&nbsp;listener,&nbsp;captrue)<br>createEvent(type,&nbsp;canBubble,&nbsp;cancelable)<br>dispatchEvent(el,&nbsp;even)</span></div>
<br>其中: <span style="font-weight: bold; color: red;">&lt;Eventtype&gt;</span>代表一种事件类型。<br>W3C事件类型有：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;events&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;['click','mousedown','mouseup','mouseover','mousemove','mouseout','load','unload','abort','error','select','change','submit','reset','focus','blur','resize','scroll'].<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat(['DOMFocusIn','DOMFocusOut','DOMActivate']);</span></div>
<br><br>此外，还添加了一种事件类型：DOMLoad。就是mozilla的DOMContentLoaded事件，在Dom树构造完成但图片资源等可能未完成时触发。<br>对于这种事件类型， element,&nbsp; captrue参数都将忽略。暂时只有添加函数，没有删除函数（有删除的必要吗？）。<br><br>
<h3>不同之处：</h3>
这个事件处理函数集与其他常见方式的却别有：<br>
<ol>
    <li>this支持。IE的attach方法添加的函数，运行时this指向window对象，JSI吧这点给纠正过来，与w3c的addEventListener行为一致。</li>
    <li>事件类型直接体现在函数名中，这样有利于书写上的错误及早发现。</li>
    <li>事件格式化，将事件的访问方式格式化为W3C的方式。</li>
    <li>自动清理，这也不算不同吧，现在大多数JS库都提供这个功能，就是在离开页面时清理全部注册事件。但是这对一些单页程序是无效的（OPOA，本人也比较讨厌这种模式，呵呵），以后是否可以提供一个purgeElement函数，用于清理指定元素及其子元素的事件呢？</li>
</ol>
<strong><span style="color: blue;">非常希望大家积极发表自己的看法，该修改就修改，如果争议太大，那么我将吧这些从系统API中移除。<br><br></span></strong><strong>程序下载</strong>
<p>这个API也可以脱离JSI使用，只是，在编写的时候，因为有了JSI的保护，我使用了不少内部变量，为避免可能的冲突，做了如下处理。
</p>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;BrowserInfo&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br>&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">#include(browser-info.js)<img src="http://www.blogjava.net/Images/dot.gif">.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;BrowserInfo;<br>}<br><br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;EventUtil&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br>&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">#include(event-util.js)<img src="http://www.blogjava.net/Images/dot.gif">.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;EventUtil;<br>}<br></span></div>
<br><a href="http://www.blogjava.net/Files/jindw/event-util.rar">下载地址</a><br><br><br> <img src ="http://www.blogjava.net/jindw/aggbug/122330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-06-06 12:17 <a href="http://www.blogjava.net/jindw/archive/2007/06/06/122330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 性能测试系列：循环反转的效果</title><link>http://www.blogjava.net/jindw/archive/2007/05/31/121121.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Thu, 31 May 2007 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/05/31/121121.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/121121.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/05/31/121121.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/121121.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/121121.html</trackback:ping><description><![CDATA[循环反转示例:<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;"></span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">data.length;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"><img src="http://www.blogjava.net/Images/dot.gif">.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">反转后代码</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"></span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data.length</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">--</span><span style="color: #000000;">){</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"><img src="http://www.blogjava.net/Images/dot.gif">.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;}</span></div>
<br>这类优化的作用是明显的,但是具体有多大作用呢?<br><br>用一个长度为100 000 的数组测试一下:<br>515/313<br>500/313<br>516/312<br>516/328<br>516/328<br><br>可见,循环反转后,只需要原来3/5的时间.<br>但是,这种东西到底有多大价值?FF上200次循环仅需要1毫秒的时间.所以,个人认为,只要循环的内容不是太长,使用不算非常频繁,那么没有太大必要.<br>加入循环的长度需要通过函数取得,且不变,那么,反转的效率还是可观的,在IE上,函数调用消耗是普通操作的十多倍.<br><br>测试代码:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;incTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;decTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;inc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Array(</span><span style="color: #000000;">10</span><span style="color: #000000;">*</span><span style="color: #000000;">10000</span><span style="color: #000000;">);<br></span><span style="color: #008000;">//</span><span style="color: #008000;">while(inc++&lt;50)</span><span style="color: #008000;"><br></span><span style="color: #000000;">{<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">data.length;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data.length</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">--</span><span style="color: #000000;">){<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;incTime</span><span style="color: #000000;">+=</span><span style="color: #000000;">(t2</span><span style="color: #000000;">-</span><span style="color: #000000;">t1);<br>&nbsp;&nbsp;decTime</span><span style="color: #000000;">+=</span><span style="color: #000000;">(t3</span><span style="color: #000000;">-</span><span style="color: #000000;">t2);<br>}<br><br>prompt(</span><span style="color: #000000;">"</span><span style="color: #000000;">incTime/decTime</span><span style="color: #000000;">"</span><span style="color: #000000;">,incTime&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">'</span><span style="color: #000000;">/</span><span style="color: #000000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">decTime)</span></div>
<br><br> <img src ="http://www.blogjava.net/jindw/aggbug/121121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-05-31 12:30 <a href="http://www.blogjava.net/jindw/archive/2007/05/31/121121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> javascript 性能测试系列：正则表达式  </title><link>http://www.blogjava.net/jindw/archive/2007/05/30/120889.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Wed, 30 May 2007 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/05/30/120889.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/120889.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/05/30/120889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/120889.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/120889.html</trackback:ping><description><![CDATA[在<a  href="http://www.xidea.org/project/jsi/">JSI</a>的实现中,有这样一种需求,将有自带命名空间的脚本元素名数组转换成没有命名空间的变量名数组.<br>
比如 :<br>
['YAHOO.util.XXXX,YAHOO.util.YYYY,YAHOO.event.XX'] -&gt;['YAHOO']<br>
<br>
以前一直是较长的一段处理代码,今天突发奇想,这个用正则表达式处理效果如何?<br>
<br>
于是,就这种处理,分别测试了正则表达式和javascript代码的效率.<br>
<br>
测试数据如下(regTime /codeTime):<br>
620/4536<br>
729/4068<br>
719/4250<br>
645/4152<br>
655/4642<br>
<br>
FF和IE结果差不多,上面是FF2的数据<br>
<br>
<strong>总结:<br>
经常看见很多地方对正则表达式的效率的怀疑,但是这个问题放在javascript里面,好像情况又不同了. 适当使用正则式,反而可以大大提高效率.<br>
在javascript这类\较慢的解释型语言里面,少即快,能用原生代码就不要自己写.<br>
<br>
</strong>测试代码:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[];<br></span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">20</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br>&nbsp;&nbsp;data[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">NS</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">i</span><span style="color: #000000;">/</span><span style="color: #000000;">10</span><span style="color: #000000;">+</span><span style="color: #000000;">'.'</span><span style="color: #000000;">+</span><span style="color: #000000;">i<br>}<br>document.write(<br>&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">(data&nbsp;==&nbsp;data.sort())&nbsp;+"/"+</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;data&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;hr&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;regTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;codeTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;inc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;reg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">(\b[\$\w]</span><span style="color: #000000;">+</span><span style="color: #000000;">)[\$\w\.]</span><span style="color: #000000;">*</span><span style="color: #000000;">(,\</span><span style="color: #000000;">1</span><span style="color: #000000;">\b[\$\w\.]</span><span style="color: #000000;">*</span><span style="color: #000000;">)</span><span style="color: #000000;">*/</span><span style="color: #000000;">g;<br><br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;regResult,codeResult;<br></span><span style="color: #0000ff;">while</span><span style="color: #000000;">(inc</span><span style="color: #000000;">++&lt;</span><span style="color: #000000;">100</span><span style="color: #000000;">){<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(i</span><span style="color: #000000;">++&lt;</span><span style="color: #000000;">100</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;regResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data.join(',').replace(reg,'$</span><span style="color: #000000;">1</span><span style="color: #000000;">').split(',');<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(i</span><span style="color: #000000;">++&lt;</span><span style="color: #000000;">200</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;codeResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;flagMap&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;j</span><span style="color: #000000;">=</span><span style="color: #000000;">data.length</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;j</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">0</span><span style="color: #000000;">;j</span><span style="color: #000000;">--</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;key.substr(</span><span style="color: #000000;">0</span><span style="color: #000000;">,key.indexOf('.'));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">flagMap[key]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;codeResult[codeResult.length]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(key);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">codeResult.push(key);</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flagMap[key]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;regTime&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">(t2</span><span style="color: #000000;">-</span><span style="color: #000000;">t1);<br>&nbsp;&nbsp;codeTime</span><span style="color: #000000;">+=</span><span style="color: #000000;">(t3</span><span style="color: #000000;">-</span><span style="color: #000000;">t2);<br>}<br>document.write(<br>&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">regResult:</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;"><br>&nbsp;&nbsp;regResult)<br>document.write(<br>&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;hr&gt;codeResult:</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;"><br>&nbsp;&nbsp;codeResult)<br>prompt(</span><span style="color: #000000;">"</span><span style="color: #000000;">regTime&nbsp;/codeTime</span><span style="color: #000000;">"</span><span style="color: #000000;">,regTime&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">'</span><span style="color: #000000;">/</span><span style="color: #000000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">codeTime)</span></div>
<br><img src ="http://www.blogjava.net/jindw/aggbug/120889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-05-30 13:22 <a href="http://www.blogjava.net/jindw/archive/2007/05/30/120889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 性能测试系列－－函数调用</title><link>http://www.blogjava.net/jindw/archive/2007/05/29/120742.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Tue, 29 May 2007 10:00:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/05/29/120742.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/120742.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/05/29/120742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/120742.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/120742.html</trackback:ping><description><![CDATA[一直都认为，javascript的函数调用是一个相对耗时的操作。<br>开始<a href="http://www.xidea.org/project/jsi">JSI</a>的优化，这些问题现在必须认真考虑了，测试一把：<br><br>一个简单的＋＋操作，直接操作和函数内操作（注，函数参数对原始类型是值传递，所以这不会影响被传入的变量，这里测试里面，两类操作的行为是不一样的）<br><br>FF2测试结果（callTime/opTime）：<br>2871/2582<br>2919/2675<br>2734/2704<br>2953/2516<br>3732/3346<br><br>IE7测试结果：<br>3140/376<br>3173/327<br>3238/247<br>3265/235<br>3217/299<br><br><span style="font-weight: bold;">通过测试可见，函数调用的消耗基本可以忽略。每次调用时间仅为：</span><br style="font-weight: bold;"><span style="font-weight: bold;">3000/(200*1000*5) ==0.3毫秒 ，这个时间还包含函数内部的＋＋操作<br><br>从示例可见，FF的函数调用消耗基本可以府略，IE虽然相当于十倍＋＋类简单操作，但依然不足以重视。<br></span><br>奇怪的是，第一次碰见ie的运行效率高于ff的情况。<br><br>测试代码<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;callTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;opTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;inc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;plus(z){z</span><span style="color: #000000;">++</span><span style="color: #000000;">};<br></span><span style="color: #0000ff;">while</span><span style="color: #000000;">(inc</span><span style="color: #000000;">++&lt;</span><span style="color: #000000;">200</span><span style="color: #000000;">){<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(i</span><span style="color: #000000;">++&lt;</span><span style="color: #000000;">1000</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;plus(x);<br>&nbsp;&nbsp;&nbsp;&nbsp;plus(x);<br>&nbsp;&nbsp;&nbsp;&nbsp;plus(x);<br>&nbsp;&nbsp;&nbsp;&nbsp;plus(x);<br>&nbsp;&nbsp;&nbsp;&nbsp;plus(x);<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(i</span><span style="color: #000000;">++&lt;</span><span style="color: #000000;">2000</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;callTime</span><span style="color: #000000;">+=</span><span style="color: #000000;">(t2</span><span style="color: #000000;">-</span><span style="color: #000000;">t1);<br>&nbsp;&nbsp;opTime</span><span style="color: #000000;">+=</span><span style="color: #000000;">(t3</span><span style="color: #000000;">-</span><span style="color: #000000;">t2);<br>}<br><br>prompt(</span><span style="color: #000000;">"</span><span style="color: #000000;">callTime/opTime</span><span style="color: #000000;">"</span><span style="color: #000000;">,callTime&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">'</span><span style="color: #000000;">/</span><span style="color: #000000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">opTime)</span></div>
<br><br><br><br><br> <img src ="http://www.blogjava.net/jindw/aggbug/120742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-05-29 18:00 <a href="http://www.blogjava.net/jindw/archive/2007/05/29/120742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于javascript for in 循环效率的疑惑</title><link>http://www.blogjava.net/jindw/archive/2007/05/27/120312.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Sun, 27 May 2007 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/05/27/120312.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/120312.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/05/27/120312.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/120312.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/120312.html</trackback:ping><description><![CDATA[前几天无意中看到一个网友blog上关于这个循环效率的问题，说要尽量避免使用。<br>有点害怕，我在<a  href="http://www.xidea.org/project/jsi/">JSI</a>中可是用了不少，呵呵。<br>测试一下，负担终于可以放下来了：<br><br>测试对象：<br>一个对象模拟map，测试for in 循环<br>两个数组，测试for(;;)循环<br><br>连续4次运行时间比。<br>957/1278；955/1357；1014/1282；968/1392<br><br><br><span style="font-weight: bold;">明显，要实现类似map的功能，还是for in 快点。</span><br><br>上面的数据是ff2上的结果，ie7上也差不多，差距更小一点。<br><br>测试代码：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;C(i){<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">62</span><span style="color: #000000;">?</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;String.fromCharCode(i</span><span style="color: #000000;">+=</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">26</span><span style="color: #000000;">?</span><span style="color: #000000;">65</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">52</span><span style="color: #000000;">?</span><span style="color: #000000;">71</span><span style="color: #008000;">//</span><span style="color: #008000;">97-26</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</span><span style="color: #000000;">-</span><span style="color: #000000;">4</span><span style="color: #008000;">//</span><span style="color: #008000;">48-26-26</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">63</span><span style="color: #000000;">?</span><span style="color: #000000;">'_'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">64</span><span style="color: #000000;">?</span><span style="color: #000000;">'$'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:C(i</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">6</span><span style="color: #000000;">)</span><span style="color: #000000;">+</span><span style="color: #000000;">C(i</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">63</span><span style="color: #000000;">)<br>}<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;map&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{};<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;arr1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[];<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;arr2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[];<br><br></span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">1000</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;C(i);<br>&nbsp;&nbsp;map[c]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i;<br>&nbsp;&nbsp;arr1.push(c);<br>&nbsp;&nbsp;arr2.push(i);<br>}<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;mapTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;arrTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;inc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">while</span><span style="color: #000000;">(inc</span><span style="color: #000000;">++&lt;</span><span style="color: #000000;">500</span><span style="color: #000000;">){<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;map){<br>&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;map[n];<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">1000</span><span style="color: #000000;">;j</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">arr1[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">arr2[j];<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br>&nbsp;&nbsp;mapTime</span><span style="color: #000000;">+=</span><span style="color: #000000;">(t2</span><span style="color: #000000;">-</span><span style="color: #000000;">t1);<br>&nbsp;&nbsp;arrTime</span><span style="color: #000000;">+=</span><span style="color: #000000;">(t3</span><span style="color: #000000;">-</span><span style="color: #000000;">t2);<br>}<br><br>prompt(</span><span style="color: #000000;">"</span><span style="color: #000000;">mapTime/arrTime</span><span style="color: #000000;">"</span><span style="color: #000000;">,mapTime&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">'</span><span style="color: #000000;">/</span><span style="color: #000000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">arrTime)</span></div>
<br><br><img src ="http://www.blogjava.net/jindw/aggbug/120312.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-05-27 17:18 <a href="http://www.blogjava.net/jindw/archive/2007/05/27/120312.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几种脚本文本压缩方式压缩比率和解压性能的比较</title><link>http://www.blogjava.net/jindw/archive/2007/05/24/119553.html</link><dc:creator>金大为</dc:creator><author>金大为</author><pubDate>Thu, 24 May 2007 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/jindw/archive/2007/05/24/119553.html</guid><wfw:comment>http://www.blogjava.net/jindw/comments/119553.html</wfw:comment><comments>http://www.blogjava.net/jindw/archive/2007/05/24/119553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jindw/comments/commentRss/119553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jindw/services/trackbacks/119553.html</trackback:ping><description><![CDATA[刚刚修正了一个JSA的bug。<br>
<br>
顺便测试了一下文本压缩的性能，和纯packer 压缩，ShrinkSafe＋packer压缩。<br>
压缩大小：<br>
jquery-jsa-s.js（JSA的语法压缩）:29766 <hr>
jquery.compressed.js（ShrinkSafe语法压缩）:33992<br>
<hr>
jquery-jsa-st.js（JSA的语法压缩＋文本压缩）:19526 <hr>
jquery-packer.js（Packer文本压缩）:20977<hr>
jquery.compressed-packer.js（ShrinkSafe语法压缩＋Packer文本压缩）:21839<br>
<br>
有点奇怪的是，文本压缩和语法压缩是有一定互补性的，但是ShrinkSafe＋Packer比单纯的Packer文本压缩效率还低？？<br>
我想可能是ShrinkSafe做的一些语法补全（可省略的 {、}、;、），jQuery编码的风格导致。<br>
<br>
<h2>Firefox测试数据（10次压缩时间的毫秒数，连续5回测试数据）</h2>
jquery-jsa-st.js:784<br>
jquery-packer.js:1265<br>
jquery.compressed-packer.js:1529<br>
<br>
jquery-jsa-st.js:718<br>
jquery-packer.js:922<br>
jquery.compressed-packer.js:766<br>
<br>
jquery-jsa-st.js:753<br>
jquery-packer.js:872<br>
jquery.compressed-packer.js:828<br>
<br>
jquery-jsa-st.js:1438<br>
jquery-packer.js:1484<br>
jquery.compressed-packer.js:1735<br>
<br>
jquery-jsa-st.js:687<br>
jquery-packer.js:1236<br>
jquery.compressed-packer.js:1234<br>
<br>
<br>
<h2>IE5 测试数据（连续三回测试数据）</h2>
jquery-jsa-st.js:766<br>
--------------------------------------------------------------------------------<br>
jquery-packer.js:9765<br>
--------------------------------------------------------------------------------<br>
jquery.compressed-packer.js:10547<br>
<br>
<br>
jquery-jsa-st.js:671<br>
--------------------------------------------------------------------------------<br>
jquery-packer.js:9002<br>
--------------------------------------------------------------------------------<br>
jquery.compressed-packer.js:10265<br>
<br>
<br>
jquery-jsa-st.js:704<br>
--------------------------------------------------------------------------------<br>
jquery-packer.js:8232<br>
--------------------------------------------------------------------------------<br>
jquery.compressed-packer.js:10314<br>
<br>
<h2>总结</h2>
文本压缩是个比较耗时的操作，像JQuery这样大的类库普遍需要接近100毫秒的解压时间。<br>
如果需要兼容IE5这种老古董，那么最好不要用packer的文本压缩，太耗时。<br>
JSA1 对文本压缩做了些改进，表现还可以。<br>
<br>
如果要计较脚本文本压缩后的解压开销，建议使用JSA的语法压缩，配合服务器端的gzip压缩。<br>
不推荐dojo 的ShrinkSafe，原因是它的几个安全问题。 <img src ="http://www.blogjava.net/jindw/aggbug/119553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jindw/" target="_blank">金大为</a> 2007-05-24 09:28 <a href="http://www.blogjava.net/jindw/archive/2007/05/24/119553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>