2012-01-05 18 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的路線。我不會那樣做生產代碼,但你可以玩弄它。

最後,無論你做什麼,都要確保在頁面上有一些小部件,向用戶表明正在完成工作。否則,他們最終會感到沮喪,並再次擊中服務器(或離開)。