为什么我的Java属于Node.js?

日期:2019-03-14 11:40点击数:

主题:为什么我的Java数组属于Node.js
????????????? Java作为编程语言[从CSDN编者注]的头,它的功能性和适用性并不意味着一定是说,它已经超过了总这篇文章的所有主要作者的名单是各种意见的我有。从他10年的Java实践经验开始,他立即开始采用Node.js和Java。为什么会这样
以下是翻译。
在我的Sun微系统已经工作了10年作为一个团队的Java SE的,如果你要继续实施的抽象接口,我觉得从血液传递的Java字节码的组织。我会在Java SE团队在2011年成员的前研究平台的Node.js作为这样的呼吸新鲜空气后 - 我是在2009年太阳月份解雇之后(就在甲骨文收购之前),请开始学习Node.js,并对它深感着迷。
它是如何让我着迷的自2010年以来,我写了很多关于编程Node.js的东西。具体来说,我写了第四版“Node.js的Web开发”。可以说我花了很多时间来解释Node.js. Node.js和Java语言的开发。
在Sun Microsystems工作过,所有我认为可以用Java编写的,我在JavaOne的交谈,共同开发了java.awt.Robot中的类,并举行了野马回归大赛(大赛在Java版本查找错误1.6)我做到了在JDK出现之前为Linux发行版发布的解决方案,然后在OpenJDK项目启动时扮演了一个小角色。
在这个过程中,我创建了java.net中连续第六年了博客,以谈在Java生态系统发生了什么事,认为写1到一周两篇文章。最常见的问题是反对唱Java声称。
我在完成Mustang回归竞赛后赢得了这个奖项,这是一个在Java 1.6版本中发现错误的竞赛。
然后,它是一个很好的字节码Java生存和呼吸本文的目的是解释以下忠实的Java字节码跟随者如何成为Node.js / Java布道者。
实际上,这并不意味着它与Java完全无关。
我在过去三年里编写了很多Java / Spring / Hibernate代码,但我热爱自己的工作,但我在太阳能电池行业工作。要检查功耗,但用Java编程已经是一朵黄花。
两年春节编程让我想到了一件事。掩蔽的复杂性不仅仅是简单,它只是想掩盖它。
本文中的要点:
?Java包含大量重复代码,可以改变程序员的意图。
春季和春季课程:覆盖复杂性只会使事情复杂化。
Java EE是一个“由委员会设计”的项目,它过于复杂,因为它涵盖了开发业务应用程序所需的一切。
Spring编程体验非常好,但是当在不可读子系统深出现,到目前为止没有看到异常信息,需要花费三天以上才能知道是什么问题有。
?如果框架允许程序员不编写代码,那么额外的开销是多少
IDE作为Eclipse非常强大,但它们都是Java复杂性的标志。
Node.js是一个复杂而复杂的人,他们对轻量级事件的架构结果进行了细化和改进,直到相同的Node.js揭示了真相。
Java社区似乎对消除迭代代码感到非常感激,这些代码允许程序员专注于做有意义的事情。
回调陷阱的解析async / await函数是如何删除重复代码的示例。
我很高兴使用Node.js编写程序。
Java语言缺少Java类型的严格检查,但它是一把双刃剑编程比以往更容易,需要更多的测试,以确认它是正确的。
与烦人的Maven不同,npm / yarn软件包管理器非常好用且非常容易使用。 与“Java很慢,Node.js的性能肯定不太好”的传说相反,Java和Node.js都提供了出色的性能。
?Node.js的表现是由于谷歌投资V8以加速Chrome浏览器。
由于浏览器之间的激烈竞争,Java变得越来越强大,对Node.js也很有用。
Java负担沉重,使用Node.js编程非常好
一些工具和对象是多年的精心成熟和完善设计者的部分结果,尝试不同的想法,消除不必要的性能,并最终用于特定用途获取个性化对象。它们非常简单,因此有吸引力的Java不是这样的系统。
Spring是一种流行的Web应用程序开发框架。特别是,Spring Boot的核心目标是预配置易于使用的Java EE堆栈。例如,可以命名APP Repository类并将其集成到查询方法的基础中。您不需要将代码编写为“findUserByFirstName”,只需调用该方法,其余所有内容都将被处理。
- 这个想法非常好,它会一直有效。 如果发生Hibernate PersistentObjectException,则表明“一个独立的实体已被持久化”。换句话说,访问JSON点以访问身份的值,这种意义上的层通常需要数天才能理解。Hibernate太简单了,你抛出这个不可读的异常,因为你想控制ID的值。一个小错误,然后应用程序崩溃,除了惩罚你。
只要有多个屏幕和抽象方法一个接一个地填充,Spring需要做很多工作来实现代码的功能。跟踪长堆栈不一定是坏事,但它显示出症状。
由于程序员不需要编写代码,所以在调用“findUserByFirstName”时如何执行框架解析方法的名称,猜测程序员的意图,构建类似于抽象语法树的东西,并生成SQL。这是程序员编写代码的一切。
如果你经历多次折磨并且你失去了学习你不需要学习的东西的日子,你可能会对我产生同样的困惑:掩盖复杂性并不会产生简单性,只是让它变得更复杂。
这是使用Node.js的关键。
“兼容性很重要”是一个很好的口号,这意味着Java平台的核心价值体现在与以前版本的完全兼容性上。兼容性级别很痛苦,可用于避免不再使用的旧方法。
Node.js正好相反
春和Java EE太复杂,Node.js的是完全冷静的第一个,就是瑞恩·达尔已经被用于开发节点平台的核心设计的美感。我花了很多时间使用Node.js来完善和改进一系列核心思想。异步调用和异步执行期间的智能库最初的目的是通过发送回调函数的事件来实现高性能事件处理。
还有Java语言本身,但Java程序员似乎喜欢从样板中删除代码,因此程序员可以专注于有用的代码。 另一个例子来比较Java和Java,但该事件处理程序的实现,在Java中,事件处理程序,就必须创建实际的抽象接口类,这将需要大量的长码,码它让自己感到困惑。程序员的意图隐藏在迭代代码堆栈的后面。谁能清楚看到它
在Java中,只需要使用匿名函数是一个闭包,它不是必须找到正确的抽象接口,因为只有有需要没有必要的代码,任何多余的写,还有另外一个教训。对于程序员来说,很难理解代码。
这是使用Node.js的最大优势,但您仍然需要解决问题。这是一个回调陷阱。
解决方案可能隐藏在问题中。
Java中的异步编程总是有两个问题一个是Node.js的所谓“回调陷阱”。嵌套水平高,代码是复杂的,因为这使得它很难涉及到处理错误和处理结果,有可能在Java语言程序员不能正确表达的异步执行问题的问题。
虽然一些库使用Promise来简化异步执行,但这是通过屏蔽复杂性来增加复杂性的另一个例子。
例如,
Constasync = require('async');
Constfs = require('fs');
Constcat = function(filez,fini){
async.eachSeries(filez,function(filenm,next){
fs.readFile(filenm,'utf8',function(error,data){
(错误)对于returnnext(错误)
Process.stdout.write(data,'utf 8',function(err){
在下一个(错误)(错误)的情况下。
Elsenext();
;));
;));
}
功能(错误){
(错)对于fini(错误)
Elsfini();
;));
}。
Cat(process.argv.slice(2),function(err){
是(错误)console.error(err.stack);
;));
此代码实现了Unix cat命令异步库有利于简化异步执行序列,但使用大量迭代代码来混淆程序员的意图。
我们真的写想做的是循环,不能写成循环,不是一个自然的循环结构此外,错误处理和结果的处理以最自然的地方都没有见过,它被写入节点。在js支持ES 2015/2016之前,这是人们可以做到的最佳方式。
等效于Node.js 10.x如下。
Constfs = require('fs')保证
Asyncfunctioncat(filenmz){
(Varfilenm offilenmz){
Letdata = awaitfs.readFile(filenm,'utf 8');
awaitnewPromise((resolve,reject)=&gt{
Process.stdout.write(data,'utf 8',(err)=>
(错)拒绝(错误)
Elselresolve();
;));
;));
}
}
cat(process.argv.slice(2))catch(err =>{
Console.error(err.stack);
;));
这个代码是为了在较早的异步/ AWAIT函数重写的例子,但仍然是相同的异步结构,当然也是位置的误差,并使用结果处理的书面正常环结构。易于理解,易于编写,易于理解程序员的意图。 我唯一遗憾的是process.stdout.write不提供Promise接口。因此,异步函数不能整齐地表达,你只能包装Pledge层。
回拨陷阱,而不是在这样的方式掩盖了复杂性,而在同一时间回电话的问题,通过改变语言和范式陷阱解决了,多片代码的问题也将得到解决而解决。异步函数使代码更美观。
最初这是Node.js的缺点,但这个奇妙的解决方案将其缺点转化为Node.js和Java的优点。
自定义类型和界面
我忠于Java的一个原因是严格的类型检查使Java对编写大型应用程序很有用。当时的趋势是编写一个宏系统(没有微服务,Docker等)。Java有严格的类型检查。由于Java编译器无法编译错误的代码,因此有助于避免各种错误。 相反,Java类型非常松散理论也是显而易见的:程序员无法确定他们收到的对象类型以及他们如何知道该怎么做呢
强大的Java描述的缺点是重复代码太多,否则你必须努力确保一切都是一样的。迭代代码,用于检测错误并在之前纠正错误。
因为这个问题很严重,只有这样,才能保持足够的正常的Java程序员不是你需要使用下拉菜单使用大尺度的简单编辑器,使用对象的复杂IDE它是选择可能的字段。描述方法的参数,创建类,帮助重构,并解释Eclipse,NetBeans和IntelliJ可以提供的所有内容。
而且......请不要强迫我说Maven。
在Java中,您不需要定义许多类型,并且通常不需要使用类型转换,因此代码更清晰,更易于阅读,但可能会出现编码错误。
目前,根据您的观点,Java是好还是坏,但我认为在十年前添加某些功能会增加确定性。
它使用一个易于测试的小模块来对抗错误。
Node.js建议程序员将程序划分为更小的单元或模块。这看起来很简单,但它部分地解决了刚刚提到的问题。
模块如下。
自包含类型:顾名思义,该模块将相关代码组合到一个单元中。 强大的限制:模块中的代码不会受到来自其他地方的代码的影响。 ?显式导出:默认情况下,不导出模块中的代码和数据,其他用户仅使用选定的功能和代码。 ?显式导入:您需要定义哪个模块依赖于模块。 隔离的可能性:将模块发布到npm代码存储库或其他私有存储库以便在其他应用程序中使用很容易。 易于理解:由于需要读取少量代码,因此可以轻松理解代码的用途。 易于测试:如果正确安装小模块,单元测试将更容易。 结合所有这些功能使得Node.js模块的测试更容易并具有明确的范围人们对JavaScripot的恐惧主要集中在缺乏严格的类型检查上因此,代码往往非常紧张。对于特别设计有明确限制的小型模块,受影响的区域通常局限于模块内部。模块限制
弱类型问题的另一个解决方案是增加测试。
编写简单的Java代码将节省您的时间,您将需要花一些时间添加测试测试用例应该捕获编译器应该捕获的错误。
如果要在Java中检查静态类型,可以尝试Type Type从不使用Type,但是听得非常好,添加一些方便的函数,如类型检查,兼容性您可以直接编译成一个Java。
因此,此时,Node.js和Java取得了胜利。
包管理
Maven认为这很糟糕,我不知道该写什么,所以有些人喜欢Maven,有些人不喜欢Maven。两者之间没有中点。
Java生态系统的一个问题是没有统一的包管理系统Maven包很好,但理论上它应该与Gradle一起使用。它远离Node.js的包管理系统。
Node.js世界中有两个非常好的包管理系统,它们可以很好地工作。最初只有npm和npm代码库。 NPM,以显示新的版本描述了软件包的依赖非常好的形式,但依赖严格的(准确的版本1.2.3),逐步更加灵活的条件,以“*”用你也可以增加它。虽然.js已经在npm代码库中发布了数十万个包,但在npm代码库之外使用这些包也同样简单。 最好的部分是,NPM的基础代码不仅Node.js的,前端工程师是,您还可以使用,直到这是使用软件包管理工具,如鲍尔。用户应用程序库是在NPM包的形式,许多前端工具链如Vue.js CLI和的WebPack的写入Node.js的
另一个包管理器Node.js的是,从下载NPM代码库的包,您可以使用相同的配置文件和故宫。
无论您使用NPM或纱线,NPM代码库是为了取笑非常容易使用Node.js的一个重要组成部分
创建java.awt.Robot中后,我有想出了由完全曲线公爵吉祥物这个形象官,RoboDuke是直的,肘关节齿轮除外。
性能
Java和Java都受到了非常缓慢的批评。
后两者已经由编译器变换为源代码,将通过虚拟机的虚拟机中执行通常再次编译的本机代码的字节代码,然后使用一些优化技术。
有一个非常需要Java和Java的性能,Java和Node.js的需要快速的服务器端代码,Java的浏览器请求从客户端应用程序有更好的表现。
太阳/ Oracle的JDK是使用热字节机(热字节机),这是因为它采用多字节的汇编策略,以检测频繁执行的代码,代码片段执行次数将应用更多优化。HotSopt可以非常快速地生成代码。
在Java中,谁可以期望在浏览器中运行Java来实现复杂的应用程序我可以在包含Java的浏览器中实现Office文档包吗但今天,这一切都已完成。这篇文章已经写在谷歌文档,它的表现并不差,在浏览器中运行的Java性能得到了显著逐年提高。
由于这种增长趋势,Node.js使用Chrome V8引擎,它变得越来越好。
由于机器学习领域包含了很多数学计算,数据科学家经常使用R,或Python,需要快速数字计算的领域包括机器学习。在数值计算,但人们已经在努力开发一个标准库,以便能够运行Java数值计算。
Java也可以使用Tensorflow新图书馆TensorFlow.js,API是类似于一个Python TensorFlow,到训练的模型这样的任务,通过分析动态视频识别的培训对象您可以在浏览器中完全导入和运行。
此前,克里斯·贝利的IBM,已经呈现Node.js的问题的性能和可扩展性,当呈现多克/ Kubernetes问题的实施从一系列性能评估开始,我展示了Node.js比Spring Boot好得多。输入和输出性能,应用程序启动时间和内存太空此外,V8发动机的改进,Node.js的每个版本的性能大大提高。
Bailey还说计算类代码不应该在Node.js中执行。由于Node.js是单线程模型,因此长时间运行的计算会阻止事件的执行。在我的“Node.js Web开发”一书中,我谈到了这个问题,并介绍了三种方法。 ?算法重建:找到算法的慢速部分并重新配置以获得更快的速度。 Node.js的,这样就可以恢复到执行的频繁线程,细碎使用事件分配机制的计算代码。 ?将计算传递给后端服务器。 如果Java的进度不能满足应用的要求,也有对Node.js的本地代码直接集成两种方式。Node.js的的工具链,包含节点-GYP来处理对本机代码模块链接的工作。WebAssembly是WebAssembly你可以编译其他语言,以高速的Java的一个子集,它是在Java引擎可执行的可执行代码便携的机身。
增强的互联网应用(RIA)
10年前,软件业,谈到了需要运行的高速Java引擎富互联网应用程序的桌面应用程序到一些有价值的东西。
事实上,这是一开始20年前,Sun和网景,Java语言,它已同意以运行Netscape浏览器的Java小程序已经成为脚本语言编写的Java小程序的一部分。运行服务器端了Java Servlet,但实现前面相同的语言和回运行在客户端的Java小程序,对于一些原因,我们没有这个目标的实现。
10年前,Java已经成为一个强大到足以实现复杂的应用程序,那么RIA出现的词,RIA是说杀了Java客户端应用程序的平台。
通过服务器Node.js,我们终于可以在今年实现我们的目标,但这两种语言都是Java。 请举个例子。Google Docs(本文中的协作工具)与传统的办公套件类似,但它完全在浏览器中运行。 反应代表了HTML / CSS,棱角分明,功能强大的框架,如Vue.js,可以大大简化的基于浏览器的应用程序的开发。 电子是Node.js的Chromium浏览器的组合,支持桌面应用程序的跨平台开发,已开发Visual Studio代码,原子,GitKraken,如邮差,一些在电子普遍适用的。非常好 由于电子/ NW.js使用的浏览器引擎,您可以使用框架,如反应,和/角/ VUE在桌面应用程序(例如:HTTPS://blog.sourcerer.io/creating-a-markdown-)。编辑 - 预览A - 在 - 电子 - 视图 - js - 32a084e7b8fe。 Java在桌面应用程序平台上失败并不是Java RIA,主要是因为Sun Microsystems忽略了客户端技术。几年前真正杀死applet的是Java和Java Web Start附加组件中的严重安全漏洞。它不使用Java applet或Webstart应用程序。
它也仍然可以使用其他的Java桌面应用程序,但NetBeans和Eclipse IDE之间的竞争仍然激烈,在这一领域的Java开发已经是穷途末路,基于Java的应用程序都很少看到。不包括一些开发人员工具
JavaFX是个例外。
JavaFX是Sun公司已经提出了为iPhone到10年前的一个解决方案,已规划以支持丰富的接口应用的手机Java平台上开发,Flash和iOS应用程序从市场突出是的。JavaFX仍然在使用,但并不像争论那么热。
而这个领域的所有狂热主义都是由于React,Vue.js和类似框架的出现。
所以,在这一点上,Java和Node.js取得了压倒性的胜利。
Java的环就像一个第一个Java ONE大会上,这些环含有一个芯片,已经在Java中得到全面落实JavaOne大会的主要应用里面解锁计算机的大厅。
Java Ring的说明
结论
Node.js的,红宝石,哈斯克尔,围棋,Java的锈,因为有许多其他语言,也有服务器端代码的开发有很多选择在今天,“P语言”(Perl中,PHP,Python)的和没有必要限制它。今天的开发者可以享受很多快乐。 像编程如何使用Node.js时,因为它不使用Node.js的这么多负载自由,为什么爪哇很难下降到Node.js的是明确的。写Java的合同,我当然接受它,因为我想赚钱。
不建议使用Node.js只是因为你喜欢Node.js.例如,以前的一些研究,我已经包含了XBRL文档,因为最好的XBRL库在Python实现的,你需要学习Python,以完成该项目。
因此,要诚实地了解实际需求,然后根据结果选择。
原文:HTTPS://blog.sourcerer.io/why-is-a-java-guy-so-excited-about-node-js-and-java-7cfc423efb44
作者:大卫·赫伦,技术价格,如软件工程师,Node.js的和清洁能源技术,“Node.js的Web开发”的作者。
译者:新月,出版社:郭伟

论文征集“
编辑负责人: