Проблема:
Я тестировал два типа больших файлов (примерно 20 МБ).
Первый - это строковый файл, содержащий около 4000 функций, например:
function dostuff1()
<simple lua script>
end
function dostuff2()
<simple lua script>
end
И так далее. Сами функции не слишком важны, но в каждой из них есть очень специфичные c важные простые операции.
Второй файл - это просто версия текстового файла, построенная на основе байт-кода, с использованием:
luajit -b testfile1.lua testfile1.out
Затем я проверяю каждый файл (время загрузки) для каждого из них в своем собственном env, используя:
local env = {}
local chunk = loadfile( filename, 'bt', env )
assert(pcall(chunk()))
Строковые файлы загружаются и обрабатываются значительно быстрее, чем файлы байт-кода. Что, кажется, противоречит тому, что я ожидал. Вот небольшая выборка сравнений. Примечание: некоторые файлы имеют более сложные функции, чем другие (отсюда разница во времени).
Строковые файлы:
'# File Load+Run: ' 'test.tbl1' ' Time: ' 0.72784 ' Size:' 20877534
'# File Load+Run: ' 'test.tbl2' ' Time: ' 0.686193 ' Size:' 20880495
'# File Load+Run: ' 'test.tbl3' ' Time: ' 1.109813 ' Size:' 20824589
'# File Load+Run: ' 'test.tbl4' ' Time: ' 1.582231 ' Size:' 20827788
Файлы байт-кода:
'# File Load+Run: ' 'test.out1' ' Time: ' 0.379144 ' Size:' 17521943
'# File Load+Run: ' 'test.out2' ' Time: ' 0.95122 ' Size:' 17519371
'# File Load+Run: ' 'test.out3' ' Time: ' 2.954594 ' Size:' 18333035
'# File Load+Run: ' 'test.out4' ' Time: ' 7.236041 ' Size:' 18327247
Странно первый файл быстрее в байт-коде (что я и ожидал для всех).
Можно ли это четко объяснить? Я искал во многих местах (здесь конкретно) и не смог найти каких-либо аналогичных обсуждений (дайте мне знать, если есть - пожалуйста).