我对自定义 foxx 应用程序有严重问题。
关于应用程序
该应用程序是用于在图中查找路径的自定义算法。它针对公共交通进行了优化。在初始化时,它将所有必要的数据加载到 javascript 变量中,然后遍历它们。它比每次访问数据库都要快。
问题
当我第一次通过 api 访问应用程序时,它很快,例如。300 毫秒。但是当我第二次执行完全相同的请求时,速度非常慢。例如。7000 毫秒。
你能帮我解决这个问题吗?我不知道在哪里寻找错误。
在不了解应用程序和代码的情况下,我只能推测原因。
潜在原因#1:发展模式。
如果您在开发模式下运行 ArangoDB,则会为每个 Foxx 路由请求运行 init 过程,从而使值的预先计算变得无用。您可以通过检查 arangod 日志来确定您是否在开发模式下运行。如果您处于开发模式,则会有一条关于此的日志消息。
潜在原因 #2:JavaScript 变量是每个线程的
您可以使用多个线程运行 ArangoDB 和 Foxx,每个线程都有线程本地 JavaScript 变量。如果您向 Foxx 路由发出请求,则服务器将选择一个随机线程来回答该请求。如果该线程中的 JavaScript 变量仍然为空,则可能需要先填充它(这将是您的 init 调用)。对于下一个请求,将再次选择一个随机线程来执行。如果 JavaScript 变量已经填充在这个线程中,那么响应会很快。如果需要填充变量,则响应会很慢。
在几次请求之后(至少与 --server.threads 启动选项中配置的一样多),每个线程中的 JavaScript 变量应该已经初始化并且响应时间应该相同。