gpt4 book ai didi

javascript - 如何有效地从 javascript 访问 gzipped xml?

转载 作者:数据小太阳 更新时间:2023-10-29 02:13:16 33 4
gpt4 key购买 nike

我需要从 javascript(实际上是从 Greasemonkey)有效地访问一个大的 gzipped xml 文件。不幸的是,服务器不提供 Content-Encoding header ,并且 Content-Type 是“application/x-gzip”,因此 firefox 不会(据我所知)自动对其进行扩充。如果有办法伪造 firefox,那将是理想的。除此之外,我需要一些方法来有效地进行通货膨胀……我现在使用的是大约 30 秒来放气 1.2Mb gzip 文件;我想在 5 秒内完成。

(我正在处理的 Greasemonkey 脚本不能有任何其他外部服务器依赖项,因此代理和呈现 Content-Encoding header 不是一个选项。)

我现在正在做的,是从几个地方拼凑而成的。为了不受干扰地接收二进制数据,我正在使用 firefox XMLHTTPRequest overrideMimeType扩展名:

$.ajax(url, {
dataType:'text',
beforeSend:function(xhr){
xhr.overrideMimeType('text/plain; charset=x-user-defined')
},
success:function(data){
var blob='';
for (i=0; i<data.length; ++i)
blob += String.fromCharCode(data.charCodeAt(i) & 0xff);
...

然后膨胀,使用 https://github.com/dankogai/js-deflate/blob/master/rawinflate.js 的稍微修改和内联的副本(据我所知,还有其他几个 javascript inflate 库是基于一个较旧的库 http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt )。这是非常慢的部分。

        // blithely assuming the gzip header won't change,
// strip a fixed number of bytes from the front
deflated=RawDeflate.inflate(blob.substring(22,blob.length-8));

然后将它弹出到 innerHTML 属性中进行解析:

        xmlcontainer=$('<div>');
// remove <?xml...> prolog
xmlcontainer.html(deflated.substring(45));
xmldoc=xmldoc.children();

(我知道用 DOMParser 的 parseFromString 可以更恰本地完成最后一点,但我还没有让它工作。)

最佳答案

使用此配置您将无法做得更好**。

JavaScript 太慢,无法像期望的那样快速膨胀,并且您不能从 JS 可靠地调用二进制文件——除非将数据通过 AJAX 发送到您自己的服务器(可以是本地 PC)。

您的改进选项似乎是:

  1. 让浏览器自动扩充内容。如果您已经尝试使用 overrideMimeType 设置 application/x-gzip,您可以尝试使用 GM_xmlhttpRequest相反(这是一个远景)。

  2. 将此从 GM 脚本转换为 Firefox 附加组件。作为附加组件,您可以访问二进制文件,例如 7-Zip,甚至可以访问浏览器的 inflate 方法。您也可以更轻松地伪造 mimetype。



**我确实注意到一些微不足道的机会来加速 JS 的膨胀……比如在 for 循环中检查 length。 las,考虑到细节,可能不会购买超过一两秒钟。

关于javascript - 如何有效地从 javascript 访问 gzipped xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213126/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com