Dart 语言在前端的热度为何如此之高?能否取代 JavaScript?

发表时间: 2023-10-02 06:20

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

高级前端进阶

前不久发文对比了 Flutter 与 PHA 等应用的区别,了解到 Flutter 底层使用了 Dart 语言,笔者虽然没有使用 Flutter 进行过线上项目的开发和部署,但是还是决定通过本文带着大家一起了解下该语言。下面是已经发表的文章传送门,欢迎大家阅读:

  • 《 为何国内大厂都用PHA?8个热门 PHA 应用级框架介绍 》
  • 《 Flutter vs PWA:跨平台移动应用程序开发的未来是什么?
  • 《 Native App vs. PHA vs. PWA 谁最适合你的应用? 》

作为忠实的 JavaScript 流派,对于很多前端新兴的编程语言还是充满了好奇,比如:Dart、Zig、Mojo(已经发文介绍过)等等。话不多说,直接开始!

前言

Dart 是一种编程语言,最初在 Google 内部用于构建 Web、服务器和移动应用程序。 Dart 自 2011 年以来一直存在,但在 Google 之外并没有引起任何关注。 Dart 编译源代码的方式与其他编程语言(如 JavaScript)类似,但是包含一个独立的 Dart SDK 。

Dart 和 Flutter 受关注数据

与其他编程语言不同,Dart 有自己的包管理器。2017 年,当谷歌正式宣布将 Dart 用于跨平台移动应用程序开发的 Flutter 测试版时,Dart 开始受到更多关注,热度逐年上升。比如上图展示了自 2018 年大会上发布 Flutter 以来 Dart 的发展情况。

1. 什么是 Dart 与 Dart 特性

了解一门语言最快的方法是了解其语言特性,从而快速判断是否适合当前项目。Dart 是一种面向对象的开源编程语言,包含许多有用的特性。 Dart 是一种新的编程语言,支持广泛的编程实用程序,例如:接口、集合、类、动态和可选类型。 它是为服务器和浏览器开发的。

Dart语言特性

以下是重要的 Dart 特性列表。

  • 完全开源:Dart 是一种开源编程语言,这意味着它可以免费使用。 Dart 由 Google 开发,通过 ECMA 标准批准,并附带 BSD 许可证。
  • 平台独立:Dart 支持所有主要操作系统,例如 Windows、Linux、Macintosh 等。Dart 有自己的虚拟机,称为 Dart VM,允许开发者在每个操作系统中运行 Dart 代码。
  • 面向对象:Dart 是一种面向对象的编程语言,支持所有 oops 概念,例如类、继承、接口和可选的类型化功能。 它还支持高级概念如混合、抽象、类、具体化泛型和健壮的类型系统。
  • 支持并发:Dart 是一种异步编程语言,这意味着它支持使用 Isolates 的多线程。 隔离是与线程相关但不共享内存并通过消息传递建立进程之间通信的独立实体。 消息应该被序列化以进行有效的通信。
  • 丰富内置库:Dart 由许多有用的内置库组成,包括 SDK(软件开发工具包)、core、math、async、math、convert、html、IO 等。它还提供了将 Dart 代码组织到具有适当命名空间的库中的工具。
  • 简单易学: Dart 的语法类似于 Java、C#、JavaScript、kotlin 等,如果了解这些语言中的任何一种,那么开发者可以轻松学习 Dart。
  • 灵活编译:Dart 提供了编译代码的灵活性和快速性。 它支持两种类型的编译过程,AOT(Ahead of Time)和JIT(Just-in-Time)。
  • 输入安全:Dart 是类型安全语言,这意味着它同时使用静态类型检查和运行时检查来确认变量的值始终与变量的静态类型相匹配。类型安全语言的另一个优点是,当开发者更改代码部分时,系统会警告之前修改过的那部分修改。
  • 面向对象:Dart 将一切都视为一个对象。 分配给变量的值是一个对象。 函数、数字和字符串也是 Dart 中的对象。 所有对象都继承自 Object 类。
  • 广泛浏览器支持:Dart 支持所有现代网络浏览器。 它带有 dart2js 编译器,可将 Dart 代码转换为优化的 JavaScript 代码,适用于所有类型的网络浏览器。
  • 庞大社区支持:Dart 在全球拥有庞大的社区。 因此,如果在编码时遇到问题,那么很容易找到帮助。 专门的开发人员团队正在努力增强其功能。

2.Dart vs JavaScript

文章上面部分介绍了 Dart 语言的核心特征,接下来带着大家一起比较下 Dart 和 JavaScript 两门语言,以便大家更好的认识 Dart。

易用性

JavaScript 在业界存在的时间更长,是一种成熟稳定的语言。 JavaScript 非常易于使用。 它有许多在线可用的框架和库,因此开发人员可以使用现有代码更快地开发应用程序。 但是,但为了学习 JavaScript 语法,开发者仍然需要一般编程的基本技术知识。

对于 Google 以外的大多数开发人员来说,Dart 是一种相当新的语言。 尽管谷歌在文档化 Dart 编程语言方面付出了很多努力,但开发人员仍然很难找到针对特定问题的解决方案。 在编码风格和语法方面,Dart 具有类似 Java 的语法,因此具有OOPS背景的开发人员只要学习了基础知识就可以轻松掌握和使用Dart。

流行度

目前,JavaScript 无处不在, 世界上没有不能运行 JavaScript 的设备。 有许多公司正在使用 JavaScript 框架来开发 Web 和移动应用程序。 JavaScript 还可用于编写服务器端应用程序和后端。

JavaScript 和Dart 流行度

在 Google 发布 Flutter 之前,Dart 还无迹可寻。 然而,自从在 Google I/O 上宣布 Flutter 以来,Dart 受到了移动开发人员的极大关注。 不喜欢 JavaScript 作为编程语言的开发人员逐渐切换到 Dart 。 随着 Google 等大公司采用 Flutter,Dart 的流行度大大提高,但它的流行度目前仍然不及 JavaScript。

生产力

JavaScript 生态几乎每年都有新 JavaScript 框架涌现,这一点从庞大的 NPM 生态就可见一斑。 依赖现有的包和以前开发人员的成功经验,初学者很容易学习和采用 JavaScript。

同时, JavaScript 是一种快速、轻量级和动态的编程语言,极大的提高开发人员的生产力。 但是频繁的 JavaScript 框架发布,可能对开发者带来困扰,最终对效率产生影响。

Dart 有很多优秀特性,但新手甚至有经验的开发人员都可能会对 Dart 语言的特性感到困惑。 Dart 语法简洁,很大程度上与 Java 相似,因此具有 Java 背景的开发人员可以轻松上手。 然而,Dart 、 Flutter 的社区完善程度远不及 JavaScript。

学习曲线

对于初学者来说,入门 JavaScript 简单,但是深入 JavaScript 还是有一点的难度。不过幸运的是,很多在线课程、教程、视频等资料可助力其快速学习。

相比之下,Dart 对于初学者来说并不友好,因为 Dart 不是一种常用的编程语言,而且在线提供的有关 Dart 的课程、书籍非常有限。 然而,谷歌最近在官网更新了大量关于 Dart 的文档,助力 OOPS 语言生态的程序员轻松掌握 Dart 。

速度

JavaScript 是一种解释型语言,因此可能会给人更轻、更快的感觉。 然而,事实证明当针对 JavaScript (Node.js)和 Dart 进行基准测试时,结果 Dart 要快得多。

而且 Dart 可以同时编译,这有助于以多种方式构建应用程序,因为使用 JIT 编译可以加快开发速度,并且可以在发布过程中使用 AOT 编译以实现更好的优化。 该技术已用于 Flutter 应用程序开发。

前端与后端

JavaScript 最初用于使用 HTML 和 CSS 进行前端 Web 开发。 然而,随着框架、Wasm 的兴起,JavaScript 现在也被广泛用于服务器端和后端开发。

Dart 目前正积极与 Flutter 一起用于开发跨平台移动应用程序的前端。 Dart 也可以用于,但是尚且没有用于后端开发。

Web 与移动设备

JavaScript 主导了不同框架的移动和 Web 应用程序开发。 随着 Facebook 发布 React 和 React Native,JavaScript 成为初创公司和小型企业开发 Web 和移动应用程序的不二选择。 市场上有大量 JavaScript 框架可用于开发 Web 应用程序、渐进式 Web 应用程序和混合移动应用程序等等。

与 JavaScript 类似,Dart 可用于移动和 Web 开发。 Dart 与用于开发跨平台移动应用程序的框架一起流行起来。 Dart 也可以用于开发服务端,但实际上很少用于此目的。不过值得一提的是,Dart 的未来取决于 Flutter 的成功,而 JavaScript 已经成功了

IDE/商业用途

JavaScript 在大公司中广泛用于开发 Web 和跨平台移动应用程序。 Facebook 是内部使用的 React 和 React Native 框架的先驱,但还有许多其他大公司使用 JavaScript,包括 Instagram、Reddit、eBay、Slack、Airbnb 等。

Dart 诞生于谷歌,所以显然它在谷歌内部使用,但也有一些像阿里巴巴这样的大品牌也采用 Flutter 和 Dart 来开发跨平台移动应用程序。 还有其他一些使用 Dart 的大公司,包括 Blossom、WorkTrails、Whale、Mobile 等等。

3.Dart vs JavaScript优缺点

不同的开发者可能喜欢不同的编程语言,所以 Dart 、JavaScript 到底谁更好很难得出统一结论。 当然,一定程度上,开发人员选择使用的语言取决于项目需要以及开发人员及其团队的综合实力。但是,我们还是可以从一定程度上对比下这两种语言。

Dart vs JavaScript优缺点

Dart 的优点主要可以概括为以下几个方面:

  • 开源
  • 由 Google 提供支持,可在 Google Cloud Platform 上轻松运行。
  • Dart 比 JavaScript 快大约两倍。
  • Dart 是类型安全的,并且使用 AOT 和 JIT 编译器编译。
  • Dart 具有跨项目的可扩展性。
  • Dart 与 Javascript 非常相似,如果开发者已经了解 Javascript,则很容易学习。
  • Dart 广泛用于 Flutter 移动 UI 框架。

任何一种语言都有自己的局限性,Dart 的缺点主要包括以下几个点:

  • Dart 对于程序员来说是相当新的,并且在市场上很少使用。
  • Dart 的在线资源非常有限,很难找到问题的解决方案。
  • Dart 有一个单一的对象范式(类)。
  • 在 Dart 中,开发者不能在不编写另一个赋值语句的情况下重命名函数。

以上内容重点概述了 Dart 语言的优点和缺点,接下来一起来看看 JavaScript 的优点。

  • JavaScript 可用于 Web 和移动应用程序。
  • 它可以用于前端和后端,因此 JavaScript 可以在任何设备上运行。
  • JavaScript 拥有庞大的社区和很多在线可用的优秀框架。
  • JavaScript 对其他语言很友好,因此许多其他应用程序都可以使用 JavaScript。
  • JavaScript 快速、灵活且轻量级。

说到 JavaScript 的优点, 就不得不提到 JavaScript 的缺点,主要可以概括为以下几个点:

  • 作为一种动态弱类型语言,程序员很容易犯错误。
  • 客户端安全性还有很多不足之处
  • 一个错误可能导致整个网站崩溃。
  • 多线程支持不可用
  • 发展快、框架等迭代迅速,需要不断学习

了解了 Dart、JavaScript 的优缺点后,接下来带着大家一起聊聊 Dart 是否会替代JavaScript。虽然不同人会有不同的看法,但是我们可以从宏观上进行简单论述。

4.Dart 会替代JavaScript么

根据 2015年5月 infoworld 的消息,谷歌在 2015 年就已经否认过 Dart 最终会替换 JavaScript 的论调 。根据 Dart 联合创始人 Lars Bak 和 Kasper Lund 的说法:Dart 专注于编译成 JavaScript,而不是将直接支持 Dart 语言的虚拟机(Dart VM)集成到浏览器中。

但是,这并不意味着 Dart VM 不会继续开发。 相反,这项工作现在将专注于补充 Dart 已经在使用的地方。例如,在 Google Ads 中,一百万行 Dart 代码正在部署中。

1)Dart VM 提供了一个即时编译器 (JIT),具有增量重新编译(启用热重载)、实时指标收集(支持 DevTools)和丰富的调试支持。

2)当应用程序准备好部署到生产环境时,无论是发布到应用程序商店还是部署到生产后端,Dart AOT) 编译器可以编译为原生 ARM 或 x64 机器代码。 AOT 编译的应用程序可以提供一致的、较短的启动时间。

3)AOT 编译的代码在高效的 Dart 运行时中运行,该运行时强制执行健全的 Dart 类型系统并使用快速对象分配和分代垃圾收集器管理内存。

从一开始,Dart 就面临着两种未来。 一方面,Dart 成为浏览器中 JavaScript 的补充,尽管 Dart 似乎不太可能在 Google Chrome 以外的任何浏览器中获得吸引力。 另一方面,正如 Dart 1.0 版发布的博客文章的论述,Dart 更像是一种用于构建 Web 应用程序的服务器端语言,而 JavaScript 通过 Node.js 已经早早实现了这个目标。

通过Dart Native和 Dart Web运行Dart

虽然谷歌在 Google Cloud 平台中添加了对 Dart 的服务器端支持,但它没有在 Chrome 中提供 Dart VM。 在客户端运行 Dart 的唯一方法是将其编译为 JavaScript(运行速度比原生Dart 慢)或使用包含 Dart VM 的称为 Dartium 的特殊浏览器构建。 谷歌本身似乎不清楚 Chrome 是否会包含 Dart VM。

对于面向移动和桌面设备的应用程序,Dart 包括一个JIT 编译的 Dart VM 和一个用于生成机器代码的 AOT 编译器。

2023年JavaScript vs. Dart流行度排名

与更流行和广泛部署的 JavaScript 相比,Dart 在 Google 之外也没有太大的影响。 Dart 在2023 年跻身 Tiobe 语言流行指数 28 名,而相比之下,JavaScript 排在第7位,这个流行程度相差不是一点半点。

5.本文总结

本文主要和大家介绍下为何 Dart 语言在前端大火,Dart 最终能否替代JavaScript。相信通过本文的阅读,大家对 Dart 会有一个初步的了解。对 Dart 能否在与 JavaScript 的竞争中获胜会有一个自己的判断。

因为篇幅有限,文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏!

参考资料

https://betterprogramming.pub/9-features-i-love-about-the-dart-programming-language-b16d28906e3f

https://dart.dev/guides/language/language-tour

https://dart.dev/language

https://dart.dev/guides/language/effective-dart

https://blog.codemagic.io/dart-vs-javascript/

https://www.javatpoint.com/dart-features

https://www.infoworld.com/article/2902074/google-dart-will-not-replace-in-browser-javascript.html

https://dart.dev/overview