虽然,我个人并不偏爱一种风格,但我不认为 Javascript 的抽象是这些框架带来的唯一好处。当然,在对整个语言进行抽象的过程中,会有一些以前可能的事情变得不可能,反之亦然。使用 GWT 等框架而不是编写原生 JavaScript 的决定取决于许多因素。
将其作为 JavaScript 与 X 语言的讨论是徒劳的,因为每种语言都有其优点和缺点。相反,对使用这样的框架会获得或失去什么进行客观的成本效益分析,不幸的是,这只能由您而不是 SO 社区来完成。
不知道幕后发生了什么的问题适用于 JavaScript,就像它适用于任何翻译的源一样。你认为有多少人会在他们尝试进行比较时确切地知道 jQuery 中发生了什么,例如$("p") == $("p")
并得到false
结果。这不是假设的情况,关于 SO 有几个关于此的问题。学习一种语言或框架需要时间,如果有足够的时间,开发人员也可以很好地理解这些框架的编译源。
与上述问题相关的另一个方面是信任。我们不断地在较低级别的抽象上构建更高级别的抽象,并依赖于较低级别的东西应该按预期工作的事实。您上一次深入研究 C++ 或 Java 程序的编译二进制文件以确保其正常工作是什么时候?我们不这样做是因为我们信任编译器。
此外,当使用这样的框架时,例如使用 JSNI 退回到 JavaScript 并不丢人。这一切都是为了使用手头的工具以最佳方式解决问题。JavaScript、Java、C# 或 Ruby 等没有什么神圣之处。它们都是解决问题的工具,虽然它对你来说可能是一个障碍,但它可能是一个真正的节省时间和对其他人有利的工具。
至于我认为 Web 编程的发展方向,有很多有趣的趋势我认为或者更确切地说希望会成功,例如服务器端的 JavaScript。它至少为我解决了非常实际的问题,因为我们可以在 Web 应用程序中轻松避免代码重复。可以在客户端和服务器端共享相同的验证、逻辑等。它还允许编写一个简单的(反)序列化机制,因此 RPC 或 RMI 通信变得非常容易。我的意思是,如果能写出这样的话,那就太好了:
account.debit(200);
在客户端,而不是:
$.ajax({
url: "/account",
data: { amount: 200 },
success: function(data) {
..
}
error: function() {
..
}
});
最后,很高兴我们在构建 Web 应用程序的框架和解决方案方面拥有所有这些多样性,因为下一代解决方案可以从每个解决方案的失败中吸取教训,并专注于他们的成功,以构建更好、更快、更棒的工具。