Del*_*ani 5 javascript optimization
在JavaScript中,使用我自己的仿真器实现,RA从32位指令获取寄存器字段的值i通常表示为:
this.gpr.u32[(i >> 16) & 0x1f]
Run Code Online (Sandbox Code Playgroud)
但是,在函数中多次使用上述表达式是丑陋的,难以遵循和编辑.我已经避免ra使用该表达式定义变量并使用它,因为我认为它将存储在内存中,并且获取它将是昂贵的.我是否应该担心这一点,或者现代JavaScript引擎是否将变量的值"内联"到定义后面的语句中?虽然使用变量使代码更清晰,但如果它会降低性能敏感环境(如模拟器)中的执行时间,我真的不想使用它.
在答案中有很多"它取决于".首先,它取决于javascript解释器它可以优化的程度.
不过,如果我理解你的话你的代码是这样的
.... this.gpr.u32[(i >> 16) & 0x1f] ...
.... this.gpr.u32[(i >> 16) & 0x1f] ...
.... this.gpr.u32[(i >> 16) & 0x1f] ...
Run Code Online (Sandbox Code Playgroud)
代替
ra = this.gpr.u32[(i >> 16) & 0x1f];
.... ra ....
.... ra ....
.... ra ....
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我认为任何javascript引擎都会更快地执行后者.确实,你ra在内存中有一个额外的变量.但是访问权限ra不应该比访问i加班次和掩码加上访问速度慢this.gpr.u32.