0

假设我有一个列出给定城市餐厅的应用程序。可以想象,可能有相当多的列表构成大量数据,而且没有任何图像。

现在假设我想通过缓存让用户快速访问这些数据。我实现缓存的方法是简单地使用 存储数据ngStorage,检查它是否存在。如果存在,我从 中提取范围$localStorage,如果不存在,我从数据库中获取数据并设置$localStorage.

$scope.Restaurants = {};
if(Object.keys($localStorage.restaurants).length===0){ 

    $http.get('www.mydata.internet/RESTaurants').then(function(res){ // pardon the pun

        $localStorage.restaurants = res.data.restaurants;
        $scope.Restaurants = res.data.restaurants;

    });

} else $scope.Restaurants = $localStorage.restaurants;

这工作正常,直到我将图像存储在我的数据库中作为 base64。

突然之间,数据量显着增长,ngStorage 遇到了限制和中断。此外,拉下大量图像并将它们推送到本地存储中并不能很好地扩展。

但我仍然想缓存这些数据以避免每次需要时都进行数据库调用。

有没有办法像这样缓存大量数据?

4

1 回答 1

1

在这种情况下,肯定有很多需要考虑的地方。

我会首先考虑如何为应用程序加载数据,以确定是否真的需要缓存这么多数据。您要进行多少次服务器调用来加载数据?您是发出一个请求来预先获取所有数据(即选定城市的所有餐厅)还是一次加载一些数据(即一次服务器请求 5 家餐厅)?

另外,您是急切地加载还是懒惰地加载数据(或两者兼而有之)?您是否最初要求一些数据,然后在后台加载更详细的数据?

在回答了前面的问题后,确定是否仍然需要大型缓存,或者您是否可以重新设计数据加载方式以避免缓存或坚持使用您已经提到的较小缓存机制,例如本地存储。

如果您仍然需要更大的缓存机制,我会考虑尝试缓存数据服务器端,这样您就不会经常查询您的数据库。如果您必须在客户端(浏览器)上缓存大量数据,包括图像,我会考虑将图像作为 blob 存储在IndexedDB之类的东西中。

于 2017-03-16T00:55:51.663 回答