Javascript大师说服我,我应该使用Javascript过度编译为js语言,比如Dart或Typescript

Javascript大师说服我,我应该使用Javascript过度编译为js语言,比如Dart或Typescript,javascript,dart,client-side,Javascript,Dart,Client Side,您好,我即将开始开发大规模前端应用程序,我正在研究什么是客户端生态系统的最佳选择。我是一个有Java背景的人,做了一段时间的Spring应用程序,在我空闲的时间里,我在我的私人项目中工作,它的大部分逻辑部分都驻留在浏览器中。这是一个基于web的图像处理和图表应用程序,需要大量的图形处理、高级用户交互(如拖放),我希望代码库足够大。我处理过写得很糟糕的大型js代码库。我很头疼。然后我对javascript产生了坏名声。起初我在看谷歌网络工具包。但我发现它不适合我的应用程序,在GWT中开发的成本非常

您好,我即将开始开发大规模前端应用程序,我正在研究什么是客户端生态系统的最佳选择。我是一个有Java背景的人,做了一段时间的Spring应用程序,在我空闲的时间里,我在我的私人项目中工作,它的大部分逻辑部分都驻留在浏览器中。这是一个基于web的图像处理和图表应用程序,需要大量的图形处理、高级用户交互(如拖放),我希望代码库足够大。我处理过写得很糟糕的大型js代码库。我很头疼。然后我对javascript产生了坏名声。起初我在看谷歌网络工具包。但我发现它不适合我的应用程序,在GWT中开发的成本非常昂贵,因为它的抽象非常复杂。我完成了研究和计划阶段。最近我也换了Ruby做我的日常工作

我从一开始就在跟踪开发,对它印象深刻。我喜欢类库、mixin、内置库方法(对我来说,这是Javasript的巨大优势)、流/承诺和Web组件等特性。我喜欢它的严格性。dart语言的可选静态类型将应用程序的错误行为降至最低,并帮助我编写更有效/优化的代码。重要的是,我可以应用Java世界中使用的熟悉的设计模式和编程技术。现在我决定继续,或者给它更多的分数

最近,我花了很多时间发现Javascript的更高级用法。刚刚读完约翰·雷斯格的《JavaScript忍者的秘密》,我的眼睛完全睁开了。我可以看到使用RequireJS和Grunt可以管理我的大型代码库。我读过一些人的观点,他们说使用Dart有长期风险。关注的问题是:

  • 编译后的javascript源代码可能存在意外错误,并可能影响应用程序行为
  • Javascript正在发展。next承诺了一些不错的特性,比如模块、映射和类。即使正确,我们也可以使用traceur编写Ecma.next代码
  • 如果谷歌在chrome中提供本机dart虚拟机。我的应用程序在其他浏览器中的性能会有所不同。这不好
  • 它并没有被广泛采用,所以当您的应用程序增长时,很难找到使用Dart编写代码的优秀人员
  • 对我来说,这些都不足以说服我放弃Dart。所以,如果您在Dart和Javascript方面都有一些有趣的观点,请告诉我

    这听起来可能让我困惑,但这只是我研究的一部分。当然,除了特定的编程语言或技术之外,还有其他开发部分,如应用程序架构/设计和模式

    1)省道有助于消除浏览器差异。我认为,由于目标移动,这些技术可能会有缺陷。如果您想自己处理浏览器的差异,那么这也很容易出错(我认为更容易出错),或者您使用jQuery之类的库,它们也很复杂,并且可能有bug

    2) 但我认为这是Dart的好处之一,它有助于消除浏览器之间的差异。我认为这是建议继续使用JavaScript的最大缺点,因为它也有一些很酷的特性。您只能在所有目标浏览器都支持这些功能时使用它们。在Dart中,您可以只使用这些功能中的大部分

    3) 如果有一个浏览器的性能更好,有什么不好? 您仍然可以在Chrome上运行JavaScript版本,即使它具有本机Dart支持

    4) 不管用什么语言,好人都很难找到。但我认为优秀的人很可能会热衷于新技术。
    飞镖很容易学。最难的部分是你在为Web开发时所面临的所有特性(CSS、浏览器错误、客户端/服务器应用程序架构等),语言本身通常是最简单的问题。

    我赞成普通的JavaScript。任何时候,当您引入一种编译成JavaScript的新语言时,您都会在框架引入的众多层之外得到另一层抽象。您最好将时间花在评估JavaScript框架上,而不是学习一种转换成另一种语言的语言

    我构建了大型前端应用程序,你最好学习前端技术,因为相信我。当应用程序代码或浏览器本身出现bug时,您需要了解它们

    由于您来自Java背景,假设每台计算机操作系统至少有4个JRE可用,但您不确定它是哪一个。哦,所有这些JRE都是由不同的供应商构建的。现在,您需要构建一个厚客户机GUI,并希望编写在编译时转换为Java的Ruby,因为您了解Ruby,但不了解Java


    你也面临同样的情况。

    我回答了一个类似的问题。正如你在我的总结中看到的,我也不认为这些理由足以放弃飞镖的好处。我主要关心的是如何找到Dart程序员,因为您将自己的应用程序描述为巨大的,但Dart非常直观,任何具有类似语言背景的人都可以很快了解它。“另一层抽象”如果您使用Dart编写良好且经过测试的代码,这并不是一个问题,编译器将生成比手写js更高效的js。我假设dart2js编译器在所有可能的情况下都经过测试,以尽量减少副作用。将JQuery或下划线视为另一个抽象层,因为我不知道它的每一个细节。因此,我可以看到编译后的dart:core代码是下划线,dart:html代码是jquery。无论如何,像一些JS框架一样,抽象层是必要的,以抽象出JS的丑陋和局限性以及浏览器的差异。为什么不使用适当的抽象来提供工具(自动完成、过梁、摇树、缩小)