Luaスクリプトを単一の実行可能ファイルにコンパイルしながら、超高速のパフォーマンスを実現するにはどうすればよいですかLuaJITの利点?
バックグラウンド:
.lua
Webアプリケーションを構成するファイル(Models/Views/Controllersから)配置を簡単にするために、Webアプリケーションを実行するすべての.luaスクリプトを1つの実行可能ファイルにコンパイルします。
これは可能ですか?
Luaの公式には SRLua というライブラリが付属しているようです
すべてのLuaソースコードファイルをオブジェクトファイルに変換し、静的ライブラリに配置します。
_for f in *.lua; do
luajit -b $f `basename $f .lua`.o
done
ar rcus libmyluafiles.a *.o
_
次に、_libmyluafiles.a
_を使用して、_-Wl,--whole-archive -lmyluafiles -Wl,--no-whole-archive -Wl,-E
_ライブラリをメインプログラムにリンクします。
この行により、リンカーはアーカイブからすべてのオブジェクトファイルを含め、すべてのシンボルをエクスポートします。
たとえば、foo.luaという名前のファイルをアプリケーション内からlocal foo = require("foo")
でロードできるようになりました。
_-b
_オプションの詳細については、 Running LuaJIT を参照してください。
現在関連する.lua
ファイルのネストとしてデプロイしているWebアプリの場合、最も簡単な答えは、それらを単一のファイルに圧縮することです。これは、luac
を使用した単純なケースでよく行われます。ただし、モジュールが混在する複雑なアプリケーションの場合は、よりスマートなものが必要です。
私は個人的にMathew Wildのユーティリティ squish
を使用して同様のことをしています。
Squishを実行すると、すべてのLuaソースコードが便利にバンドルされた単一の.lua
ファイルができます。その単一のファイルをデプロイするだけで済みます。
バイナリモジュール、またはLuaまたはLuaJITインタープリターもバンドルする必要がある場合は、SRLuaを使用してLuaインタープリターにバンドルするか、LuaJITにバンドルする同様の手法を簡単に使用できます。