什么会导致在请求启动时创建 Lucee 组件出现较大延迟?
What could cause large latency creating Lucee components on request start?
我们正在从 Railo 切换到 Lucee 5.2.3 并注意到请求启动时有时会有很大的延迟。我想我已经将其归结为一个函数,该函数将 createObject('component', ...)
的大约 30 个组件加载到 Request 范围中。在 Railo 上,此列表将在一秒钟内加载。在 Lucee 上,它可能需要大约 20 秒,但并非总是如此。如果我们需要动态创建数据源或连接到环境的主要全局数据源以外的数据源,它似乎总是会发生。这些组件对象初始加载后,将在一秒钟内加载。我无法弄清楚是什么导致了这种初始性能下降。 .cfc 文件位于站点 ROOT 目录下的子目录中,因此我只使用标准 <cfset Request.Helpers[ThisHelper] = createObject("component","cfcs.componentFileName") />
。此函数不调用 init()
,它只是创建对象。另外,这个函数不是我们动态创建任何数据源的地方,它专门在请求范围内创建对象。
无法具体评论 Lucee,但知道传统上我们一直避免在 CF 中创建过多的对象。是否可以将任何对象移动到应用程序范围、创建一次并由所有访问者重新使用?
也可能与 Lucee 基于 OSGi 而不是基于类加载器有关。也许在 OSGi 服务启动上有一些开销?
我们正在从 Railo 切换到 Lucee 5.2.3 并注意到请求启动时有时会有很大的延迟。我想我已经将其归结为一个函数,该函数将 createObject('component', ...)
的大约 30 个组件加载到 Request 范围中。在 Railo 上,此列表将在一秒钟内加载。在 Lucee 上,它可能需要大约 20 秒,但并非总是如此。如果我们需要动态创建数据源或连接到环境的主要全局数据源以外的数据源,它似乎总是会发生。这些组件对象初始加载后,将在一秒钟内加载。我无法弄清楚是什么导致了这种初始性能下降。 .cfc 文件位于站点 ROOT 目录下的子目录中,因此我只使用标准 <cfset Request.Helpers[ThisHelper] = createObject("component","cfcs.componentFileName") />
。此函数不调用 init()
,它只是创建对象。另外,这个函数不是我们动态创建任何数据源的地方,它专门在请求范围内创建对象。
无法具体评论 Lucee,但知道传统上我们一直避免在 CF 中创建过多的对象。是否可以将任何对象移动到应用程序范围、创建一次并由所有访问者重新使用?
也可能与 Lucee 基于 OSGi 而不是基于类加载器有关。也许在 OSGi 服务启动上有一些开销?