【问题标题】:Can luaL_loadbuffer load multiple files in one call?luaL_loadbuffer 可以一次调用加载多个文件吗?
【发布时间】:2014-07-01 01:13:05
【问题描述】:

我知道如何通过luaL_loadbuffer 加载 Lua 文件。现在我有很多Lua文件,100多个。我正在考虑如何加快加载过程。我想出的一种方法是:将所有文件合二为一,然后使用luaL_loadbuffer 加载此文件(我做了一些测试,但刚刚得到luaL_loadbuffer 返回的语法错误)。有人用过这种方法吗?或者有没有其他方法可以加快加载速度?

【问题讨论】:

  • 使用luac 进行预编译应该可以加快加载速度。您还可以使用luac 将多个文件合并为一个预编译文件,前提是您不使用require 加载文件。
  • 我研究了 luac 并做了一些练习。也许它可以解决速度问题,但它带来了另一个问题:便携性。根据 luac 文档,由 luac 创建的二进制文件只能在具有相同字长和字节顺序的架构之间移植。我正在开发一款手机游戏。便携性对此类应用很重要。
  • 您可以使用 this 之类的东西将多个 Lua 文件合并为一个文件,并通过预处理器定义为最常见的架构提供预编译版本,并将合并的源代码作为其余文件的后备。我怀疑单独组合 Lua 文件会对加载速度产生很大影响。
  • 预编译版本确实减少了很多加载时间。我测试在我的 android 手机(HTC G7)上加载由 32 位 win7 PC 生成的预编译文件。时间减少到9秒。在此之前,花了30多秒。但是我的手机无法加载64位win7 PC(操作系统为64位)生成的预编译文件。现在我对如何生成可移植的预编译文件很感兴趣。
  • @lhf:为什么要限制?我以为package.preload 会删除它...

标签: lua lua-api


【解决方案1】:

将@siffiejoe 的评论和this answer 扩展到相关的SO 问题,我使用Squish 将多个模块折叠成一个单个 .lua 文件。然后,如果需要,您可以使用luac 将其编译为字节码。

【讨论】:

    【解决方案2】:

    我用 LuaJIT 替换了 Lua,加载时间减少到了 6 秒左右。我现在对这个结果很满意。谢谢大家。

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 2011-04-15
      • 1970-01-01
      • 2021-05-26
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多