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