毕业设计外文文献—Node.js的比较分析(服务器端JavaScript).docx
《毕业设计外文文献—Node.js的比较分析(服务器端JavaScript).docx》由会员分享,可在线阅读,更多相关《毕业设计外文文献—Node.js的比较分析(服务器端JavaScript).docx(13页珍藏版)》请在冰点文库上搜索。
附录A外文翻译一原文局部
AComparativeAnalysisofNodeJs(Server-SideJavaScript)文章来源:
s:
//repository.stcloudstate.edu/cgi/viewcontent.cgi?
referer=s:
//google/&sredir=1&article=1004&context=csit__etdsChapter1:
Introduction
Node.js(Node)[1]isacrossplatformruntimeenvironmentoriginallydevelopedin2009byRyanDahlfordevelopingserver-sideapplications.Itcanberegardedasserver-sideJavaScript.Itwascreatedtoaddresstheissuesplatformscanhavewiththeperformanceinnetworkcommunicationtimededicatingexcessivetimeprocessingwebrequestsandresponses."Node.jsisaplatformbuiltonChrome'sJavaScriptruntimefbreasilybuildingfast,scalablenetworkapplications.Node.jsusesanevent-driven,non-blockingI/Omodelthatmakesitlightweightandefficient,perfectfordata-intensivereal-timeapplicationsthatrunacrossdistributeddevices[I]/5
Nodehasbecomepopularasitmakescreatinghighperformance,real-timewebapplicationseasy.NodeallowsJavaScripttobeusedendtoend,bothontheserverandontheclient.JavaScripthasoriginallyrunonlyinthewebbrowser,buttheconsiderabledemandhasbroughtittotheserver-side.JavaScripthasdevelopedverymuchandhasexceledtodominateserver-sidescripting.WeneedtoanalyzethesecurityissuesinNodeapplicationsbecauseofitsusewithJavaScript,whichhassecurityliabilities.Nodeisevent-basedratherthanthread-based.Nodeusesaneventloopwithinasinglethreadinsteadofmultiplethreads,andisabletoscaletomillionsofconcurrentconnections.InNode,asinglethreadcanaccomplishahighconcurrency.
EveryI/OoperationinNodeiscarriedoutinanasynchronousfashion,meaningthattheservercancontinuetoprocessincomingrequestswhiletheI/Ooperationistakingplace[2].BecauseNodeisalsoasynchronous,AJAX(SeeChapter3)couldbemistakenlyconsideredequivalenttoNode,thoughtheyaresignificantlydifferent.
ObjectivesofourStudy
JavaScriptwascreatedshortlyaftertheWorldWideWeb(WWW)cameintoexistence.JavaScripthasplayedanintegralroleinaddinginteractiontotheuserinterfaceofwebapplicationsandwebsitesuntiltherecentreleaseofHTML5(HyperTextMarkupLanguage)andmodernJavaScriptframeworks.JavaScriptisalsoanintegralpartofAJAXwhichwasintroducedinlate1990'swiththeadventofWeb2.0toaddreal-timelikeinteractivityinthewebpages.Despiteallofthisprogress,JavaScripthasbeenconsideredasthescriptinglanguageforclientsideprogramming(thatrunsonlyfromthebrowser).However,thisapproachhaschangedwiththedevelopmentofserver-sideJavaScript(amongwhichNodeisconsideredprominent).Nodehasnotjuststrengthenedserver-sideJavaScript,butalsohasbeencompetitivewithotherpopularsrc=u:
//code,jquery.com/jquery-1.6.0.js”>。
然后,通过全局jQuery对象引用该模块。
这个过程污染全局命名空间并可能导致潜在的命名冲突[8]。
Node没有定义一些全局变量,而是引入了模块化系统(参见第1章)。
可以定义自己的模块,也可以使用核心模块或第三方模块。
Node附带了许多核心模块,如,net和fs。
这些模块是用于构建现代应用程序的基本工具包。
节点中的模块化成为可能因为这三个全局变量:
require,module和exports[8]
全球对象[8]浏览器JavaScript中有一个名为window的全局对象。
变量可以在window对象中定义,使其全局可用于应用程序代码的所有局部。
Node实现了具有明确别离的全局变量。
在Node中,这两个全局对象用于这个目的:
global:
与JavaScript中的窗口对象类似,任何属性都可以附加到全局使变量可以从应用程序代码中的任何位置访问。
进程:
在Node中有一个为所有相关内容分配的进程对象到全球执行的背景。
在JavaScript中,有一个窗口对象。
在Node中,任何时候只有一个进程给定时间。
例如,在JavaScript中,窗口名称是window,name,而在Node中,窗口名称是进程的名称是process.titleo缓冲JavaScript的另一个缺点是它支持处理二进制数据[8]。
操纵在JavaScript语言中,二进制数据的支持很少,即使它经常是必需的。
Node的Buffer类通过提供API来轻松操作二进制文件来解决这个缺陷
数据[14]。
Buffer是Node添加到四种原始数据类型(布尔值,字符串,数字和RegExp)和前端的无所不包的对象(数组和函数也是对象)JavaScript的。
它使用极其高效的数据存储[9]。
Buffer是一个表示固定内存分配的全局对象,其行为类似于数组八位字节,有效地让二进制数据在JavaScript中表示。
大多数NodeAPI都是如此执行数据I/0获取并将数据导出为缓冲区[8]。
第3章:
AJAX与Node,js节点经常与另一种技术AJAX混淆,但两者都是完全混淆的不同,服务于不同的目的。
AJAX和Node之间唯一的相似之处在于它们都运行在JavaScript上。
而Node主要用于服务器端操作以开发完整的服务器端应用程序,AJAX用于动态的客户端操作更新页面内容而不刷新它。
通过讨论可以更清楚地说明这一点什么是AJAX,为什么使用它,它的局限性以及Node如何证明优越性实现AJAX的那些限制。
AJAX
AJAX[18]是“异步JavaScript和XML”的缩写,是一组创立高度互动的网站和Web应用程序的技术[18]oAJAX很广泛用于指使用JavaScript从客户端与服务器通信的所有方法。
虽然,AJAX主要用于异步通信,但主要涉及XML数据传输,它可以是同步的,可以使用其他数据格式,如JS0N[16]oAJAX改变了用户在网络上的互动方式。
应用程序不再需要刷新整个页面以响应每个用户输入。
使用AJAX,应用程序可以调用服务器上的特定过程并仅更新网页的特定局部。
之前AJAX,网页上的交互性相当笨拙和昂贵。
因为,对于任何用户交互发生,需要在服务器上生成页面的更新版本,发送回浏览器并呈现。
即使所需的更新是微小的,结果也是如此总是一个全新的页面刷新。
这种模式浪费了带宽和资源。
AJAX通过在粒度级别修改过程简化了这种方法[17]o在AJAX中,JavaScript代码使用浏览器中内置的特殊对象:
XMLRequest对象用于翻开与服务器的连接并从中下载数据服务器[18]。
AJAX是用于向其发送数据和从中检索数据的机制服务器与AJAX。
制作AJAX请求和获取的所有步骤回复,列如下[16]:
1.使用。
创立XMLRequest对象XMLRequest()构造函数。
2.该对象用于发出请求。
为此,使用。
初始化对象open()方法,它接受三个参数:
RequestType(String:
POST,GET或HEAD),URL(String)和Asynchronous(布尔)。
3.xml对象的readyState属性保存响应的当前状态。
有五种可能的状态(0-4):
0表示未初始化,1表示加载,2表示加载,3表示交互,4表示完成。
4.将响应发送回客户端。
FigureClassic与AJAXWeb应用程序模型[32]
在图14中,我们说明了AJAX调用所需的所有步骤。
在这个例子中,使用AJAX,客户端使用文本更新文本中带有城市天气预报的文本从windowsonload事件[18]发起的文本文件中读取。
PHP
//processjson.php从data,json文件中读取内容并返回AJAX调用的例如AJAX使应用程序能够更新页面,仅响应页面上的用户操作。
它无法解决来自服务器的更新问题。
它没有提供推动的方式从服务器到浏览器的信息[17]。
使用AJAX,客户端总是必须查询服务器不断获取可用于应用程序的任何新信息或数据。
该服务器无法在未事先询问的情况下将信息推送到客户端。
结果是应用程序用户除非从服务器请求数据,否那么不会看到数据。
反过来,数据应用程序获取的内容将过时,即数据不是实时的。
这是哪里AJAX似乎不如Node提供的。
虽然,有一些技术使用AJAX如AJAX轮询和AJAX长轮询,使应用程序实时模拟。
这些方法有一些警告。
AJAX投票[32]
在AJAX轮询中,请求以定期的间隔从客户端发送到服务器是时候检查可用的任何新更新了。
如果有任何新的更新可用服务器,他们被送回。
这种方法的缺点是仍然存在延迟和不会复制实时通讯。
此外,还会有很多请求和回复,并且从客户端和服务器即使没有更新。
AJAX投票[32]
AJAX长轮询[32],另一种方法是AJAX长轮询,这只是AJAX轮询的一个小变化。
与常规轮询一样,当服务器接收请求时,它会立即返回新数据(如果是)。
可用。
但是,如果没有要返回的新数据,那么服务器会保持连接翻开,并且一旦可用,就返回数据。
一旦客户端收到数据,客户端立即再次向服务器发送另一个请求。
如图16所/Jno
AJAX长轮询[32]
使用Socket.io进行实时应用程序开发[32]除了AJAX轮询和AJAX长轮询之外,还有更多的技术来建立客户端和服务器之间的实时通信,或者至少像SSE一样(服务器发送事件)和Web套接字。
但没有任何事情可以完成双向工作客户端和服务器之间的通信实时像Socket,io那样。
SSE允许服务器将数据推送到客户端,但客户端无法将数据发送回服务器。
Web套接字允许在客户端和服务器之间双向同时进行双工通信,但它是一个完全新的协议。
Socket,io是一个用于实时Web应用程序的库。
它是一个内置Node的模块,它可以安装在Node应用程序中:
npminstallsocket,io
Socket,io是事件驱动的,具有服务器端和客户端组件类似的APR基本上,Socket,io由两局部组成:
安装在节点的服务器上或附加到节点的服务器的服务器。
允许与服务器交互的客户端库。
客户端和服务器局部基本上都做同样的事情:
允许发送(或发布事件并提供定义事件处理程序的方法。
为了设置Socket,i。
服务器组件,应遵循以下步骤:
创立Socket,io服务器并将其附加到现有服务器。
定义服务器在连接时将执行的操作。
在该连接处理程序中:
。
定义服务器将处理其他自定义事件的内容。
。
发送消息。
同样,为了在客户端上设置Socket,io,可以遵循以下步骤:
引入客户端库。
创立套接字对象(连接的接口)。
使用该套接字对象:
o发送消息。
。
定义在特定事件上触发的回调。
要了解Socket,io的实际用法,请考虑图17中的以下脚本实现了与AJAX相同的天气更新场景。
服务器端Node,js脚本如图17所示。
功能很重要语句在评论局部中描述。
26,Socket,io服务器端脚本例如在该例如中,用于数据交换的data,json文件显示为:
{“city”:
"Minneapolis”,"max_temp":
"42","min_temp":
"10"}27
第4章:
为什么选择Node,js?
Node一直深受开发人员欢迎,其成功吸引了众多高科技人士采用Node取代现有技术的公司。
有许多Node受欢迎的原因以及为什么应该使用Node进行应用程序开发。
高性能Web服务器[5]随着Web2.0的出现和不同设备中的Internet连接:
cell手机,平板电脑,台式机和笔记本电脑;适用范围已大大扩大。
对齐需要支持更多用户并提供实时体验。
应用已成为主要挑战。
安装新硬件时增加了功率。
在应用程序中不断增加对速度和更快连接的需求,但事实并非如此最优的解决方案,因为它更昂贵。
Node试图通过引入来解决这个问题。
架构称为Web服务器的事件驱动编程。
节点效率更高。
内存比传统服务器,并尽可能保持提供非常快的响应时间,许多并发用户。
这是因为Node在单个线程中运行,并且只要Node必须运行,做一些缓慢的事情,比方等待确认,它只是继续服务另一个请求。
传统方法可以通过多线程来实现这一点,这需要更多的存储器。
同时,传统方法很复杂并且涉及上下文切换。
节点是在这方面优选的是,提供更廉价,可扩展和高性能的应用环境。
JavaScript的受欢迎程度[19]从WWW开展的早期开始,JavaScript一直存在于浏览器中。
甚至当AJAX出现时,JavaScript是至关重要的。
这导致了JavaScript的普及尽管有一些批评,但在开发商中间。
无论哪种服务器端脚本语言使用过,JavaScript一直是客户端脚本的选择。
熟悉JavaScript和Node加入JavaScript,具有在服务器端和许多其他方面编写代码的功能,功能开发人员采用Nodeo通过利用JavaScript的最正确功能。
语言和培育一个充满活力的社区,Node已成为一个受欢迎的平台和框架,持续采用增长。
一种语言多功能[19]。
Node允许在服务器端和客户端运行JavaScript代码。
节点有将JavaScript提升到应用程序开发的新高度。
在Node中开发的任何系统将从本地或客户端平台上的任何地方运行,或从高端节点运行。
服务器在别处托管此外,还有数千个免费的Node模块可供使用。
可以使用Node的内置Web服务器在本地开发应用程序。
所以,不像其他人编程语言,需要单独的Web服务器才能托管甚至是托管语言。
经过测试,Node拥有它所需的一切-Web服务器,客户端脚本和服务器端。
脚本。
简单的开发环境[19]通常,为新工程建立开发环境对开发人员来说很麻烦。
这需要时间和精力,第一步涉及到。
开发环境正确,确保安装所有软件包,必需的版本,然后将代码放入存储库进行测试。
传统的很屡次,环境要求开发人员回顾并检查是否遗漏了某些内容。
节点简化了这一过程,提高了开发人员的工作效率。
在Node环境中,开发人员只需下载Node,从存储库中提取代码,然后从那里开始。
节点安装程序适用于所有主要操作系统:
Mac,Linux,Windows和SunOS。
来源代码也可以从头开始下载和构建。
所以,设置节点开发环境相对简单得多(见附录)。
良好声誉[19]Node在科技行业赢得了良好的声誉。
技术方面的许多大玩家行业正在使用Node。
节点在许多备受瞩目的技术堆栈中发挥着关键作用依赖其独特优势的公司。
Node为MicrosoftAzure用户提供了第一个端到端JavaScript体验,用于开发全新的实时应用程序。
Node的I/。
事件模型使eBay免于担忧锁定和并发问题。
常见于多线程异步I/0.在服务器端,整个移动软件Linkedln的堆栈完全是在Node[30]中构建的。
PayPal在从现有工程的Java迁移到Node后,看起来很重要,改进Java。
使用Node,重写的应用程序在一半的时间内以较少的时间交付开发人员,使用较少的代码行,但能够处理两倍的请求,延迟减少三分之一。
因此,他们看到他们的开发和产品性能提高,切换后显着[19]。
第5章:
Node,js安全性
编程领域对JavaScript的需求激增,其范围已扩大客户端到服务器端。
因此,SSJS(服务器端JavaScript)功能几乎可用无处不在,无论是在数据库服务器(如MongoDB),文件服务器和Web服务器(如Node)中。
JavaScript向SSJS的这一举动带来了许多好处,但也捆绑了一些安全方面的缺点。
客户端脚本注入,已存在很长时间了被利用来在服务器上执行。
服务器端脚本注入同样容易意外地引入服务器端应用程序代码,因为它们用于客户端代码。
相比之下,SSJS注射的效果要严重得多。
其中一个漏洞就是跨站脚本。
由于Node基于JavaScript,因此也容易受到跨站点的攻击
XSS是一种攻击,允许攻击者在Web应用程序中注入恶意脚本。
XSS漏洞是由Web应用程序中的故障导致的,无法正确验证用户输入。
通过颠覆客户端脚本语言,攻击者可以完全控制受害者。
server-sidescriptinglanguageswithrespecttoperformanceandscalability.Inthispaper,wewilldescribetheadvantageousfeaturesofNode.TheunderlyingfeaturesofNode:
single-threaded,event-drivenI/O,andasynchronousprogrammingarediscussedwithsufficientexamplestogivebetterinsightintotheworkingarchitectureofNodethatledtoNode'ssuccess.Inthispaper,wealsodistinguishNodefromJavaScript,whichisthebackboneontopofwhichNodehasbeendeveloped.ThesameistrueofAJAX,whichisoftentimeconfusedwithNode.WeperformananalysisofNode'sperformancewithreal-timedatabyimplementingtwowellknownapplications(Fibonaccinumbercalculationandreadinglargetextfile).Forfurtherdevelopmentandenhancement,wealsohighlighttheexistinglimitationsanddeficienciesofNode.
SimpleServerwithNode.js
OneofthecommonusesofNodeistobuildservers.Nodecanbeusedtocreatedifferenttypesofservers[7].Asimple(HyperTextTransferProtocol)webserverthatrespondsuHelloNode!
”toeveryrequestitreceivescanbecreatedwithveryfewlinesofcode.Typethefollowingcodeinthetexteditor,saveitashello_server.jsandexecuteitbytypingnodehello_server.jsfromthecommandprompt.Then,visitthisURL:
:
//localhost:
8000whichshouldprintthe"HelloNode!
”messageinthebrowser.
DescriptionofFigure1isasfollows[6]:
0.The'usestrict*stringisadirectivethatenables