Chrome 加载前扩展暂停
Chrome extension pauses before loading
问题
如何缩短单击扩展程序图标与显示内容之间的时间?
支持
我正在做一个非常简单的扩展。启动后加载速度很快,但在单击和弹出窗口加载之间有一点延迟。我已经添加了这个 here 的 gif。 (gif 看起来有点忙,所以我把它放在 link 下,这样它就不会灼伤你的眼睛!)它并没有真正做到公正,因为它在我的机器上加载速度更快由于某种原因比其他人的。
这个问题 (Slight loading delay with chrome extension popup) seems to address the same question, but it doesn't have an answer. I think that this question (load chrome extension popup faster) 也解决了这个问题,但它的答案似乎在解决不同的问题。
我的仓库在这里:https://github.com/bvn-architecture/shackleton
如果我分析扩展的加载时间,它会从弹出窗口出现时开始测量:
这意味着加载后大约 5 毫秒屏幕上出现了一些内容。它不包括暂停。
我认为您面临的延迟是由于 在 Chrome 中启动新任务进程所需的时间。
打开 Chrome 菜单 > 更多工具 > 任务管理器,您将看不到对您的扩展程序的任何引用。
现在单击您的扩展浏览器操作图标,您会看到,经过一些不同的延迟后,一个名为 "Extension : BVN toolbar" 的新条目将出现在任务管理器中。一旦任务出现,您的弹出窗口就会打开。
一些测试
如果您从 Chrome 扩展示例中测试 My Bookmarks 示例扩展,您将看到完全相同的行为。
现在,如果您看一下其他一些扩展程序,例如 Adblock Plus,它使用像您一样的浏览器操作 icon/popup,您会发现它的弹出窗口打开速度比您的快得多。
如果您再次检查任务管理器,即使未打开弹出窗口,您也会看到名为 "Extension : Adblock Plus" 的任务。
解释
这是因为许多扩展程序(如 Adblock 扩展程序)正在使用 persistent background pages,它们是在扩展程序的整个生命周期内都存在的单个长脚本 运行(除非您禁用它,否则请关闭您的浏览器等等)
如文档中所述,不鼓励使用持久性后台页面以支持 event pages(非持久性页面)。但是在你的情况下,使用事件页面并不能解决你的问题,因为当事件页面没有主动做某事时,它会被卸载以释放资源。
解决方案
简单的方法
在您的 manifest.json
文件中定义一个持久的后台页面将解决您的问题,但会导致不必要的内存使用来保持您的扩展任务 "alive"(并且您的扩展不需要它可以工作):
"background": {
"page": "popup.html"
},
反之
将问题提交给Google。也许他们可以针对这种情况进行一些优化,或者他们会为您提供更好的解决方案。你可以解释说这鼓励使用持久的后台页面而不是事件页面:-)
问题
如何缩短单击扩展程序图标与显示内容之间的时间?
支持
我正在做一个非常简单的扩展。启动后加载速度很快,但在单击和弹出窗口加载之间有一点延迟。我已经添加了这个 here 的 gif。 (gif 看起来有点忙,所以我把它放在 link 下,这样它就不会灼伤你的眼睛!)它并没有真正做到公正,因为它在我的机器上加载速度更快由于某种原因比其他人的。
这个问题 (Slight loading delay with chrome extension popup) seems to address the same question, but it doesn't have an answer. I think that this question (load chrome extension popup faster) 也解决了这个问题,但它的答案似乎在解决不同的问题。
我的仓库在这里:https://github.com/bvn-architecture/shackleton
如果我分析扩展的加载时间,它会从弹出窗口出现时开始测量:
这意味着加载后大约 5 毫秒屏幕上出现了一些内容。它不包括暂停。
我认为您面临的延迟是由于 在 Chrome 中启动新任务进程所需的时间。
打开 Chrome 菜单 > 更多工具 > 任务管理器,您将看不到对您的扩展程序的任何引用。
现在单击您的扩展浏览器操作图标,您会看到,经过一些不同的延迟后,一个名为 "Extension : BVN toolbar" 的新条目将出现在任务管理器中。一旦任务出现,您的弹出窗口就会打开。
一些测试
如果您从 Chrome 扩展示例中测试 My Bookmarks 示例扩展,您将看到完全相同的行为。
现在,如果您看一下其他一些扩展程序,例如 Adblock Plus,它使用像您一样的浏览器操作 icon/popup,您会发现它的弹出窗口打开速度比您的快得多。
如果您再次检查任务管理器,即使未打开弹出窗口,您也会看到名为 "Extension : Adblock Plus" 的任务。
解释
这是因为许多扩展程序(如 Adblock 扩展程序)正在使用 persistent background pages,它们是在扩展程序的整个生命周期内都存在的单个长脚本 运行(除非您禁用它,否则请关闭您的浏览器等等)
如文档中所述,不鼓励使用持久性后台页面以支持 event pages(非持久性页面)。但是在你的情况下,使用事件页面并不能解决你的问题,因为当事件页面没有主动做某事时,它会被卸载以释放资源。
解决方案
简单的方法
在您的 manifest.json
文件中定义一个持久的后台页面将解决您的问题,但会导致不必要的内存使用来保持您的扩展任务 "alive"(并且您的扩展不需要它可以工作):
"background": {
"page": "popup.html"
},
反之
将问题提交给Google。也许他们可以针对这种情况进行一些优化,或者他们会为您提供更好的解决方案。你可以解释说这鼓励使用持久的后台页面而不是事件页面:-)