2012-01-05 39 views
0

我对web开发非常陌生,我编写了代码以从窗体获取用户输入,从中创建图形并在其上运行图形化算法。Web开发:构建图形并运行算法

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

为了解决这个问题,我认为我必须使用JavaScript而不是发送请求 - 这是什么通常与需要大量时间的函数完成?

我的主要问题是:我必须重写JavaScript中的代码还是有方法从JavaScript调用我的原始功能?

我正在使用clojure ...

+1

因此,在读完所有内容之后,您的问题是:如何使用JavaScript调用clojure代码? – epascarello 2012-01-05 23:39:06

+0

我怀疑Javascript会太慢。你的功能究竟应该做什么?你能用O表示法来表达吗? (http://en.wikipedia.org/wiki/Big_O_notation) – Art 2012-01-06 00:22:27

+0

espascarello:我很抱歉 - 我不知道JavaScript是否有帮助。我仍然很不确定一般的网络编程,所以我也想知道在这种特殊情况下是否还有其他选择。 – markl 2012-01-06 03:57:45

回答

2

您可以在Clojure中编程您的Javascript。

clojurescript

+0

我可以试试这个。我使用java库JGraphT-如果clojurescript被编译为javascript,这意味着我必须改变它,对吧? – markl 2012-01-06 04:44:39

+0

是的,如果你想在客户端使用Java库,它必须在applet中。 – user615457 2012-01-08 09:03:01

2

像你需要一些方法来提交请求听起来较多,有它在后台进行处理,然后检索结果当他们准备好 - 全部作为独立的Web请求。

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

大多数后端语言提供了一些实现方法; Clojure在线程,代理和类似工具方面非常出色。重新构建您的客户端/服务器交互,您不必再担心这一点。

1

我很好奇的第一件事是你运行这个算法的图表有多大。你是否在做数千(或数百万)个顶点和边缘?或者这只是一个非常昂贵的算法?

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

选项:

  1. 运行的算法,在JavaScript中,在客户机上。这里发生的是,当用户在表单上输入数据时,算法在客户机上的javascript上运行。您的服务器不再涉及,这很好,因为您的资源不受限制。

  2. 增加服务器上的超时时间。不建议超过20秒左右,因为人们最终会对服务器征税更多。

  3. 在服务器上运行算法。使用Daniel Pittman建议的方法解决超时问题:当用户发出请求时,传回请求ID并关闭连接。设置一个JavaScript超时以在将来某个时候发出服务器请求,当您希望该算法已完成运行时。如果完成,服务器将返回结果,然后进行渲染。如果不是,请重新启动计时器。

所以真的这取决于你是否想让你的服务器或客户端的机器做的工作。如果是后者,它将在JavaScript中,除非你使用clojurescript创建你的javascript的路线。我不会那样做生产代码,但你可以玩弄它。

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