【问题标题】:Optimizing and implementing lengthy arrays of functions in Javascript在 Javascript 中优化和实现冗长的函数数组
【发布时间】:2012-11-05 02:07:56
【问题描述】:

我目前正在用 Javascript 实现一个模拟器,模拟平台的内存模型相当复杂,所以我通过一组函数进行读写,例如:

var MRead = [];
ReadBiosSpace = function(addr) { return (EnableBios ? BIOS[addr] : ROM[addr]); };
for (i = 0; i <= 0xFF; i++) { MRead[i] = ReadBiosSpace; };
function Read(addr) { return MRead[addr](addr); };

因为显然 Read 和 Write 函数会被非常频繁地调用(每条指令至少一次,主要执行是 Operators[Read(ProgramCounter)]() )它们对性能非常敏感。

是否可以进行任何性能优化?这是最好的方法吗?

【问题讨论】:

  • 删除行和缩进不会给您带来任何可衡量的性能改进。

标签: javascript arrays function optimization first-class-functions


【解决方案1】:

如果EnableBios 不经常更改,那么我能看到的唯一明显改进是拥有两个不同版本的ReadBiosSpace,并在每次更改时将适当的版本重新分配给前 256 个位置。

这将避免每次访问这些位置之一时都必须调用三元运算符。

【讨论】:

  • EnableBios 根本不经常更改(实际上只更改一次),所以这实际上是一个好主意,也就是说存在指针可能经常更改的内存区域。
【解决方案2】:

除了其他答案,你也可以使用这个:

for (i = 0xFF - 1; i--) { MRead[i] = ReadBiosSpace; };

【讨论】:

  • 好吧,for 循环只在加载脚本以填充数组时运行一次,但这是一种更简洁的语法,所以我会采用它!
猜你喜欢
  • 1970-01-01
  • 2013-09-18
  • 2013-01-20
  • 2012-01-07
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多