<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-57  評論-129  文章-0  trackbacks-0
     

    裝載效率測試
    測試頁面見:test/load-eff-test.html

    為了測試結果更顯客觀,我選擇了第三方類庫的裝載測試:
    'com.yahoo.yui.*',
    'net.conio.prototype.*',
    'net.fckeditor.*',
    'org.jquery.*',
    'us.aculo.script.*'
    共22個腳本文件(對于JSI來說還有諾干包定義文件)。

    FF2:  
    標記導入時間(原始方式):
    469,469,1047,484,484,437,469,484  
    同步導入時間:
    469,453,484,437,469,453  
    延遲導入時間:
    921,765,891,906,953,906,922  
    異步導入時間:
    859,1093,1141,1031,1641,1125,1078,1093,1157,1141  
      
    IE7:  
    標記導入時間:
    343,297,297,344,328,328  
    同步導入時間:
    281,250,235,235,234,234,250,265  
    延遲導入時間:
    922,422,406,391,391,391,407,391  
    異步導入時間:
    625,672,672,703,703,672,703,704,688  



    運行時間測試
    測試腳本管理后對新能的影響,影響因素有:全局變量和局部變量的查找時間差異,eval的腳本和script標記直接插入的腳本的可能差異。(這 個測試不具有普遍性,這里我主要是測試了一下瀏覽器對局部變量的訪問速度【JSI里面訪問變量都是裝載單元內的局部變量】,所以故意測試了大量局部變量訪 問的操作)
    測試頁面見:test/runtime-eff-test.html

    FF2:  
    jsiTime:        
    845,    927,    598,    687,    764,  
    scriptTime:     
    1432,   950,    1305,   1278,   1219,  
    evalTime:       
    1644,   1373,   1322,   1186,   1360,  
    execTime:       
    0  
    dscriptTime:    
    1432,   950,    1305,   1278,   1219,     
      
    IE7:  
    jsiTime:    
    295,    205,    157,    315,    156,    142,    375,    328,    172,    172,      
    scriptTime: 
    172,    172,    189,    140,    251,    187,    217,    203,    172,    234,      
    evalTime:   
    236,    249,    139,    172,    281,    171,    172,    108,    436,    359,      
    execTime:   
    219,    234,    314,    157,    220,    266,    204,    234,    187,    95,   
    dscriptTime:    
    187,    265,    294,    326,    187,    328,     141,   221,    127,    249,       



    上面的基數太小,隨機誤差太大,調整原始數據從新測試一遍jsiTime和scriptTime

    jsiTime:    576,    658,    688,    703,    611,    608,          
    scriptTime: 
    706,    608,    562,    547,    655,    657,    


    總結:

    JSI的裝載性能表現不錯,完全不必計較。
    托管代碼的運行性能也沒有太大區別,不過,因為。JSI托管腳本使用的變量基本都是裝載單元內的局部變量(本地聲明變量,或者外部依賴的引用或值拷貝),所以,對于FF這類局部變量比全局變量訪問速度快不少的解釋引擎,JSI托管腳本可以達到更好的運行效率。

    有個奇怪的問題,JSI在裝載類庫時,與傳統模式相比,肯定增加了些額外的運算,但是,貌似JSI的同步裝載模式下,裝載腳本的耗時比傳統模式還少(IE 表現明顯)?為何?
    歡迎大家對這奇怪的現象提出自己的猜想,我稍后貼出我對此問題的看法^_^

    posted @ 2007-06-22 15:01 金大為 閱讀(702) | 評論 (0)編輯 收藏

     

    JSI簡介:

    JSI 是一個 開放的、無侵入的 腳本庫管理框架,內核不提供任何具體功能,有一些功能子項目,如網頁裝飾引擎。

    更多信息請查看:http://www.xidea.org/project/jsi/


    JSA簡介:
    JSA最初是做JSI編譯處理的一個小工具,現在也可以用來混淆、壓縮腳本。支持swing和ant task兩種工作方式。
    可以通過webstart啟動:啟動JSA(允許訪問文件系統)沙箱內運行(功能受限)




    這次發布的JSI2Alpha相對于以前的預覽版本,做了一次全面的重構;同時對API做了些簡化。

    目前JSI2的公開API有:


    /* 導入函數 */  
    $import(
    <string>path,<boolean|Function>callbackOrLazyLoad[可選參數],<Object>target[可選參數])  
      
    /* 日志設置相關 */  
    $JSI.setDefaultLogLevel(level)  
    $JSI.setLogLevel(pathPattern,level)  
      
    /* 裝飾引擎相關函數 */  
    $JSI.addDecoratorProvider(pkg,alias…) 
    //添加裝飾包.  
    $JSI.decorate ( ) //準備執行裝飾器任務,一般在配置文件(config.js)中調用.   
      
    /* 用于包定義的Package成員函數,在__package__.js中調用(this指向當前package對象) */  
    this.addScript(scriptPath,objectNames)//添加腳本及其聲明的對象(函數、方法名).   
    this.add*Dependence(thisPath,targetPath,beforeLoad)//添加腳本依賴.  
    this.setImplementation(realPackage)//設置具體實現包(當前包只是其別名,并無任何內容)。 

     


    我們會盡量將JSI做成與具體功能無關(專著于腳本管理)。

    對于js.*.*這個類庫,做了些精簡。
    只保留下列元素

     

    #js.html //保留這個包,因為這些實在太常用了。  
       * BrowserInfo  
       
    * EventUtil  
       
    * StyleUtil  
      
    #js.util
    //保留這個包主要因為異步裝載用到這些類庫  
       * LoadTask  
       
    * Request  
       
    * ScriptLoadTask  
       
    * TaskQueue  

     

    發布文件說明:
    自該版本啟,source目錄將不再打包。
    但是在scripts目錄下新增boot-with-source.js文件,該文件中包含全部源代碼的數據。
    里面編碼的源代碼可以通過我們的文檔工具查看。讓大家習慣一下這個工具的使用:)

    JSA1beta:增加了對JSI2的編譯支持,同時對于普通腳本的壓縮,也增加了一些功能:
    1. ant task 增加多文件分組合并。
    2. swing ui 修正文件編碼的bug。

    下載:
    javaeye group: http://jsi.group.javaeye.com/shares
    sourceforge: <系統最近好像有問題,我的文件一直沒能上傳成功,要過一段時間再說> 。。。。。

    posted @ 2007-06-22 14:36 金大為 閱讀(752) | 評論 (0)編輯 收藏
    今天抽空測試了一下JSI當前狀態的瀏覽器兼容性,一個頭疼的問題困擾了很久。
    找出問題出自,懷疑是一個opera的bug。

    function test(x){
      
    try{
        
    if(x){
          
    return 1;
        }
    else{
          
    return 2;
        }
      }
    catch(e){
        x
    =1;
      }
    finally{
        x
    =2;
      }
    }

    語法檢查就通不過,報告錯誤:
    le://localhost/D:/eclipse/workspace/JSI/web/scripts/core.js
    Event thread: BeforeExternalScript

    opera8報錯,opera9好像就沒有這個問題。
    貼出來,讓有類似問題的人省點心。
    posted @ 2007-06-20 21:42 金大為 閱讀(126) | 評論 (0)編輯 收藏

    剛發布JSA的webstart版,順便吧這個古董級別的小程序也發布一下。
    僅供那些和我一樣棋術平平的無聊人士打發時間。

    高手就不必了:)
    當能,如果是想找個地方出出氣,也可以,呵呵。


    http://www.xidea.org/webstart/chess.jnlp



    沒有棋譜,所以,開局的棋力很差。中局還行。

    posted @ 2007-06-14 10:51 金大為 閱讀(745) | 評論 (2)編輯 收藏
    測試了一下trimpath模板引擎和一個我以前編寫xml模板引擎,顯示測試結果,828/16。

    太讓我振奮了。原想,如果效率太低我就放棄這個項目,貌似結果:這個流行的js模板引擎,和我沒做優化的xml模板引擎還有這么大的差距???

    仔細檢查一下,暈倒,測試模板數據搞錯了:(

    糾正過來,測試數據顯示,trimpath比xml模板引擎要快好幾倍:(

    而且,如果模板內使用的循環次數越多,差距越大:(

    比較掃興的結果。
    決定吧這個東西從jsi系統api中刪除。

    不過,感覺,雖然有這點差距,xml模板引擎還是可以作為一個備用選擇。
    基于js標記庫,類el表達式,對于熟悉jsp2.0,jstl的程序員來說,還是比較易懂,擴展也相對簡單(trimpath沒怎么研究,或許是錯的)。

    下載測試:
    (XML Template是從jsi中拉出來的,部分測試中沒有用到的依賴沒有包括進去)

    posted @ 2007-06-08 16:15 金大為 閱讀(935) | 評論 (2)編輯 收藏
      一直沒有找到好用的 javascript格式化工具,不過UE有個非常漂亮的功能,多行編輯,可以輕松的批量縮進。
      但是eclipse呢?很遺憾,沒有,不過用正則表達式可以輕松完成這個功能,匹配整行,替換時在行前加上縮進空格。

    find:^.*
    replace With:  $0

    說到這個正則,鄙視一下js的正則語法,居然匹配組是 $1 $2 $3 ....索引從1開始,但是匹配全部為什么要來個$&?  多么難記??還是eclipse的$0方便
    而且js的match函數返回的數組還是 [全匹配,組1,組2....],全匹配索引就是0嘛! 居然要來個$&??
    扼殺我們的聯想天性。

    posted @ 2007-06-08 11:33 金大為 閱讀(735) | 評論 (0)編輯 收藏
    今天和網友聊起在javascript里面實現DateFormat 的話題。

    把想法發布一下,當是筆記。

    格式化:
      1、先用正則把日期表達式分段:
        var tokens = "yyyy-MM-dd(沒有時間)".match(/y+|M+|d+|m+|[^yMdm]+/g)
        //結果數組為:yyyy,-,MM,-,dd,(沒有時間)
      2、將其中的yyyy MM dd 替換成相映的處理對象
     
      3、格式化時,先復制數組,依次遍歷,如果元素是處理對象,那么元素值替換成處理結果。

      4、將新數組join。即為需要結果。

      5、parse時。先復制數組,若元素為字符串,精確匹配。若未處理對象,讀取需要的值,匹配失敗,則終止操作,返回結果。




    想法而已,實際實現時可能還有很多現在無法意料的事情:)

    posted @ 2007-06-07 16:27 金大為 閱讀(1390) | 評論 (3)編輯 收藏
    為了jsi2 alpha的盡快發布,我對jsi 的系統api重構了一下,刪除了一些不夠成熟或者沒有必要的api(將他們拖到org.xidea.* 命名空間下)。


    更新(2007-6-9)
    接上,移除了xml命名空間及其內容,裝飾引擎。io包并入util了,移除了一些腳本,如xml 模板引擎、裝飾引擎實現等。。。
    基本上做到了功能無關了
    只剩下html包和util包。lang包這種語言兼容包不說。

    現在的類庫只有(數據拷貝自JSI jsdoc):

    #js.html //保留這個包,因為這些實在太常用了,
       * BrowserInfo
       //保留Decorator是因為裝飾器初始化,還是受到點特別關照
       * Decorator
       * EventUtil
       * StyleUtil

    #js.util//保留這個包主要因為異步裝載用到這些類庫
        * LoadTask
        * Request
        * ScriptLoadTask
        * TaskQueue


    現在的類庫只有(數據拷貝自JSI jsdoc):

    #js.html //保留這個包,因為這些實在太常用了,
       * BrowserInfo
       
    //保留Decorator是因為裝飾器初始化,還是受到點特別關照
       * Decorator
       
    * EventUtil
       
    * StyleUtil

    #js.util
    //保留這個包主要因為異步裝載用到這些類庫
       * LoadTask
       
    * Request
       
    * ScriptLoadTask
       
    * TaskQueue 

    歡迎大家提出自己的看法:)



    posted @ 2007-06-07 11:48 金大為 閱讀(748) | 評論 (12)編輯 收藏
    JSI 自身提供一些常用API,數量極少,盡量以一種正式的風格提供,盡量回避爭議。
    有些是啟動文件用到的,如任務隊列支持,還有如裝飾引擎直接用到的,如BrowserInfo、EventUtil、StyleUtil等。
    對于啟動文件中未直接用到的,如果風格的爭議太大,都將剔除出去。


    BrowserInfo對象:

    /**
     * BrowserInfo 對象,用于判斷瀏覽器的相關信息,如瀏覽器類型、quirks模式、客戶端語言(簡體中文?英語..未實現)、操作系統(未實現)等等。
     * @public
     
    */
    var BrowserInfo = {
      isIE : falseChecker,
      isOpera : falseChecker,
      isGecko : falseChecker,
      isNetscape : falseChecker,
      isMozilla : falseChecker,
      isFirefox : falseChecker,
      isKhtml : falseChecker,
      isSafari : falseChecker,
      isKonqueror : falseChecker,
      isQuirks : 
    function(){…}
    };

    其中最常用的要數 is<瀏覽器類別>(最小版本號碼,最大版本號)。
    此外,我還將BrowserInfo的函數拷貝到navigator對象上,這個有無必要呢?
    //@Deprecated ???
    for(var n in BrowserInfo){
      window.navigator[n] 
    = BrowserInfo[n];
    }

    不同之處:

    現在在瀏覽器判斷上面,一般是用常量表示,比如isIE之類的,JSI的BrowserInfo使用函數,以便提供更強大更靈活的功能。

    EventUtil
    EventType 對象的成員函數有:

    addListener(el, type, fn, cap)
    removeListener(el, type, fn, cap)

    add
    <Eventtype>Listener(element, listener, captrue)
    如addLoadListener,addMousedownListener,addMouseoutListener    
    remove
    <Eventtype>Listener(element, listener, captrue)
    createEvent(type, canBubble, cancelable)
    dispatchEvent(el, even)

    其中: <Eventtype>代表一種事件類型。
    W3C事件類型有:
    var events = ['click','mousedown','mouseup','mouseover','mousemove','mouseout','load','unload','abort','error','select','change','submit','reset','focus','blur','resize','scroll'].
                 concat(['DOMFocusIn','DOMFocusOut','DOMActivate']);


    此外,還添加了一種事件類型:DOMLoad。就是mozilla的DOMContentLoaded事件,在Dom樹構造完成但圖片資源等可能未完成時觸發。
    對于這種事件類型, element,  captrue參數都將忽略。暫時只有添加函數,沒有刪除函數(有刪除的必要嗎?)。

    不同之處:

    這個事件處理函數集與其他常見方式的卻別有:
    1. this支持。IE的attach方法添加的函數,運行時this指向window對象,JSI吧這點給糾正過來,與w3c的addEventListener行為一致。
    2. 事件類型直接體現在函數名中,這樣有利于書寫上的錯誤及早發現。
    3. 事件格式化,將事件的訪問方式格式化為W3C的方式。
    4. 自動清理,這也不算不同吧,現在大多數JS庫都提供這個功能,就是在離開頁面時清理全部注冊事件。但是這對一些單頁程序是無效的(OPOA,本人也比較討厭這種模式,呵呵),以后是否可以提供一個purgeElement函數,用于清理指定元素及其子元素的事件呢?
    非常希望大家積極發表自己的看法,該修改就修改,如果爭議太大,那么我將吧這些從系統API中移除。

    程序下載

    這個API也可以脫離JSI使用,只是,在編寫的時候,因為有了JSI的保護,我使用了不少內部變量,為避免可能的沖突,做了如下處理。


    var BrowserInfo = function(){
      
    //#include(browser-info.js).
      return BrowserInfo;
    }

    var EventUtil = function(){
      
    //#include(event-util.js).
      return EventUtil;
    }

    下載地址


    posted @ 2007-06-06 12:17 金大為 閱讀(729) | 評論 (0)編輯 收藏

    QQ群里無聊的對話,貼出來:

    小馬猴(53958317) 20:31:20
    那二進制還中國發明的呢
    五風樓客(63515213) 20:36:02
    哦,二進制與中國什么關系,還真不知道呢,呵呵?
    五風樓客(63515213) 20:36:23
    那個朝代的事呢?
    小馬猴(53958317) 20:35:43
    據說是萊布尼茨在周易中發現了二進制
    海闊天空(149788288) 20:35:46
    我也孤陋寡聞了
    小馬猴(53958317) 20:36:02
    就是那個八卦圖
    五風樓客(63515213) 20:37:04
    ^_^,強
    五風樓客(63515213) 20:37:49
    今天才知道,我們大中國計算機技術領先西方三千年:)
    海闊天空(149788288) 20:37:16
    是啊是啊,中國領先的多著呢

    五風樓客(63515213) 20:38:09
    不止,估計有個四千年左右把:)
    呵呵
    小馬猴(53958317) 20:37:22
    不過外國人看周易,發明了計算機,中國人看周易,發明了算命。
    小馬猴(53958317) 20:38:25
    搜狐這兩天就請了幫看風水的人去看他總部呢。那些看風水的就是什么周易什么什么研究會的。
    五風樓客(63515213) 20:39:20
    找張八卦圖看看,能不能發現什么玄機呢:)
    海闊天空(149788288) 20:38:56
    八卦新聞
    五風樓客(63515213) 20:40:08
    不管什么新聞,俺是一直非常鄙視搜狐的。
    小馬猴(53958317) 20:39:23
    我估計八卦圖說不定是中國古代發明的圖靈機呢
    小馬猴(53958317) 20:39:29
    哈哈
    Tu-160(382392596) 20:41:50
    哈哈哈
    海闊天空(149788288) 20:42:03
    八卦是好東西啊,兩儀生四向,四向生八卦
    海闊天空(149788288) 20:42:17
    下面一句是什么來著
    五風樓客(63515213) 20:44:06
    太極生兩儀 兩儀生四向 四向生八卦 八卦生萬物
    小馬猴(53958317) 20:43:49
    嗯,于是萊布尼茨從這句話悟出了二進制
    五風樓客(63515213) 20:45:19
    呵呵,原來最早使用8進制的不是瑪雅人,是俺們先輩,呵呵
    海闊天空(149788288) 20:44:34
    確實有2進制的意思啊

    海闊天空(149788288) 20:44:43
    中國古代是用16進制吧?
    五風樓客(63515213) 20:45:51
    恩,至少重量單位是的
    五風樓客(63515213) 20:46:23
    小時候還經常聽老人們說16量的秤,呵呵
    海闊天空(149788288) 20:47:05
    一打
    霖雨(3366414) 20:47:35
    半斤八兩

    posted @ 2007-06-06 08:19 金大為 閱讀(226) | 評論 (2)編輯 收藏
    僅列出標題
    共6頁: 上一頁 1 2 3 4 5 6 下一頁 
    主站蜘蛛池模板: 特级毛片爽www免费版| 亚洲国产成人久久| 特级av毛片免费观看| 成人毛片18女人毛片免费视频未| 亚洲黄色网址大全| 99热在线精品免费播放6| 亚洲va中文字幕无码久久不卡| 国产日韩久久免费影院| 在线亚洲精品福利网址导航| 国产亚洲情侣久久精品| 亚洲国产午夜福利在线播放| yellow免费网站| 亚洲综合无码AV一区二区| 99免费精品视频| 亚洲福利视频一区| 4399好看日本在线电影免费| 亚洲色精品三区二区一区| 国内精品免费视频自在线| 在线观看亚洲精品专区| 久久久久亚洲AV成人网| a级在线观看免费| 亚洲第一成年网站大全亚洲| 四虎影视www四虎免费| 日韩在线视频播放免费视频完整版 | 久久青青草原亚洲av无码app| 日韩电影免费在线观看| 亚洲一区二区三区免费观看| 日本一线a视频免费观看| www免费黄色网| 久久av无码专区亚洲av桃花岛| 欧亚精品一区三区免费| 老湿机一区午夜精品免费福利| 永久亚洲成a人片777777| 日本XXX黄区免费看| 一区免费在线观看| 久久亚洲AV成人无码软件| 成人免费在线观看网站| 国产又黄又爽又大的免费视频| 亚洲沟沟美女亚洲沟沟| mm1313亚洲精品国产| 最好看最新的中文字幕免费|