使用Parse Javascript SDK缓存查询

时间:2014-02-13 04:02:42

标签: javascript caching parse-platform

是否可以使用Parse(parse.com)Javascript SDK缓存查询?

我发现的唯一参考是https://parse.com/questions/javascript-sdk-caching,它表示目前不支持。

由于上次链接的最后一次响应是从4个月前开始,我想知道现在是否支持它,或者是否有解决方法来缓存此查询。

1 个答案:

答案 0 :(得分: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进行重构(如果您可以使用浏览器支持池),自己维护缓存,或者只是让它构建并重新加载每个缓存条目时不时。另一个考虑因素是它希望每次都将EXACT相同的查询对象传递给q()。您可以尝试使用JSON.stringify(cls)作为键,但不保证结果。尽管如此,由于它只是一个缓存功能,因为JSON密钥重新排序导致的缓存缺失不会破坏任何内容......