Javascript Web开发:构建图形并运行算法

Javascript Web开发:构建图形并运行算法,javascript,graph,clojure,web,Javascript,Graph,Clojure,Web,我对web开发非常陌生,我编写代码从表单中获取用户输入,从表单中构建图形,并在其上运行图形算法 起初,我使用post请求发送文本,但如果有很多边,算法有时会花费太长时间,这导致超时错误。我很确定这不是因为我的代码效率低下 要解决这个问题,我想我必须使用javascript,而不是发送请求——这是需要大量时间的函数通常要做的吗 我的主要问题是:我必须用javascript重写代码,还是有办法从javascript调用我的原始函数 我正在使用clojure…您可以用clojure编写Javascri

我对web开发非常陌生,我编写代码从表单中获取用户输入,从表单中构建图形,并在其上运行图形算法

起初,我使用post请求发送文本,但如果有很多边,算法有时会花费太长时间,这导致超时错误。我很确定这不是因为我的代码效率低下

要解决这个问题,我想我必须使用javascript,而不是发送请求——这是需要大量时间的函数通常要做的吗

我的主要问题是:我必须用javascript重写代码,还是有办法从javascript调用我的原始函数


我正在使用clojure…

您可以用clojure编写Javascript


您可以用Clojure编写Javascript


听起来更像是您需要某种方式来提交请求,在后台进行处理,然后在结果准备就绪时检索结果——所有这些都是单独的web请求

任何HTTP请求都会有一个超时,它挂起的时间越长,网络中的某些东西导致它失败的可能性就越大


大多数后端语言都提供了实现这一点的方法;Clojure非常适合使用线程、代理和类似的工具。重新构造客户端/服务器交互,您不必再担心这个问题。

听起来您更需要某种方式来提交请求,在后台进行处理,然后在结果准备就绪时检索结果—所有这些都是单独的web请求

任何HTTP请求都会有一个超时,它挂起的时间越长,网络中的某些东西导致它失败的可能性就越大


大多数后端语言都提供了实现这一点的方法;Clojure非常适合使用线程、代理和类似的工具。重新构造客户端/服务器交互,您不必再担心这一点。

我想知道的第一件事是,运行此算法的图形有多大。您正在使用数千(或数百万)个顶点和边进行操作吗?或者这只是一个非常昂贵的算法

让我们假设处理这些请求自然需要很长一段时间,不管您的算法编码有多好。严格来说,使用javascript并不是唯一的解决方案,但它可能是最适合您的方法

选项:

  • 在客户端计算机上运行javascript算法。这里发生的是,当用户在表单上输入数据时,算法在客户端机器上的javascript上运行。您的服务器不再参与,这很好,因为您的资源没有被占用

  • 增加服务器上的超时时间。不建议超过20秒左右,因为人们只会让你的服务器负担更重

  • 在服务器上运行算法。使用Daniel Pittman建议的方法解决超时问题:当用户发出请求时,传回请求id,然后关闭连接。设置javascript超时,以便在将来的某个时刻,当您预期算法已完成运行时,发出服务器请求。如果完成,服务器将返回结果,然后呈现结果。如果没有,请重新启动计时器

  • 因此,这实际上取决于您是想让您的服务器还是客户机来完成这项工作。如果是后者,它将使用javascript,除非您使用clojurescript创建javascript。我现在还不会为生产代码这样做,但您可以随意使用它


    最后,无论你做什么,确保你在页面上有一些小部件,它向用户指示工作正在完成。否则,他们最终会感到沮丧,再次点击服务器(或离开)。

    我想知道的第一件事是,运行此算法的图形有多大。您正在使用数千(或数百万)个顶点和边进行操作吗?或者这只是一个非常昂贵的算法

    让我们假设处理这些请求自然需要很长一段时间,不管您的算法编码有多好。严格来说,使用javascript并不是唯一的解决方案,但它可能是最适合您的方法

    选项:

  • 在客户端计算机上运行javascript算法。这里发生的是,当用户在表单上输入数据时,算法在客户端机器上的javascript上运行。您的服务器不再参与,这很好,因为您的资源没有被占用

  • 增加服务器上的超时时间。不建议超过20秒左右,因为人们只会让你的服务器负担更重

  • 在服务器上运行算法。使用Daniel Pittman建议的方法解决超时问题:当用户发出请求时,传回请求id,然后关闭连接。设置javascript超时,以便在将来的某个时刻,当您预期算法已完成运行时,发出服务器请求。如果完成,服务器将返回结果,然后呈现结果。如果没有,请重新启动计时器

  • 因此,这实际上取决于您是想让您的服务器还是客户机来完成这项工作。如果是后者,它将使用javascript,除非您使用clojurescript创建javascript。我现在还不会为生产代码这样做,但您可以随意使用它


    最后,无论你做什么,确保你在页面上有一些小部件,它向用户指示工作正在完成。否则,他们最终会感到沮丧,再次点击服务器(或离开)。

    阅读完所有这些内容后,你的问题是:如何使用JavaScript调用clojure代码?我怀疑JavaScript是否会