翻译机

该脚本用于翻译各类常用社交网站为中文,不会经过中间服务器。

< Commentaires sur 翻译机

Question / commentaire

holynnchenAuteur
§
Posté le: 2024-08-17
Édité le: 2024-08-17

关于新功能【压缩缓存】解决的问题以及相关的注意事项

holynnchenAuteur
§
Posté le: 2024-08-17
Édité le: 2024-08-17

在release log里写了这个问题但可能用户不太理解为什么需要这个功能,因此在这里讲解一下。

背景:

近期有用户反馈特定站点翻译忽然全部错误,无法翻译,但其他站点正常,要求截图控制台后发现有以下报错

DOMException: Failed to execute 'setItem' on 'Storage': Setting the value of '谷歌翻译mobile-Solid updates as always Jave ' exceeded the quota.

因此确认这个问题是写入缓存失败,缓存大小达到上限。

修复方式:重启浏览器后反馈正常

第一次碰到这个问题,查询后才了解sessionStorage本身是有存储上限的,在2.5-10m左右,那么考虑2.5m的话也仅能存储约87.4w的中文字符,在某些特定场景下会达到上限,例如:一次性在同一站点查看大量文章,长期不关浏览器(sessionStorage在关闭浏览器后自动清空)。以上情况就会导致缓存写满。

考虑这个情况因此做了压缩缓存的功能,使用lz-string压缩打包到同一个object的缓存,简单测试下可以压缩50%以上的空间,同时随着总缓存越来越大,压缩比例也会越来越高。但同时也会带来的负面作用是会带来潜在的性能损耗,这里我没有进行仔细的测试,感兴趣的朋友可以测试下并把结果也分享下,不过想来频繁对几m大小的json进行stringify应该会有一些用户体验的影响。当然这里后续加个小小的优化,改为异步操作。

综上所述,添加了这个功能来缓解这个问题,是的,只能缓解,只是上限应该能翻好几倍,根治的方法还得是清理缓存,也就是重启下浏览器就ok。

Q: 为什么不使用indexedDB

A: indexedDB固然好用,但是没有比较好的方式确定什么时候进行清理,如果不清理必然会达到写满的状态,所以使用浏览器来控制清理策略的sessionStorage更好。

Poster une réponse

Connectez-vous pour poster une réponse.