在生产中,将AOT编译作为应用程序JAR构建过程的一部分,将加快滚动重启速度(构建JAR将大大减慢 -- 你必须为编译时间“处罚”买单)。
我们以前将应用程序uberjar构建为源码,但在生产中启动时间很慢,所以我们改为在uberjar构建过程中使用AOT编译,这将最差应用程序的生产启动时间从一分多钟降低到几秒钟。
至于CI,为了运行测试,必须加载和编译它们,所以你真的无法避免这段时间在某个地方。你的唯一实际选择是进行增量测试,仅针对已更改的代码或依赖于已更改代码的代码运行测试。对我们来说,这是切换到Polylith的未来的承诺之一,因为其内置的测试运行者基于git标签计算出这一点 -- 但这种好处只有在你有“一切”在Polylith中时才会出现。
Alex提到了关于加快开发加载的文档,我 workspace 中的 classes
文件夹,并定期为我 repo 中主要的“应用程序”手动启动一个compile
步骤。这意味着自上次编译以来没有更改的任何代码将只使用现有的.class
文件,而不必在加载时经过Clojure编译过程 -- 但任何已更改的代码在加载时仍需要编译。
在REPL中工作对初始加载时间有很大影响,但随时间推移,它随着越来越多的代码更改而“漂移”。然而,在我们的工作中,我们通常会有相当长久的REPL,并且在我们修改它时评估所有代码,所以慢速首次加载问题并不那么令人烦恼,我并不总是用classes
东西。当我说“长久的REPL”时,我是指数周,有时甚至是数月。我的主要工作REPL现在已经运行了十天,它这么“短”的唯一原因是发生了电力故障,我不得不重起我的开发机器。