当前位置: 首页 > 后端技术 > Node.js

UnderstandingNode.js(译)

时间:2023-04-03 15:24:35 Node.js

前言总结:本文非常形象地介绍了Node,满足了想了解Node的读者的需求。作者是德国前端大师Node的最早贡献者之一。译者觉得作者的比喻很适合初学者理解Node,所以特此翻译。译者:原站的小蚂蚁效果很有意思(多次鼠标悬停会有惊喜),哈哈哈,你可以看看。原文地址:[Understandingnode.js]原作者:FelixGeisend?rferNode小应用:Node-sample译者:Damonare明白它是什么,不然被它迷惑了。如果你还在后者,这里是我对node的解释:它是一个命令行工具,你可以下载一个tarball文件,编译安装源文件;它允许您在终端中输入nodemy_app.js以运行Javascript程序;Node的JS代码由V8javascript引擎执行(这就是让Chrome如此之快的原因);Node提供JavascriptAPI,如访问网络或操作文件系统“但我也可以使用Ruby、Python、Php、Java等语言来做我想做的事”我听到你说的是对的。Node不是狡猾的独角兽,对此感到抱歉,它不会帮助您完成您应该做的事情。它只是一个工具,它不会取代您使用的某些工具,至少目前不会。“进入正题!!!”好吧,我会的,当你需要同时做几件事时,Node非常棒。您是否曾经写过一段代码并说“我认为您可以并行运行它!”?哈哈哈,在Node中,除了你的代码之外,所有的东西都是并行运行的。“啊?!”是的,没错,除您的代码外,所有代码都并行运行。要理解这一点,您可以将自己的代码视为国王,将Node视为他的仆从军队。这一天是这样开始的:一些仆人叫醒了国王,问他是否需要什么。国王给了仆人一张待办事项清单,然后回去睡觉了。然后仆人在任务单上分配任务,仆人开始工作。一名仆人完成任务后,便跑到王室外排队等候禀报。国王一次只能听取一个仆人的报告,有时国王会在仆人报告结束时交给他更多的任务。(看看你的代码是怎么写的)生活是美好的,因为国王的很多仆人同时执行多项任务,但是报告结果的时候是一个接一个来的,所以国王可以很专注。“那真是太好了,但你能结束这个愚蠢的比喻,用更怪异的方式告诉我吗?”好的,一个节点程序可能看起来像这样:varfs=require('fs'),sys=require('sys');//译者注:sysisdeprecated。请改用util。这里我们可以直接使用console.logfs.readFile('treasure-chamber-report.txt',function(report){//sys.puts("哦,看看我所有的钱:"+report);console.log("oh,看看我所有的钱:"+report)});fs.writeFile('letter-to-princess.txt','...',function(){//sys.puts("can'等不及收到她的回音!”);console.log(“等不及收到她的回音了!”)});你的代码(king)给节点(servant)两个任务读(readFile)和写(writeFile)文件,然后就去睡觉了。一旦节点完成某个任务,就会触发该任务对应的回调。但是一次只能触发一个回调,所有其他回调都必须排队等待该回调执行完毕。此外,无法保证回调触发的顺序。“所以我不必担心代码同时访问相同的数据结构?”你确实明白了,这就是JavaScript的单进程/事件循环设计的美妙之处。“很好,但我为什么要用它?”原因之一是效率。在Web应用程序中,响应时间主要用于执行数据库查询,而使用节点,您可以一次执行所有数据库查询。将响应时间减少到执行最慢的数据库查询所需的时间。另一个原因是Javascript。您可以使用Node让您的浏览器和后端共享代码。Javascript也逐渐成为一种真正的通用语言。不管你以前用过Python、Ruby、Java、PHP……等等,你都或多或少用过Javasctipt吧?最后一个原因是本地速度。V8不断突破界限,成为地球上最快的动态语言编译器之一,我想不出有任何其他语言能像Javascript一样快速发展。此外,node的I/O设备非常轻巧,可以让你尽可能地利用系统的I/O能力。“所以你是说我应该从现在开始用Node编写我所有的应用程序?”不,一旦你开始挥舞节点之锤,一切都开始看起来像钉子。但如果你现在的工作有deadline,你可以参考以下几点来决定是否使用node:低响应时间/高并发重要吗?Node非常擅长处理这两者;工程有多大?小项目没问题,大项目应该仔细评估(可用的库、修复一个或两个上游错误所需的资源等)“我可以访问Node中的DOM吗?”这是一个很好的问题!答案是否定的,DOM是浏览器的东西吗,还好node的JS引擎(V8)完全脱离了那些乱七八糟的东西。然而,有人正在将DOM实现为节点模块,这可能会带来令人兴奋的可能性,例如对客户端代码进行单元测试。(译者注:已经有人实现了这个模块,详见Node-dom)。“事件驱动编程真的很难吗?”这取决于你,如果你已经知道如何在浏览器中调用Ajax或调用事件,那么学习node对你来说将不是问题。同时,测试驱动开发可以真正帮助你从可维护的设计中学习节点。“我应该在哪里学习更多?”TimCaswell正在运行出色的HowToNode博客。在Twitter上关注nodejs。订阅邮件列表。(译者注:也可以结合Node.js6.9.5文档学习,另外译者写了一个node小应用node-sample,可以克隆查看。)但是太难找了来自真实事物的真实对应,另外,由于时间原因,本文有些不合适的地方或者当时还处于实验阶段的东西,被译者删除或更改。能力有限,水平一般,如有翻译不当之处,还望指正。感激的。