我目前正在使用Javascript开发GameBoyColor模拟器。
目前将64k的ROM文件加载到内存单元需要大约60秒。这是函数:
loadROM: function (file) {
var reader = new FileReader();
reader.onload = function () {
var start = new Date();
console.log("start", start.getTime());
this.__ROM = new Uint8Array(reader.result.length);
for (var i = 0; i < reader.result.length; i++) {
this.__ROM[i] = (reader.result.charCodeAt(i) & 0xFF);
}
var end = new Date();
console.log("end", end.getTime());
console.log((end.getTime() - start.getTime()) + " for " + i + " iterations");
this._trigger("onROMLoaded");
}.context(this);
reader.readAsBinaryString(file);
}
reader.result
是ROM文件的字符串形式,this.__rom
是数组。重要的是for循环,在该循环中,我获取每个单独的字符并将其推入内存的ROM数组中。
这需要太长时间。那么问题是如何加速这个过程。是否有更好的方法将字符串转换为数组?