雖然我個人不喜歡一種風格而不喜歡另一種風格,但我不認爲從Javascript抽象出來的這些框架帶來的唯一好處就是它。當然,在抽象整個語言的過程中,會有以前可能變得不可能的事情,反之亦然。決定使用諸如GWT之類的框架來編寫vanilla JavaScript取決於很多因素。
使JavaScript與X語言的討論毫無結果,因爲每種語言都有其優點和缺點。相反,通過採用這樣一個框架來對將要獲得或失去的東西進行客觀的成本效益分析,而這隻能由你而不是不幸的SO社區來完成。
不知道底層的問題適用於JavaScript,就像它對任何翻譯過的源代碼一樣。你認爲有多少人知道jQuery究竟發生了什麼,因爲他們試圖做一個比較,比如$("p") == $("p")
,並且因此返回false
。這不是假設情況,關於同樣的問題也有幾個問題。學習語言或框架需要時間,如果有充足的時間,開發人員可以理解這些框架的編譯源。
上述問題的另一個相關方面是信任。我們不斷在較低層次的抽象層次上構建更高層次的抽象,並依靠低層次的東西應該按預期工作的事實。你最後一次深入到C++或Java程序的編譯二進制文件中以確保其正確工作?我們不是因爲我們相信編譯器。例如,當使用這樣的框架時,使用JSNI回落到JavaScript並不丟臉。這一切都是用手頭的工具以最好的方式解決問題。 JavaScript,Java或C#或Ruby等沒有什麼神聖之處,它們都是解決問題的工具,雖然它可能成爲你的障礙,但它可能是一個真正省時又有利於其他人的工具。
至於我認爲網絡編程的發展方向,我認爲有很多有趣的趨勢,或者希望能夠成功,例如服務器端的JavaScript。它至少爲我解決了非常實際的問題,因爲我們可以在Web應用程序中輕鬆避免代碼複製。客戶端和服務器端可以共享相同的驗證,邏輯等。它還允許編寫一個簡單的(de)序列化機制,以便RPC或RMI通信變得非常容易。我的意思是這將是非常好的能夠寫:
account.debit(200);
在客戶端,而不是:
$.ajax({
url: "/account",
data: { amount: 200 },
success: function(data) {
..
}
error: function() {
..
}
});
最後,它是偉大的,我們擁有所有這些多樣性在框架和解決方案構建Web應用程序,因爲下一代解決方案可以從每個解決方案的失敗中學習,並專注於他們的成功構建更好,更快,更棒的工具。
+1如果提到'綁定到編譯器的提供者'的問題 – 2011-04-19 14:00:35
WebSharper現在是開源的,但考慮到你寫這個時,這是一個非常好的答案。 – 2012-07-04 15:52:22
「出於某種原因,所有F#程序員都必須至少能讀取C#或VB.NET,否則他們無法訪問大多數關於.net框架的信息」。 FWIW,這當然不是真的。 – 2012-11-11 12:45:37