(内置)Lua 函数的本地声明以减少开销

ket*_*tex 2 performance lua

人们常说应该在本地重新声明(某些)Lua 函数,因为这样可以减少开销。但这背后的确切规则/原则是什么?我如何知道哪些功能应该这样做以及哪些功能是多余的?或者应该为每个函数(甚至是您自己的函数)执行此操作?

不幸的是我无法从Lua手册中弄清楚它。

use*_*751 5

原则是,例如,每次您编写时,Lua解释器都会在名为 的表中table.insert查找条目。实际上,它的意思是 -是 Lua 5.2+ 中“全局变量”所在的位置。Lua 5.1 有类似的东西,但不叫. 解释器在其中查找字符串,然后在该表中查找该字符串。在函数实际被调用之前,每次调用时都会进行两次表查找。"insert"table_ENV.table.insert_ENV_ENV"table"_ENV"insert"table.insert

但如果你把它放在局部变量中,那么解释器直接从局部变量获取函数,这样速度更快。它仍然需要查找它来填充局部变量。

如果您只在局部变量的范围内调用该函数一次,那么这是多余的,但这种情况很少见。没有理由对已经声明为 的函数执行此操作local。它还使代码更难阅读,因此通常您不会这样做,除非它确实很重要(在运行很多次的代码中)。