Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS方言的二进制处理速度_Javascript_Performance_Extendscript - Fatal编程技术网

Javascript JS方言的二进制处理速度

Javascript JS方言的二进制处理速度,javascript,performance,extendscript,Javascript,Performance,Extendscript,使用Adobe的Javascript方言ExtendScript(据说基于),我的目标是处理二进制文件ES不支持,因此我将部分文件读入字符串,并使用toCharCode访问字节、整数和长值 然而,这会带来严重的速度惩罚。阅读215526项(混合字节、字和长),我得到以下性能: charCodeAt 29368 ms(注意,由于随机磁盘读取波动,我的计时中有+/-5%的显著抖动) 所以我可以用这个来代替: String.prototype.wordValueAt = function(index)

使用Adobe的Javascript方言ExtendScript(据说基于),我的目标是处理二进制文件ES不支持,因此我将部分文件读入字符串,并使用
toCharCode
访问字节、整数和长值

然而,这会带来严重的速度惩罚。阅读215526项(混合字节、字和长),我得到以下性能:

charCodeAt 29368 ms(注意,由于随机磁盘读取波动,我的计时中有+/-5%的显著抖动)

所以我可以用这个来代替:

String.prototype.wordValueAt = function(index)
{
    index = index || 0;
    return ascToBin[this[index]]^ascToBinHS[this[index+1]];
}
结果如下:

ascTobin查找:29528毫秒

几乎不重要——有时由于时间抖动,速度会稍微快一点。省略
索引
虚拟检查不会产生重大影响

读取算法本身不容易改进:数据由指向更多数据的指针组成,据我所知,所有数据只读取一次。数据是非顺序存储的,但我会尽可能多地读取缓冲区(而不是一次读取整个文件)。无论如何,我不认为磁盘访问是一个真正的瓶颈,因为指向数据及其相关数据的指针被打包成1/2K块(其中有284个,总计11616个数据包,在这个特定的最坏情况文件中)


一个典型的大型ish文件在3.5秒内加载,这是可以的,但我仍然想去掉每一个可能的纳秒。除了使用String和
charCodeAt
,还有更好的替代方法吗?

没有,不是
charCodeAt
方法慢,而是实现慢


如果可以使用其他实现或语言和实现,您应该这样做。

不,不是
charCodeAt
方法慢,而是实现慢


如果可以使用其他实现或语言和实现,您应该这样做。

不,不是
charCodeAt
方法慢,而是实现慢


如果可以使用其他实现或语言和实现,您应该这样做。

不,不是
charCodeAt
方法慢,而是实现慢


如果可以使用其他实现或语言和实现,您应该这样做。

我的脚本的具体实现,还是ExtendScript的一般实现?我同意使用一个“真实”的语言会更快——Adobe的DOM可以通过C++访问——但是ExtendScript(大部分)是版本和平台无关的,这对我来说是相当重要的。@ Jongware语言不是快速的或缓慢的。在许多实现中,如SpiderMonkey和V8,优化编译器可以将
.charCodeAt()
编译成非常快速的代码。但很明显,您正在使用的实现并没有做到这一点。是我的脚本的实现,还是ExtendScript的实现?我同意使用一个“真实”的语言会更快——Adobe的DOM可以通过C++访问——但是ExtendScript(大部分)是版本和平台无关的,这对我来说是相当重要的。@ Jongware语言不是快速的或缓慢的。在许多实现中,如SpiderMonkey和V8,优化编译器可以将
.charCodeAt()
编译成非常快速的代码。但很明显,您正在使用的实现并没有做到这一点。是我的脚本的实现,还是ExtendScript的实现?我同意使用一个“真实”的语言会更快——Adobe的DOM可以通过C++访问——但是ExtendScript(大部分)是版本和平台无关的,这对我来说是相当重要的。@ Jongware语言不是快速的或缓慢的。在许多实现中,如SpiderMonkey和V8,优化编译器可以将
.charCodeAt()
编译成非常快速的代码。但很明显,您正在使用的实现并没有做到这一点。是我的脚本的实现,还是ExtendScript的实现?我同意使用一个“真实”的语言会更快——Adobe的DOM可以通过C++访问——但是ExtendScript(大部分)是版本和平台无关的,这对我来说是相当重要的。@ Jongware语言不是快速的或缓慢的。在许多实现中,如SpiderMonkey和V8,优化编译器可以将
.charCodeAt()
编译成非常快速的代码。但很明显,您使用的实现并没有做到这一点。
var ascToBin = {};
var ascToBinH = {};
for (i=0; i<256; i++)
{
    ascToBin[String.fromCharCode(i)] = i;
    ascToBinH[String.fromCharCode(i)] = i<<8;
}
String.prototype.wordValueAt = function(index)
{
    index = index || 0;
    return ascToBin[this[index]]^ascToBinHS[this[index+1]];
}