在Angular中高效处理304响应状态码

3

我知道当服务器返回304 NOT MODIFIED时,浏览器会自动处理它,没有任何客户端代码可以直接使用它。我的问题是列表非常庞大(> 4 MB未压缩),将其转换为JSON需要相当长的时间(在我的桌面上为70毫秒,在Android上要花费更长的时间)。

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

我猜想使用E-Tag头并且hack进defaultHttpResponseTransform可能会有所帮助,但我想知道是否有一种标准方法来避免这种开销。


你尝试过按照我的回答创建一个拦截器吗? - Tome Pejoski
1个回答

1
你可以通过在代码中比较头部的E-tag,将$cache与浏览器缓存相结合。你无法捕获304状态,因为浏览器始终模拟200状态码。有一种库可以处理这种问题https://www.npmjs.com/package/angular-http-etag。但解析json时会遇到无法避免的问题,因为localStorage也会将json序列化为字符串,所以你必须以某种方式对其进行解析。我的建议是将json拆分成较小的块,并根据需要请求它们。

很好!而且我可以避免序列化,因为我经常需要检查相同的数据,并计划使用非持久性缓存(只是一个普通的js对象)。实际上,localStorage太有限了(大约5 MB左右)。目前拆分不是一个选项。 - maaartinus
你可以尝试使用Service Worker https://mobiforge.com/design-development/taking-web-offline-service-workers。文件大小限制为50MB。如果无法分割文件,请尝试压缩它。Json文件非常可压缩。您可以使用tar.gz压缩将文件大小减半。https://www.npmjs.com/package/tar.gz。还要尝试在文件中查找可重复数据,并通过仅保留该字符串的一个副本并使用该字符串的引用来手动压缩它。 - Kliment

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接