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

标签 performance lua

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

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

最佳答案

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

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

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

关于performance - (内置)Lua 函数的本地声明以减少开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72025776/

相关文章:

php - sleep 如何吃掉 CPU php

jquery - 有没有更好的方法使用 jQuery 按类查找单个元素?

sockets - Lua连接redis服务器困难

c# - 在 RichTextBox 的函数内部使用 IndexOf

c++ - 如何编译 C++ dll 以使用 Lua? (我收到错误加载模块)

module - lua 模块没有加载库

emacs - 如何让 Emacs 启动更快?

java - 为什么在大约 10 个内核后添加内核会使我的 Java 程序变慢?

python - numpy数组的计算/操作

c++ - 如何从 C++ 监听 Lua 中的特定函数调用?