【问题标题】:why would a userscript wrapped in a firefox addon be slower than the same script in greasemonkey?为什么包含在 Firefox 插件中的用户脚本会比在greasemonkey 中的相同脚本慢?
【发布时间】:2012-08-08 05:36:11
【问题描述】:

我一直致力于将 Greasemonkey 用户脚本转换为 Firefox 插件。我正在使用 page-mod 模块,它似乎按预期工作。

除了它明显变慢!

第一个较慢的动作是脚本的加载。即使我将我的contentScriptWhen 设置为ready,xpi 版本(其中插入了一个用于切换其操作的复选框)需要更长的时间来加载和显示其复选框。

第二个较慢的动作是它的切换动作。切换效果的执行时间明显更长。

脚本很长而且很复杂,所以我没有在这里包含它。但总的来说,它使用 jQuery(粘贴到引用的contentScriptFile)对页面进行一些修改。这些模组通过上述切换开关打开和关闭。

谁能想到为什么相同的用户脚本在通过 XPI 插件加载时会比通过 Greasemonkey 加载相同的脚本时明显慢很多的一般原因?

【问题讨论】:

  • 新的 SDK 创建附加组件的开销相当大。我不记得 Greasemonkey 现在是否缓存信息(IIRC Scriptish 会),但是除非您已将其内置,否则您的附加组件肯定不会。...您使用 jQuery 的方式可能会大大减慢速度。 (1) 设置When 开始,(2) 只包含jQuery,不要粘贴,例如:contentScriptFile: [data.url("jquery-1.7.2.min.js"), data.url("my-content-script.js")],(3) 然后在my-content-script.js 中使用标准的$(document).ready(...。此外,请确保您没有在 iframe 中运行,除非您愿意。
  • 这应该是答案,我真的很想知道这些措施是否有帮助。另一种选择:使用 zepto 而不是 jQuery,因为它更小,但功能(大致)相同。
  • @BrockAdams 非常感谢您的建议。我都试过了,但不幸的是,主要的缓慢仍然存在。它确实加快了向页面中插入元素的速度,但是我上面提到的切换操作仍然很慢。如果您有任何其他想法,请告诉我。谢谢! (哦,我没有在 iframe 中运行)
  • 切换动作是否比 Greasemonkey 脚本慢?似乎存疑。 ... 如果没有代码审查(这不是 SO 的用途),或者除非您可以将问题归结为一个小的、独立的示例,否则可能无法为您提供更多帮助。
  • 当然,切换动作更慢。我知道这没有意义。您可能还记得我最近提出的另一个关于在 FF 插件上使用 console.time() 的 SO 问题......无法让它工作,所以我没有量化差异。我试图把它归结为一个可行的例子,但还没有想出什么。如果我这样做,我会把它作为一个问题发布。谢谢

标签: firefox-addon greasemonkey firefox-addon-sdk userscripts


【解决方案1】:

Page-mods 是 UserScripts 的实现方式不同,前者更全代理且更安全,但在某些情况下也较慢。你的 page-mod 写得越好,它就越受益。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2019-06-26
    • 1970-01-01
    • 2015-11-14
    相关资源
    最近更新 更多