Performance Firefox插件是否显著优于Greasemonkey脚本?

Performance Firefox插件是否显著优于Greasemonkey脚本?,performance,firefox,firefox-addon,greasemonkey,Performance,Firefox,Firefox Addon,Greasemonkey,我写了一个Greasemonkey脚本,在所有网站上运行,检查一些东西。 因为它在每个页面上运行,所以性能很重要。因此,我想知道Firefox插件是否能更快 以下是我的问题: Greasemonkey是否需要在每个页面上重新加载脚本(重新加载) 附加组件能否提高性能 优点和缺点是什么 更新: 一些背景信息-我正在对脚本进行页面加载延迟评估 更新2(更多信息): 我的脚本的开头如下所示: // ==UserScript== // @name My Script // @names

我写了一个Greasemonkey脚本,在所有网站上运行,检查一些东西。
因为它在每个页面上运行,所以性能很重要。因此,我想知道Firefox插件是否能更快

以下是我的问题:

  • Greasemonkey是否需要在每个页面上重新加载脚本(重新加载)
  • 附加组件能否提高性能
  • 优点和缺点是什么
更新:
一些背景信息-我正在对脚本进行页面加载延迟评估

更新2(更多信息):
我的脚本的开头如下所示:

// ==UserScript==
// @name        My Script
// @namespace   abc
// @description What it does
// @include     *
// @resource    moz_list  http://mxr.mozilla.org/mozilla/source/netwerk/dns/src/effective_tld_names.dat?raw=1
// @resource    resource_B http://mysite.org/res
// @version     1.0
// @grant       GM_xmlhttpRequest
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_getResourceText  
// ==/UserScript==  
var host = window.location.hostname;
host = host.replace('www.', '');
if (host in my_dictionary) {
    var links = document.getElementsByTagName('a');
    for (i = 0; i < links.length; i++) {
        if (host != links[i].hostname) {
            if (links[i].href in my_dictionary[host]) {
                do_some_stuff();
            }
        }
    }
} else {
    send_to_my_server(host);
}
此外,我还使用以下技术:

  • 字典和数组数据类型
  • 用于匹配链接的RegExp
  • 此处的tldextract代码:
  • 用于在缓存中存储和检索字典的JSON(stringify和eval能更快吗?)
  • document.getElementsByTagName()
  • window.location.hostname
在伪代码中,我的主要功能如下:

// ==UserScript==
// @name        My Script
// @namespace   abc
// @description What it does
// @include     *
// @resource    moz_list  http://mxr.mozilla.org/mozilla/source/netwerk/dns/src/effective_tld_names.dat?raw=1
// @resource    resource_B http://mysite.org/res
// @version     1.0
// @grant       GM_xmlhttpRequest
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_getResourceText  
// ==/UserScript==  
var host = window.location.hostname;
host = host.replace('www.', '');
if (host in my_dictionary) {
    var links = document.getElementsByTagName('a');
    for (i = 0; i < links.length; i++) {
        if (host != links[i].hostname) {
            if (links[i].href in my_dictionary[host]) {
                do_some_stuff();
            }
        }
    }
} else {
    send_to_my_server(host);
}
var host=window.location.hostname;
host=host.replace('www.,'');
if(my_字典中的主机){
var links=document.getElementsByTagName('a');
对于(i=0;i
在USO出现问题后,我也加入了插件,我的经验是:

用户脚本:

  • 仅限JavaScript
  • 易于更新
  • 主要与平台/应用程序无关(大多数用户脚本可以在Firefox、Chrome、Opera等平台上工作,并且可以在Windows、Mac、Linux等平台上工作,没有任何问题)
  • 通过影响性能的其他加载项运行
Firefox插件:

  • 通过访问更高效的本机API,功能更强大
  • 需要大量的进一步学习
  • 通过官方AMO进行的更新审批/审查速度缓慢(有时甚至非常缓慢)
  • 特定于应用程序
总的来说,如果不需要访问更强大的功能(即访问浏览器本身及其API),那么用户脚本就更容易维护,轻微的性能损失几乎可以忽略不计(我已经测量过了,差异主要是几毫秒)

更新: 在原始帖子中更新2之后

GM_xmlhttpRequest、GM_getValue、GM_setValue和GM_getResourceText

如果使用本机API(取决于代码效率),上述方法将更加有效

字典和数组数据类型 用于匹配链接的RegExp

相似性能

此处的tldextract代码:

就我个人而言,我会在GM脚本中使用我自己的正则表达式……但是Firefox(
Services.eTLD
)中有一个高效的API,所以插件会更高效

用于在缓存中存储和检索字典的JSON(stringify和eval能更快吗?)

类似于JSON<应该避免使用代码>eval()(我永远不会使用eval)

document.getElementsByTagName()

相似性能

window.location.hostname

类似的性能。虽然在插件的情况下,有时(如在导入的JSM中),要获得窗口和正确的窗口需要更多的工作

一般性意见:

代码的性能通常可以提高,即使是作为GM脚本。 例如:
document.links
document.getElementsByTagName('a')快两倍以上

缓存
链接。长度
提高速度和效率

for (var i = 0, len = links.length; i < len; i++) { }
for(var i=0,len=links.length;i
开关
通常比重复的
if()
更快。。。嵌套的
if()
有时可以连接等

最后,我想(尽管我猜是这样),将一个完全优化的GM脚本转换成一个插件最多可以提高10%的性能(并且需要大量的工作)

同时,完全优化GM脚本可以提高4-500%(甚至更多)的性能

祝你好运
:)

在USO出现问题后,我也加入了插件,我的经验是:

用户脚本:

  • 仅限JavaScript
  • 易于更新
  • 主要与平台/应用程序无关(大多数用户脚本可以在Firefox、Chrome、Opera等平台上工作,并且可以在Windows、Mac、Linux等平台上工作,没有任何问题)
  • 通过影响性能的其他加载项运行
Firefox插件:

  • 通过访问更高效的本机API,功能更强大
  • 需要大量的进一步学习
  • 通过官方AMO进行的更新审批/审查速度缓慢(有时甚至非常缓慢)
  • 特定于应用程序
总的来说,如果不需要访问更强大的功能(即访问浏览器本身及其API),那么用户脚本就更容易维护,轻微的性能损失几乎可以忽略不计(我已经测量过了,差异主要是几毫秒)

更新: 在原始帖子中更新2之后

GM_xmlhttpRequest、GM_getValue、GM_setValue和GM_getResourceText

如果使用本机API(取决于代码效率),上述方法将更加有效

字典和数组数据类型 用于匹配链接的RegExp

相似性能

此处的tldextract代码:

就我个人而言,我会在GM脚本中使用我自己的正则表达式……但是Firefox(
Services.eTLD
)中有一个高效的API,所以插件会更高效

用于在缓存中存储和检索字典的JSON(stringify和eval能更快吗?)

类似于JSON<应该避免使用代码>eval()
(我永远不会使用eval)

docum