从sessionStorage服务需要很长时间
问题描述:
我有一个函数,应该从sessionStorage返回一个字典,如果它存在,如果不存在,它将从API加载字典到sessionStorage,然后返回字典。从sessionStorage服务需要很长时间
self.getDictionary = function(dictionary){
var deferred = $q.defer();
var saved_dictionary = JSON.parse($window.sessionStorage.getItem('dictionary_' + dictionary));
if (saved_dictionary && saved_dictionary !== "null"){
deferred.resolve(saved_dictionary);
} else {
var apiData = {module: "Dictionaries", method: "getDictionary", data: {name: dictionary}};
apiService.execute(apiData).then(function (response) {
$window.sessionStorage.setItem('dictionary_' + dictionary, JSON.stringify(response));
deferred.resolve(response);
});
}
return deferred.promise;
};
我想缓存字典,因为它可能非常大(约0.5MB JSON)。
样品词典:
{"DictionaryName":"Gaming","DictionaryCategory":[{"CategoryName":"Games","MandatoryAtLeast":1,"CategoryWords":[{"title":"zelda","score":1,"exact":true,"mandatory":false,"reject":false},{"title":"mass effect","score":1,"exact":false,"mandatory":true,"reject":false},{"title":"pokemon","score":1,"exact":false,"mandatory":true,"reject":false},{"title":"fallout","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"cs:go","score":1,"exact":true,"mandatory":false,"reject":false},{"title":"sims","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"until dawn","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"deus ex","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"skyrim","score":1,"exact":false,"mandatory":true,"reject":false}]},{"CategoryName":"Companies","MandatoryAtLeast":1,"CategoryWords":[{"title":"bioware","score":1,"exact":false,"mandatory":true,"reject":false},{"title":"bethesda","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"steam","score":1,"exact":false,"mandatory":true,"reject":false},{"title":"valve","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"alienware","score":1,"exact":false,"mandatory":false,"reject":false}]},{"CategoryName":"other","MandatoryAtLeast":1,"CategoryWords":[{"title":"gamer","score":1,"exact":false,"mandatory":true,"reject":false},{"title":"mods","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"horror","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"survival","score":1,"exact":true,"mandatory":false,"reject":false},{"title":"multiplayer","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"action","score":1,"exact":true,"mandatory":true,"reject":false},{"title":"fps","score":1,"exact":false,"mandatory":true,"reject":false},{"title":"shooter","score":1,"exact":false,"mandatory":false,"reject":false},{"title":"mmo","score":1,"exact":false,"mandatory":true,"reject":false}]}]}
的问题是,从高速缓存服务的字典是没有帮助。从sessionStorage服务字典所用的时间几乎与从远程API加载字典所需的时间一样长。
为什么从sessionStorage返回这么久?
答
调试后,似乎问题不是sessionStorage。
问题是AngularJS需要一个年龄来呈现1000多个元素的ng-repeat。这是我将不得不考虑的下一件事
为什么在调用'JSON.parse()'之前不检查'sessionStorage'中是否定义了key? – guest271314
我想我可以,但我不认为这会有很大的不同。据我所知,在空值上调用JSON.parse()是可忽略的 –
很长时间?花费的时间有什么问题? – charlietfl