2014-04-10 13 views
0

我是新來的Node.js和我仍然在學習它,因爲我嘗試爲您解決問題。但是,我卡住了,需要一些輸入。的Node.js:卸載一些JavaScript處理到服務器

我有一個網站(爲簡單起見,我們把它叫做MyMathPage.html),這確實對(使用JavaScript)的客戶端的一些數學計算並顯示結果。

因此,MyMathPage.html的頭看起來有點像這樣:

<!DOCTYPE html> 
    <html> 
    <head> 
     <link rel='stylesheet' type='text/css' href='../css/style.css'> 
     <script type='text/javascript' src='../js/jquery.js'></script> 
     <script type='text/javascript' src='../js/Maths.js'></script> 
     <script type='text/javascript' src='../js/GetAnswer.js'></script> 
     ... 

然而,一些數學函數需要很長時間才能解決(〜15-20秒),所以我嘗試用Node.js查看Maths.js中的處理是否可以在服務器端完成(在Node.js上)以加快計算速度,因爲瀏覽器客戶端通常沒有很多內存或處理能力。

我的新架構的想法是這樣的:

  1. GetAnswer.js調用VAR數學=新的數學(calculationToMake,輸入) 從瀏覽器端
  2. 在Node.js的,我會數學.js 接受calculateToMake並從請求輸入,做所有計算服務器端並返回一個響應(返回MathsAnswer - 返回類型Maths)
  3. GetAnswer.js接收到響應並顯示結果。

我的問題是,如果我將Maths.js文件放入node.js服務器端,那麼對GetAnswer.js的「var math = new Maths(var1,var2))」請求將如何?此外,我對Node.js的反應將如何?

回答

2

Node.js的大概是這個錯誤的工具;它是單線程的(基於事件的),並且在進行這種計算時,您將基本上阻止服務器爲其他人服務。換句話說,如果你在客戶端進行數學運算,每個客戶端可能需要等待20秒才能得到結果。但是,客戶端可以全部並行運行。如果你在服務器上做這個數學運算,可能會更快,但是每個客戶端都必須排隊等待其他客戶端首先獲得結果。很可能你必須真正複雜的數學代碼才能避免這種情況。

這是值得商榷快多少有一臺服務器做這個工作真的會 - 尤其是隨着客戶數量的增加。請記住,每個新的併發客戶端本質上都會削減服務器的計算資源。 IOW,如果你的服務器速度是典型客戶端的兩倍,而你有三個典型的併發客戶端,那麼系統已經比以前慢了(客戶端等待的時間更長)。

相反,也許做的是使用一個Web工作,並顯示一個進度條最容易的事情。顯然,這不會加快速度,但會讓體驗更好一些。其他的選擇涉及編寫本地代碼來真正加速或試圖在node.js中運行單獨的進程/線程。但是,這些選項似乎過度設計了一個簡單的問題(再次,使用錯誤的工具進行工作)。

有多種方式可以得到長期運行的CPU密集型代碼與node.js的一個明智的方式工作,但它聽起來並不像它在這裏合適的解決方案。這聽起來像是你不應該用JavaScript來做這個數學運算 - 或者你需要一些更好的算法來加速它。這......或者只是一個更好的UI體驗,所以人們可以等待。