Chrome扩展MV3有很大的持久内存使用量,有可能吗? [英] Chrome extension MV3 with large persistent RAM usage, is it possible?

查看:23
本文介绍了Chrome扩展MV3有很大的持久内存使用量,有可能吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个Chrome扩展,它旨在检查用户导航到的任何网页的内容,然后提醒用户该内容的某些功能。(也许最容易想到在网页的文本数据中搜索大量字符串,尽管这是一个相当大的简化。)根据设计,扩展可以检测到非常大的一组(数千万)功能,并因此可以对其做出反应。每个这样的功能都可以表示为一个JS编号(8字节),因此数据总量可能在100 MB或更大的数量级。

数据可以存储在IndexedDB中,但为了能够快速分析页面数据(由内容脚本发送),后台页面脚本(在MV2中)或服务人员(在MV3中)确实需要将要素(已检查的要素)存储在RAM中,以便能够快速检查网页中数量少得多的要素,以查看其中是否存在于其自己的数据集中。

这个设置在我创建的原型清单版本2(MV2)扩展中实际上工作得很好。后台脚本首先从IndexedDB获取数据并将其放入RAM的结构中。这在我的笔记本电脑上需要一些时间(一些秒数,我没有准确的数字),但只需要在浏览器启动时执行一次。之后,后台脚本能够快速响应内容脚本的请求,检查网页内容。

现在,在尝试过渡到清单版本3(MV3)时,问题是服务工作者不是持久的,甚至不是特别长寿。因此,直接转换将使服务工作者在每次重新启动时执行从IndexedDB到RAM的昂贵且缓慢的加载。这显然不是工作正常的设置。

那么显而易见的问题是:有什么方法可以避免Chrome停止服务工作进程(从而使扩展服务工作进程持续很长时间)?如果不是,有没有什么方法可以让RAM中的数据保留下来,让服务人员在启动时获取对它的访问权限?(我远不是Chrome扩展和服务人员的专家,所以如果我的问题太天真了,我道歉。)我读到了一些讨论,似乎表明上述两种情况目前都不可能实现,但如果是这样的话,基本上就会使整个概念在MV3下变得不可能实现。有什么变通办法吗?(如果可以,这些解决方案在Chrome Web Store审核过程中是否可接受?)

如有任何指点,我将不胜感激!

推荐答案

我遇到过类似的情况,扩展基于以P2P方式共享的CRDT仅附加日志。如果添加重复或不必要的数据,此日志将变得太大。

第一个设计

我最初想要一个将日志保存在内存中的后台脚本,以及在遇到感兴趣的事情时通知后台脚本的内容脚本。这样,后台脚本可以将新信息与日志中已有的信息进行比较,并决定是否添加/更新该信息。我查看了Keep-Aliveworkaround,并对Chrome Web Store的审查流程持类似的保留意见。

MV3设计

为了避免内存中的MV2架构,我更新了设计,以使用更多的存储和处理能力,而不是内存。内容脚本只是将它通常发送到后台脚本的任何内容写入到本地存储。当服务人员唤醒它时:

  1. 将整个日志读入内存
  2. 读取内容脚本记录的所有项目
  3. 执行的逻辑与从内容脚本接收消息时执行的逻辑相同

上面的设计使用了更多的存储空间来存储内容脚本遇到的所有内容。无论何时运行,它还必须将整个日志读取到内存中。它确实避免了在100%的时间内连接内存。

这种架构让我想起了在Android或iOS移动应用程序开发中所做的权衡,除了极少数情况外,您的任务随时都可能被存档。MV3确实需要添加一些类似于Android的AcquireWakeLock(),但我不会屏息等待,因为它很快就会发生。

这篇关于Chrome扩展MV3有很大的持久内存使用量,有可能吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆