2016-11-16 50 views
3

I know当服务器返回304 NOT MODIFIED时,浏览器会透明地处理它,并且无法让任何客户端代码直接使用它。我的问题是,列表真的很大(> 4 MB未压缩)并将其转换为JSON需要相当长的时间(我的桌面上有70 ms,在Android上它的时间要长得多)。以角度方式有效处理304响应状态代码

我不想在这里使用angularjs缓存,因为HTTP请求必须完成。我不想使用部分列表。

我想使用E-Tag头文件和入侵defaultHttpResponseTransform会有所帮助,但我想知道是否有避免这种开销的标准方法。

+0

您是否尝试过在我的答案中提到的创建拦截器? – tomepejo

回答

1

只需比较代码中标头中的E-tag,即可将$cache与浏览器缓存结合使用。由于浏览器始终模拟200个状态码,因此无法捕捉304状态。有处理这种问题的库https://www.npmjs.com/package/angular-http-etag。但解析json的问题无法避免,因为localStorage也会将json序列化为字符串,所以您将不得不以ether方式解析它。我的建议是将json拆分成更小的块并根据需要请求它

+0

听起来不错!我*可以*避免序列化,因为我必须经常检查相同的数据,并计划使用非持久性缓存(只是一个普通的js对象)。实际上,'localStorage'太有限了(5MB左右)。分裂目前不是一种选择。 – maaartinus

+0

您可以尝试使用服务工作人员https://mobiforge.com/design-development/taking-web-offline-service-workers。 MB中的限制为50.另外,如果无法分割文件,请尝试对其进行压缩。 Json文件是非常可压缩的。只需通过tar.gz压缩文件即可将文件大小分成两半。 https://www.npmjs.com/package/tar.gz。还要尝试在文件中查找可重复的数据并手动压缩,方法是只保留该字符串的一个副本,并使用该字符串的引用将其替换为文件 – Kliment