チェンジセット 329

差分発生行の前後
無視リスト:
更新日時:
2009/11/18 19:42:00 (10 か月 前)
更新者:
ngs
ログメッセージ:

implement cache

ファイル:
1 変更

凡例:

変更なし
追加
削除
  • trunk/jspreadsheet/jspreadsheet.js

    r328 r329  
    1414        }; 
    1515        var reqId = 0; 
     16        var cache = {}; 
    1617         
    1718        function getRandom(length) { 
     
    3435         
    3536        function ss(url,param) { 
    36  
    3737                param = $.extend(DEFAULT_PARAM,param); 
    3838                var _query; 
     
    7373                } 
    7474                 
    75                 function send(callback) { 
     75                function send(callback,nocache) { 
     76                        var cacheKey1 = encodeURIComponent(url); 
     77                        var cacheKey2 = encodeURIComponent(_query||"__NO_QUERY__"); 
     78                        cache[cacheKey1] = cache[cacheKey1]||{}; 
    7679                        var tqx = ""; 
    7780                        var rid = reqId++; 
     
    7982                                var handlerName = CALLBACK_PREFIX+getRandom(20); 
    8083                        } while(window[handlerName]); 
    81                         window[handlerName] = function(res){ 
    82                                 if(res.reqId==rid.toString()) complete(res,callback); 
     84                        function cb(res){ 
     85                                if(res.reqId==rid.toString()) { 
     86                                        if(res.table) { 
     87                                                cache[cacheKey1][cacheKey2] = res; 
     88                                        } 
     89                                        complete(res,callback); 
     90                                } 
    8391                                setTimeout(function(){ 
    8492                                        try { 
     
    8795                                },1); 
    8896                        }; 
     97                        if(!nocache&&cache[cacheKey1][cacheKey2]) { 
     98                                complete(cache[cacheKey1][cacheKey2],callback); 
     99                                return; 
     100                        } 
     101                        window[handlerName] = cb; 
    89102                        param.responseHandler = handlerName; 
    90103                        param.reqId = rid;