Должен ли я иметь один или несколько файлов сценариев?
Я создаю программу на Java, которая использует сценарии. Мне просто интересно, должен ли я разделить свои сценарии на один файл для каждого сценария (более реалистично для каждого типа сценария, такого как "математические сценарии", "сценарии учетной записи" и т. Д.), Или мне следует использовать один скопированный файл для всех сценариев.
Я ищу ответ скорее с технической точки зрения, а не с практической точки зрения, если это возможно, так как этот вопрос как бы уже объяснил практическую сторону (отдельные часто модифицированные сценарии и большие сценарии).
1 ответ
С точки зрения технического влияния на производительность можно утверждать, что использование одного экземпляра Globals на самом деле более эффективно, поскольку любые библиотеки загружаются только один раз, а не несколько раз. Однако вопрос об использовании нескольких файлов действительно зависит. Несколько физических файлов lua могут быть загружены с использованием одних и тех же глобалов, либо один файл может быть загружен с использованием экземпляра глобалов, так что в любом случае таблица глобалов содержит одинаковое количество данных в конце независимо от того, была ли она загружена из нескольких файлов или нет. Если вы используете несколько глобалов для каждого файла, это не так.
Подобные вопросы действительно зависят от того, для каких целей вы хотите использовать lua. Использование одного экземпляра Globals будет более эффективно использовать оперативную память, но, кроме того, это не приведет к увеличению производительности. Загрузка нескольких файлов по сравнению с одним файлом может занять немного больше времени, так как время открывать и закрывать дескрипторы файлов, но это такая микрооптимизация, что серьезно не стоит хлопот, которые требуются для записи всего кода в одном файле, не говоря уже о том, как сложно организовать это эффективно.
Существует также несколько преимуществ использования нескольких Globals, однако каждый экземпляр Globals имеет свое собственное глобальное хранилище, поэтому изменение чего-либо, например перегрузка операторов в объектах с метатизацией или переопределение функций, не переносится в другие экземпляры. Если это не проблема для вас, то я могу предложить написать код в нескольких файлах и загрузить их все с одним экземпляром Globals. Однако, если вы сделаете это, соблюдайте осторожность, чтобы правильно структурировать все ваши файлы, если вы часто используете глобальную область видимости, вы можете обнаружить, что отслеживание имен объектов становится трудным и склонно к случайному изменению значений из других файлов путем присвоения им одинаковых имен. Чтобы избежать этого, каждый файл может определить все свои функциональные возможности в своей собственной таблице, и затем эти таблицы работают как отдельные модули, где вы можете выбирать функции на основе таблиц, почти как при выборе из определенного файла.
В конце концов, это не имеет большого значения, но в зависимости от того, что вы выберете, вам, возможно, придется позаботиться, чтобы обеспечить хорошую организацию кода.
Использование нескольких глобальных переменных требует больше оперативной памяти, но может позволить каждому файлу иметь свои собственные пользовательские библиотеки, не влияя на другие, но достигается за счет необходимости более структурного управления со стороны Java вашего программного обеспечения для организации всех файлов.
Использование одного Globals требует меньше оперативной памяти, но все файлы имеют одну и ту же глобальную область, что делает настраиваемые версии библиотек более сложными и требует более структурной организации со стороны программного обеспечения Lua для предотвращения конфликта имен и других функций.
Если вы хотите, чтобы другие пользователи использовали ваш Lua API, например, для надстройки к вашему программному обеспечению через систему аддонов, вы можете использовать несколько экземпляров Globals, потому что пользователь, создающий дополнения, должен отвечать за код не будет конфликтовать с другими аддонами, это не только опасно, но и бремя, которое не должно существовать. Неопытный пользователь пытается создать дополнение, не организовывает его должным образом и может испортить части программного обеспечения или программные дополнения.