需要“局部变量化”全局函数么?

前言

  在很多的 Lua 语言相关的著作中都强调,在代码头部将代码里使用到的全局函数或者全局库局部变量化,将大大提升代码的执行效率。
  举个栗子,Roberto Ierusalimschy《Lua Programming Gems》 的第二章 Lua Performance Tips 提到:

 除了一些明显的地方外,另有几处也可使用局部变量,可以助你挤出更多的性能。比如,如果在很长的循环里调用函数,可以先将这个函数赋值给一个局部变量。这个代码:

1
2
3
for i = 1, 1000000 do
local x = math.sin(i)
end

比如下代码慢 30%:

1
2
3
4
local sin = math.sin
for i = 1, 1000000 do
local x = sin(i)
end

烦恼

  起初我也坚信这一点,并严格的执行。但对于一个以前一直使用 OOP 语言的程序猿来说,这样做很痛苦。
  首先,这给我的编码带来了额外的麻烦。我必须在编码完成后进行 review、定义和替换,或者在编码过程中用到全局库和函数时就立即在头部定义局部变量。
  其次,这样编码实在是有些丑陋,违反了我的代码审美。

1
2
3
4
5