Chrome扩展程序在加载前暂停

时间:2015-03-22 06:32:15

标签: google-chrome-extension

问题

如何缩短点击扩展图标和正在显示的内容之间的时间?

支持

我正在做一个非常简单的扩展。它一旦启动就会快速加载,但点击和弹出加载之间会有一点延迟。我添加了这个here的gif。 (gif看起来有点忙乱,所以我把它放在一个链接下面,这样它就不会烧伤你的眼睛!)它真的不公正,因为它在我的机器上的加载比其他人的更快某种原因。

这个问题(Slight loading delay with chrome extension popup)似乎解决了同样的问题,但它没有答案。我认为这个问题(load chrome extension popup faster)也解决了这个问题,但它的答案似乎是解决了一个不同的问题。

我的回购在这里:https://github.com/bvn-architecture/shackleton

如果我描述了扩展程序的加载时间,它将从弹出窗口显示时开始测量:

enter image description here

这意味着加载后屏幕上有大约5ms的内容。它不包括暂停。

1 个答案:

答案 0 :(得分:2)

我认为您所面临的延迟是由于在Chrome中启动新任务流程所需的时间

打开 Chrome菜单>更多工具>任务管理器,您将看不到任何对您的分机的引用 现在点击你的扩展浏览器 - 动作图标,你会看到,经过一些不同的延迟,一个名为"扩展名:BVN工具栏的新条目"将出现在任务管理器中。一旦任务出现,您的弹出窗口就会打开。

一些测试

如果您从Chrome扩展程序示例中测试My Bookmarks示例扩展程序,您将看到完全相同的行为。

现在,如果你看一下像Adblock Plus这样的其他扩展程序,它们使用像你这样的浏览器动作图标/弹出窗口,你会看到它的弹出窗口比你的打开速度快得多。
如果再次检查任务管理器,您将看到一个名为" Extension:Adblock Plus"即使弹出窗口没有打开。

说明

这是因为许多扩展程序(例如Adblock)都使用persistent background pages,这些扩展程序是在您的扩展程序的生命周期内存在的单个长期运行的脚本(直到您禁用它,关闭浏览器等。)

正如文档中所提到的,不鼓励使用持久性背景页面而使用event pages(非持久性页面)。但在您的情况下,使用事件页面无法解决您的问题,因为当事件页面没有主动执行某些操作时,会将其卸载以释放资源。

解决方案

简单方法

manifest.json文件中定义一个持久性背景页面可以解决您的问题,但会导致不必要的内存使用来保持您的扩展任务" alive" (并且您的扩展程序不需要它工作):

"background": {
    "page": "popup.html"
},

另一种方式

将问题/问题提交给Google。也许他们可以对这种情况进行一些优化,或者他们会为您提供更好的解决方案。你可以解释一下,这鼓励使用持久性背景页而不是事件页: - )