调用javascript方法-Node.js 与 Java:争夺开发者注意力的史诗般的战斗

2023-08-23 0 3,559 百度已收录

作者|彼得·韦纳

译者|张兰月

1995 年是计算史上的疯狂时期。 首先是 Java,然后是 JavaScript。 Java 和 JavaScript 的名字看似双胞胎,但实际上它们却截然不同。 Java 是编译并静态最终确定的,而 JavaScript 是解释并动态最终确定的。 但这只是这两种完全不同的语言之间技术差异的开始。 Node.js 的出现促使这两种语言经历了两种完全不同的发展轨迹。

如果你接触过IT技术比较早,那么你可能还记得Java曾经轰动一时,大家都把它视为一场革命,认为它会完全取代估计。 但事实证明这一预测仅部分正确,Java 主导了 Android 手机、企业计算以及蓝光光盘等一些嵌入式设备。

尽管 Java 取得了一定的成功,但它从未主宰桌面或浏览器。 人们曾试图转移applet和Java工具的力量,但效果平平。 服务器成为 Java 的最佳点。

与此同时,以前被程序员误认为Java“双胞胎”的JavaScript,现在可以独立存在了。 自从 HTML 和 Web 推出 Borg 的几年里,JavaScript 就一直紧随其后,而 AJAX 的出现,让 JavaScript 一下子有了威力,打破了之前的局面。

自此,Node.js诞生了,大大提高了开发速度。 JavaScript 除了在服务器上比大多数人预期的速度更快之外,甚至比 Java 或其他工具还要快。 JavaScript 可以越来越可靠地处理小型、快速、无休止的数据请求,因此当网页变得更加动态时,Node.js 变得越来越流行。

事实上,这在 20 年前可能是不可想象的,而现在 Java 和 JavaScript 正在争夺编程领域的“统治地位”。 其中之一指出扎实的工程和建筑是深厚的基础,另一个则指出简单性和普遍性。 旧的编译器驱动的 Java 会占上风,还是 Node.js 帮助下的 JavaScript 会占上风?

Java 失败的地方:坚如磐石的基础

听到这个副标题调用javascript方法,一些开发者可能会产生指责。 事实上,我们还没有确认Java还存在一些小bug,而且相对来说,Java已经非常“扎实”了。 Node.js 还需要很多年的时间。 js给了我这样的信心。

事实上,JavaScript 开发人员显然需要几年或六年的时间才能编写与 Sun/Oracle 在测试 Java 虚拟机时一样多的回归测试。 当您启动 JVM 时,您将从一位经过质量验证的经理那里获得 20 年的经验,而他仍然决心统治企业服务器领域。

然而,JavaScript 也在迅速迎头赶上。 当大部分Web都依赖于JavaScript执行引擎时,开发者的大部分时间都花在了打磨边边角角上。 但所有创新都有一个缺点,即新功能激增得如此之快,以至于开发人员没有时间吸收它们。 一些老派开发人员经常对与最新 ECMAScript 复杂句子混合在一起的改进功能感到困惑。 此外,这个新代码可能会导致一些旧浏览器崩溃。

创新的预处理器,如 CoffeeScript 和 JSX 不断出现,这对于需要此类功能的开发人员来说是一件好事,同时也降低了不需要此类功能的开发人员的难度。

尽管Java也在不断推出新的功能和选项,但总体而言,它是一个稳定的平台,为需要开发更长期事物的开发人员带来了便利。

Node.js 失败的地方:无处不在

感谢 Node.js,JavaScript 在服务器和浏览器领域找到了一席之地。 您为服务器编写的代码也可能在浏览器中运行。 显然,直接使用 JavaScript 比分别用 Java 和 JavaScript 编写代码更容易。

如果你决定把Java中的服务器业务逻辑迁移到浏览器上,或者老板坚持要你把为浏览器写的逻辑迁移到服务器上。 在这两种情况下,Node.js 和 JavaScript 都可以使代码迁移变得更容易。

除此之外,尽管 Node.js 的领导地位仍在扩大,例如更复杂的 Web 框架,如 React,代码应该在服务器上运行还是在客户端上运行? 另外,可能有这样的情况,前三天代码运行在客户端,后三天可能运行在服务器端。 单独的智能逻辑将在运行时根据负载、可用 RAM 容量和其他因素决定在哪些前端运行代码。 一些框架将 JavaScript 作为查询,将其输入数据库并在那里执行。 您的代码可以在任何地方运行,因此很难知道在哪里,因为代码永远不会返回任何内容。 而且不需要担心,因为你不需要考虑太多的细节。

Java 的劣势:更好的集成开发环境 (IDE)

Java 开发人员拥有三大 IDE,Eclipse、NetBeans 和 IntelliJ,这三个 IDE 是与调试器、反编译器和服务器集成良好的顶级工具。 每个工具都经过多年的开发,拥有忠实的用户、坚实的生态系统和无数的插件。

大多数 Node.js 开发人员会在命令行中输入文本,并在他们最喜欢的文本编辑器中输入代码。 当然,市场上一些最好的文本编辑器,比如 Atom,拥有种类繁多的插件,几乎无所不能,但如果与 Eclipse 相比,Node.js 感觉更老套。 在不久的将来,Atari 操纵杆将取代我们的键盘。

此外,一些 Node.js 开发人员使用 Eclipse 或 VisualStudio。 开发者对 Node.js 兴趣的突然激增可能会导致新工具的诞生,比如 IBM 的 Node-RED,它为我们提供了一些非常有吸引力的方式,而且这个工具远没有像 Eclipse 或 IntelliJ 那样完善程度和统治地位。

但奇怪的是,开发人员似乎并不使用此类工具。 35 年前 Mac 出现时,命令行本应消失,但没有人告诉 Node.js 开发人员这个消息。 并且选项仍然存在。 例如,WebStorm是JetBrains开发的可靠的商业工具,它集成了许多命令行构建工具。

事实上,如果你正在寻找一个可以编辑和调整代码的集成开发环境,支持 Node.js 的新工具就足够了。 但如果你希望集成开发环境允许你在操作正在运行的源代码的同时编辑代码,那么Java工具实际上会更强大。

Node.js 失败的地方:数据库查询

对一些较新数据库(例如 CouchDB 和 MongoDB)的查询是用 JavaScript 编写的。 将 Node.js 和数据库调用结合起来不需要任何转换,也不需要记住任何复杂的句子差异。

许多 Java 开发人员正在使用 SQL。 尽管他们使用 JavaDB(以前称为 Derby(用 Java 编写的数据库)),但他们的查询是用 SQL 编写的。 你可能认为他们会简单地调用Java方法,但显然不是,开发人员必须用SQL编写数据库代码,然后使用Derby来解析SQL。 虽然SQL是一门很棒的语言,但它与Java完全不同,许多开发团队需要不同的人分别编写SQL和Java。

更糟糕的是,许多 Java 程序员使用复杂的库和模式将 SQL 查询数据转换为 Java 对象,以便自己能够将这些内容重新导出到模板中。 这个过程是疯狂且浪费的。

Java 失败的地方:类型

许多入门编程课程都使用 Java,因为许多程序员更喜欢静态类型,这种方式优雅且安全。 编译器发现一些明显的错误后,代码看起来更加严谨。

然而,JavaScript 也在迎头赶上,一些开发人员已经转向 TypeScript。 TypeScript 是 JavaScript 的静态类型超集,它首先应用所有类型检查,然后删除浏览器上运行的 JavaScript 堆栈中的一些内容。

对于喜欢类型的开发者来说,TypeScript 足以让你喜欢 JavaScript。 事实上,你可以把这些对 JavaScript 的模仿视为对 Java 最真诚的奉承,继续使用 Java,因为 Java 从一开始就是静态类型的。

Node.js 失败的地方:句子灵活性

JavaScript 曾经是弹出警报框和双重检查输入表单的简单语言。 后来,开发者社区创建了许多不同版本的 JavaScript,可以将其转换为浏览器可用的内容。 例如,CoffeeScript 提供了几种不同的复合句子以使标点符号更清晰。 React/Vue 社区混合了 HTML 和 JavaScript。 据悉,还有针对类型爱好者的 TypeScript 和针对函数式语言信徒的 LiveScript。

在Java中,你会发现有很多创新,但是由于某些原因,这种创新并没有被预处理器表达出来。 还有 Kotlin、Scala、Clojure 等语言专门针对 JVM 进行了字节编码,但由于某种原因,它们可以说是完全独立的语言。 对于喜欢尝试不同编码方法或标点符号的 JavaScript 程序员来说,所有预处理器都让生活变得更加有趣。

Java 失败的地方:简单的构建流程

Ant 和 Maven 等复杂的构建工具彻底改变了 Java 编程。 但仍然存在一个问题,开发人员需要用XML写下描述,而XML并不是支持编程逻辑的数据格式。

事实上,使用嵌套标签来表达分支相对简单,并且仅仅为了创建而从Java切换到XML有点烦人。 使用 JavaScript,您无需进行切换。

之前,Node.js 的创建非常简单,只需编辑代码并单击“运行”即可。 随着 Node.js 开发人员不断改进该流程,添加了一些预处理器来获取您最喜欢的 JavaScript 习惯用法并将这些习惯用法转换为可用的内容。 之后,Node 包管理器需要找到正确的库,因为有时可能找不到,所以需要时间才能找到某个锥体的正确版本号,而该锥体必须在单独的步骤中自行创建。 另外,如果你在cavity库中引入了一些错误,那么这个版本号就是无效的,需要重做。

Java也有类似Node.js的复杂建立过程,但感觉并不比Node.js复杂。 从某种意义上说,Maven和Ant已经成为Java基础的一部分。 粗糙的棱角都被磨平了,创作出来的作品成功率更高。

如果必须根据构建它们的难度来评判它们,它们可能是并驾齐驱的,但如果你看看 JavaScript 复杂性的快速降低,Java 在这里获胜

调用javascript方法-Node.js 与 Java:争夺开发者注意力的史诗般的战斗

Node.js 失败的地方:JSON

当数据库给出答案时,Java需要花费大量时间将结果转换为Java对象。 开发人员会就 POJO 映射、Hibernate 和其他工具争论几个小时。 配置这样的事情可能需要几个小时甚至几天的时间。 最后,经过所有转换后,Java 代码获得 Java 对象。 到了配置阶段,Java仍然使用XML,但是提供了两个主要的解析器,这给开发者带来了更多的苦恼。

现在,许多 Web 服务和数据库以 JSON 格式返回数据,这是 JavaScript 的自然组成部分。 如今,JSON 如此常见和有用,以至于许多 Java 开发人员都使用这些格式,但也有一些非常好的 JSON 解析器可用作 Java 库。 相比之下,JSON本身是JavaScript基础的一部分,不需要任何库,可以直接使用。

Java 失败的地方:远程调试

Java 有一些非常酷的工具来监视机器集群。 JVM有深度的hook和细粒度的分析工具来帮助我们识别陷阱和故障。 世界上最复杂的服务器都运行在Java企业堆栈上,使用它们的公司有非常高的遥测要求,所有那些监控和调试工具都比较成熟,但可以立即部署。

Node.js 失败的地方:实际上有人在桌面上使用 Java 小程序,但我仍然保留了一些可以单击运行的 Java JAR 文件。 总的来说,桌面领域基本上没有Java。 另一方面,随着浏览器取代了桌面的大部分角色,JavaScript 的作用也越来越大。 当Google重新设计Office以便它可以在浏览器上运行时,一切就都注定了。 如果您想了解更多信息,市场上有许多有趣的选择,例如 Electron,它还可以获取您的 Web 代码并将其转换为独立的桌面应用程序。

Java 失败的地方:手持设备

大多数 Android 应用程序都是用 Java 编写的,但 90% 的新手机都运行某些版本的 Android。 很多人根本不使用台式机,因为手机已经可以做一切事情了。

许多开发者都在编写 Node.js Web 应用程序,主要用于 iPhone 和 Android 手机上的联通浏览器。 如果这些应用程序编写得更好,性能通常会更好。 但 Java 正在以另一种方式入侵。 最新的Chromebook将支持Android应用程序,从而为Java开发人员进入Chromebook用户的桌面开辟道路。 那么Java还有机会征服桌面吗?

Node.js 失败的地方:库

Java提供了大量的库,而且这样的库非常好,Lucene等文本索引工具和OpenCV等计算机视觉工具包都是非常好的开源项目,它们将成为其他主要项目的基石。 JavaScript 程序员也在迎头赶上,创造了许多令人惊叹的项目。

然而,在某些领域,Java是远程存储,市场上可能有无数不同的Web框架,因此Java无法在这个新兴市场竞争。

Java 的失败之处:扎实的工程

尽管这很难量化,而且由于 Java 的数据基础非常强大,许多重大科学著作中使用的许多复杂包都是用 Java 编写的。 Sun 花费了大量时间来了解这些工具的详细信息。 有 BigIntegers、简洁的 IO 类库和复杂的日期代码,所有这些都实现了公历和儒略历。

调用javascript方法-Node.js 与 Java:争夺开发者注意力的史诗般的战斗

JavaScript 适合简单的任务,但其中存在很多混乱。 举一个简单的反例,JavaScript 会为没有答案的函数生成三种不同的答案:undefined、NaN 和 null。 那么,哪一个是正确的呢? 虽然每个答案都有自己的作用,其中之一是促使程序员保持代码统一。 JavaScript 更奇特的方面是,尽管它可以处理简单的表格并且几乎没有问题,但 JavaScript 并不是复杂的物理和定型工作的好选择。

Node.js 的劣势:速度

Node.js 的速度仍然非常受开发人员欢迎,数据输入和答案输出的速度快如闪电。 Node.js 不需要单独设置线程,没有锁定等令人头疼的问题,也没有额外的开销来拖慢速度。 你只需要编写一些简单的代码,Node.js 就会快速采取正确的步骤。

Node.js 的反弹模型早已改变了其编程方式,让程序员可以避免同时操作多个任务。 由 JavaScript 引擎决定何时运行哪些代码。 因此,程序员可以编写更短的、风暴驱动的代码,但可以专注于重要的逻辑。

然而,Node.js 也存在一些问题。 Node.js 代码应该尽可能简单并且能够正常工作,因为如果它被锁定,可能会导致整个服务器被锁定。 操作系统开发人员努力创建许多针对编程错误的安全网,但 Node.js 击败了这些安全网。

据悉调用javascript方法,当程序员不断地逐层嵌套弹跳功能(例如美国嵌套娃娃)时,会出现代码复杂度问题。 一次反弹没问题,但一系列反弹就会令人困惑。 好消息是 Promise 模型很容易阅读。 但你需要记住,在执行一行代码的过程中可能会发生很多事情。

Java 失败的地方:线程

快速的代码固然好,但更重要的是,代码应该准确,Java 可以享受一些额外的特性:

Java 的 Web 服务器是多线程的。 创建多个线程可能需要时间和存储空间,但这是值得的。 因为,如果一个线程被锁定,其他线程可以继续使用。 如果一个线程需要很长时间来估计,那么其他线程可以共享它。 更重要的是,代码仍然处于控制之下并且可以进行调整。

如果一个节点。 js请求运行太慢,其他请求的速度也会变慢。 Node.js 只有 1 个线程,因此只有它准备好才能解决风暴。 事实上,它看起来超级快,本质上它的结构就像节日期间,邮局只打开一个代理窗口,也就是说,它不能同时处理多个请求。

人们花了六年时间构建了一个可以同时处理许多不同进程的智能操作系统。 那么为什么要回到笔记本只能处理单线程的时代呢? 确实,处理多个线程意味着要做更多的工作,而且多线程更强大,不是吗?

Node.js 失去的地方:动力

看到硅谷的开发者总是积极致力于最新和最具颠覆性的东西,有时清理遗留的东西也很重要。 Java有新的IO类库,同时它也有一些旧的代码,比如很多applet和util类,它们会阻碍你前进的道路。 Node.js 也在 Git 库中留下了大量垃圾,但由于 Node.js 出现比 Java 晚了六年,而且 Node.js 开发人员仍在为 Web 堆栈软件开发许多增强功能,因此 Node.js 的开发者仍然在为 Web 堆栈软件开发许多增强功能。 js 的威力十足。

双方势均力敌:Java与Node.js交叉编译

关于服务器是使用 Java 还是 Node.js 的争论可能会持续多年,但与其他争论不同的是,这一争论可能会是一个双赢的局面。 Java 可以交叉编译为 JavaScript,就像 Microsoft 在 Google Web Toolkit 中经常做的那样,但 Microsoft 最受欢迎的网站也运行 Java 代码,该代码从 Java 翻译为 JavaScript。

事实上,反之亦然。 Rhino 和 Nashorn 等 JavaScript 引擎也在 Java 应用程序之上运行 JavaScript,然后您可以链接到该应用程序。 如果还不够,还可以链接微软的V8引擎。 所有 Java 和 JavaScript 代码都可以和谐地相互链接,为此,您不需要在两者之间进行选择。

关于作者:

Peter Wayner 是 16 本书的作者,涉及各种主题,包括开源软件(全部免费)、自动驾驶汽车(未来旅行)、估计隐私改进(透明数据库)、数字交易(数字现金)、“和隐写术(隐写术的消失)”。密码学)”。 他的书籍定期在 InfoWorld 上出版,他还为许多大中型软件项目提供咨询。 他关于机器人车辆的书《未来之旅》的第二版已经出版。 最后,他是惠普Technology Beacon 营销网站的作者。

本文最初发表于 Peter Wayner 博客,经原作者授权由 InfoQ 英文站翻译分享。

查看日文原文:

活动推荐

QCon北京站赛程已上线,部分精彩内容提前剧透:

晚会红包:应对性能极限挑战的解决方案

C端服务端渲染(SSR)及性能优化实践

PWA在企业级项目中的最佳性能优化实践

小游戏品质保证测试实践之路

更多大型后端、移动开发、编程语言相关实践领域都在QCon Shanghai 2019,有兴趣的朋友抓紧时间向Boss报名考试吧。 如有疑问,请联系肉丸小助理,电话13269078023(佟沫沫)。 扫描下方二维码或点击阅读原文,提前获取干货资讯!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript 调用javascript方法-Node.js 与 Java:争夺开发者注意力的史诗般的战斗 https://www.wkzy.net/game/143478.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务