编译OpenResty上使用的Lua脚本

时间:2014-11-27 09:16:41

标签: nginx lua luajit openresty

我目前正在使用OpenResty + Lua进行多个项目,我喜欢Lua给我的灵活性,实际上我直接在Lua脚本中编写了一些由Nginx-OpenResty提供的微博客应用程序。 / p>

但是,如果我想分发网络应用程序,显然Lua代码应该是" plain"或者,至少,有点混淆。相反,考虑到我当前使用的LuaJIT将Lua编译为本机代码,是否可以将所有Lua脚本预编译为本机代码(不是lua .o目标文件),并将它们加载到OpenResty中,而不是直接.lua源文件?

1 个答案:

答案 0 :(得分:3)

不。

无法将LuaJIT代码编译为机器代码。由于两个主要原因,它根本不起作用:

  1. LuaJIT根据它们在运行时运行的频率选择要编译的跟踪。这意味着生成的跟踪可以根据正在处理的数据而改变(例如,可以编译不同的if分支,这取决于更频繁地采用哪一个)。因此,不可能提前预编译它们。
  2. 有些操作无法编译,因为它尚未实现(例如闭包创建),它不会出现在值得优化的区域(例如require),或者因为它根本不可能(例如,调用Lua C API函数)
  3. 最好的办法是将Lua文件编译为LuaJIT字节码,而调整信息则被剥离。这意味着省略了局部变量名,行号等内容,但仍可以进行反汇编。