Может ли luaL_loadbuffer загружать несколько файлов за один вызов?

Я знаю, как загрузить файл Lua через luaL_loadbuffer. Сейчас у меня много Lua-файлов, более 100. Думаю, как ускорить процесс загрузки. Один из способов, который я понял, - это поместить все файлы в один, а затем загрузить этот файл с помощью luaL_loadbuffer (я провел несколько тестов, но только что получил синтаксическую ошибку, возвращенную luaL_loadbuffer). Кто-нибудь когда-нибудь пользовался этим методом? Или есть еще способ ускорить загрузку?


person gzyuan888    schedule 01.07.2014    source источник
comment
Предварительная компиляция с luac должна ускорить загрузку. Вы также можете объединить множество файлов в один предварительно скомпилированный файл с помощью luac, при условии, что вы не используете require для загрузки файлов.   -  person lhf    schedule 01.07.2014
comment
Я изучил luac и немного потренировался. Возможно, это поможет решить проблему скорости, но принесет еще одну: портативность. Согласно luac Document, двоичные файлы, созданные luac, переносимы только между архитектурами с одинаковым размером слова и порядком байтов. Разрабатываю мобильную игру. Для такого приложения важна переносимость.   -  person gzyuan888    schedule 01.07.2014
comment
Вы можете объединить несколько файлов Lua в один, используя что-то вроде this, и предоставить предварительно скомпилированные версии для большинства общие архитектуры через препроцессор определяются с объединенным исходным кодом в качестве запасного варианта для остальных. Я сомневаюсь, что объединение только файлов Lua сильно повлияет на скорость загрузки.   -  person siffiejoe    schedule 01.07.2014
comment
Предварительно скомпилированные версии сильно сократили время загрузки. Я тестирую загрузку предварительно скомпилированных файлов, сгенерированных 32-битным ПК с Win7, на свой телефон с Android (HTC G7). Время сократилось до 9 секунд, до этого требовалось более 30 секунд. Но мой телефон не смог загрузить предварительно скомпилированные файлы, сгенерированные 64-битным ПК с Win7 (ОС 64-битная). Теперь мне интересно, как создавать переносимые предварительно скомпилированные файлы.   -  person gzyuan888    schedule 01.07.2014
comment
@lhf: Почему это ограничение? Я думал package.preload уберет это ...   -  person Deduplicator    schedule 01.07.2014
comment
@Deduplicator, да, см. Мой luac.lua (который требует обновления до 5.2 и 64-битных платформ). См. Также lua-users.org/lists/lua-l/ 2013-10 / msg00746.html, чтобы узнать о других решениях.   -  person lhf    schedule 01.07.2014
comment
@lhf Ни прямая, ни косвенная ссылка на анонс не работают. Хотя код все еще там ...   -  person Deduplicator    schedule 01.07.2014
comment
@Deduplicator, архив рассылки перестраивается. Ссылки должны работать примерно через час.   -  person lhf    schedule 01.07.2014
comment
Всем спасибо. Что касается проблемы переносимости, кажется, что LuaJIT - хороший выбор для предварительно скомпилированного скрипта (я узнал об этом после поиска stackoverflow). Я постараюсь узнать, нужно ли мне обращаться к LuaJIT. Есть ли какие-либо комментарии о переносимости LuaJIT?   -  person gzyuan888    schedule 01.07.2014
comment
Код LuaJIT переносится на все поддерживаемые платформы, но только для одной и той же версии LuaJIT. Вероятно, что версии LuaJIT откажутся загружать байт-код из других версий. Обратите внимание, что вы не сможете смешивать байт-код Lua и LuaJIT, поскольку они несовместимы.   -  person Paul Kulchenko    schedule 01.07.2014


Ответы (2)


Расширяя комментарий @ siffiejoe и этот ответ на связанный вопрос SO, я использую Squish, чтобы свернуть несколько модулей в одиночный .lua файл. Затем вы можете использовать luac для компиляции его в байт-код, если хотите.

person evadeflow    schedule 01.07.2014

Я заменил Lua на LuaJIT, и время загрузки сократилось до ~ 6 секунд. Сейчас я доволен таким результатом, спасибо всем.

person gzyuan888    schedule 02.07.2014