【发布时间】: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