2014-02-13 61 views

回答

5

只需要一點點修改,你可以使用包裝器方法自己緩存它(或關於任何東西)。

例如,我修改https://parse.com/docs/js/symbols/Parse.Query.html緩存:

var cacheKeys = [], 
    cacheVals = []; 

function q(cls, ok, fail) { // query wrapper that implements caching 

    // store or fetch from cache if available: 
    var slot = cacheKeys.indexOf(cls); 
    if (slot !== -1) { 
     return ok(cacheVals[slot]); 
    } else { 
     slot=cacheKeys.length; 
     cacheKeys.push(cls); 
    } 
    //normal query code: 
    var query = new Parse.Query(cls); 

    query.find({ 
     success: function(results) { 
      cacheVals[slot] = results; //cache results 
      ok(results); // call traditionally 
     }, 

     error: fail || console.error.bind(console) 
    }); 

} // end q() 

注意,這可以積累聯合國需要緩存條目隨着時間的推移,所以你可能想用一個WeakMap重構(如果你可以用瀏覽器活支持池),自己維護緩存,或者讓它隨時構建和重新加載。另一個考慮是它期望每次都將相同的查詢對象傳遞給q()。您可以嘗試使用JSON.stringify(cls)作爲鍵,但結果不能保證。儘管如此,由於它只是緩存功能,因JSON密鑰重新排序而導致的緩存未命中不會破壞任何內容......

+0

問題是我無法使用服務器信息來緩存(即元素/集合更改?) –

+0

請您詳細說明如何使用限制,近似,跳過等限制使用此方法? –

+0

@IvanWang:如果我理解了這個願望,我認爲你並不需要修改任何東西來支持約束,你只需要記住成功處理程序並在包裝程序中回憶。 – dandavis