2013-09-30 61 views
1

我一直在试图弄清楚为什么我正在使用的用户脚本在Firefox中很慢,但在Chrome和Safari中很火。我发现的一个原因(尽管可能不是唯一的原因)是userscript的大文件大小有很大的影响。脚本中有十本书的长度字符串,文件大小为3.8 MB。如果我删除字符串,脚本会再次变快 - 基本上,浏览器中的所有内容都会在文件加载时停下来(正好是用于典型用户输入交互的时间)。如何在脚本中压缩/解压缩字符串?

所以我想这可能有助于预压缩字符串,然后在运行过程中根据需要进行解压缩。任何人都有一个在一个用户脚本内做到这一点的策略?

+0

字符串包含哪些数据? – Bergi

+0

叙述文本 – mix

+0

您的脚本始终处于开启状态吗?问题实际上可能是那些首先存在的字符串;如果你马上做,解压缩到它们只会变慢。 – Ryan

回答

3

这里有一些想法,所有未测试:从Greasemonkey的

  • 切换到Scriptish。脚本通常表现更好。

  • a)将文本拆分为单独的文本文件。
    b)将这些文件放置在您安装脚本的位置。无需压缩。
    c)用@resource directives指向每个文件;每个文件一个。
    d)在您的代码中,使用GM_getResourceText()Doc可以在需要时获取所需的文本。

  • 将文本分割成文件,将它们放在您自己的启用了gzip的服务器(可能是本地计算机)上,并使用GM_xmlhttpRequest来按需获取文件。
    服务器可以自动gzip文件,或者您可以预压缩它们以节省几毫秒。



至于存储在您的userscript压缩串;很难看出这将如何帮助业绩。

压缩文本可能会减少字节数,例如70%,但在脚本中不能使用二进制。你将不得不base64编码它,你的脚本突然不再短了。

然后,你将不得不base64解码,并为每个使用unzip data using js。这两种操作都会消耗JS中的时间和内存。
维护脚本和/或更改文本将会非常繁琐。

似乎很多工作可能会带来负面收益。

+0

scriptish的速度确实更快,可能足够快速而没有进一步修改。仍然没有铬/ safari快,但不是通用汽车公司的狗。是一个脚本语言,可以替代通用汽车,例如。像自动更新这样的工作将以同样的方式工作吗?对于我之前的脚本,我在服务器上使用了一个scriptname.meta.js文件来通知GM有关更新的副本,从哪里获取它们等等。 – mix

+0

是的,除了可能存在一些'@ grant'行为,所有FF GM脚本在Scriptish中的工作方式都是相同的。我没有亲自测试过Scriptish中的自动更新位,但我确定它没关系。 Scriptish开发人员是Greasemonkey的长期贡献者。 –