Во многих приложениях noir я увидел декларацию ниже. Какова цель пропустить aot? Когда использовать его и когда его не использовать? Любые преимущества/недостатки?
:main ^{:skip-aot true} sample-app.server
Ответ 1
Это не относится к noir, но один сценарий, который вы, возможно, захотите пропустить AOT для данного пространства имен, - это развертывание вашего кода для провайдера PaaS, такого как heroku.
Heroku выполняет компиляцию AOT вашего кода по умолчанию, поэтому рассмотрите этот фрагмент на вашем сервере server.clj:
В принципе этот код кажется безобидным и будет работать локально независимо от того, что он скомпилирован AOT.
Однако во время компиляции на heroku переменная окружения "DB_URL" пока недоступна, поэтому приведенный выше оператор connect! попытается подключиться к nil и выбросить исключение.
Пропуск AOT-компиляции этого пространства имен является одним из способов предотвращения этого.
Другой, и моим предпочтительным подходом в данный момент было бы небольшое его изменение: