PHP
你保存一个文件。PHP 以文件作为源开始,它解释内容,构建操作码,执行,你得到结果。PHP 停止。
Java EE
你保存一个文件。您编译项目(一个文件中的更改可能会更改其他类文件)。您还可以启动应用程序服务器(昂贵)或执行上下文重新加载(成本较低)。这就像在每次 PHP 文件更改后重新启动 Apache。您让应用程序服务器保持运行,因此后续请求会很快。
但是为什么会遇到这么多麻烦呢?Java 需要重新加载应用程序,因为它不会在每个请求上解释每个类文件(就像 PHP 所做的那样),因此当发生更改时,整个应用程序都需要重新加载。另一个原因是 JVM 是一个高度优化的野兽,并且要具有出色的性能,您不能快速周转(优化本质上需要时间)。考虑在启用 OP 缓存的情况下运行 PHP,并为每个 PHP 文件更改进行预热。
对于小型应用程序,Java EE 中的重新加载非常便宜,但一旦应用程序增长,它就会变得更糟。一旦您使用了几个框架,那么在应用程序上下文重新加载时也会触发这些框架的初始化。
如果您想要类似 PHP 的开发体验,那么可以使用商业工具JRebel。该工具将从更改的类文件中重新加载新的字节码,而不是进行上下文重新加载。