Node.js是构建现代Web应用程序的可行选项吗外文翻译资料

 2022-03-25 20:10:16

英语原文共 22 页,剩余内容已隐藏,支付完成后下载完整资料


Node.js是构建现代Web应用程序的可行选项吗?

Ioannis K.Chaniotis, Kyriakos-Ioannis D.Kyriakou, Nikolaos D.Tselikas

摘要 我们在社交网络时代研究端到端Web应用程序开发的含义。本文描述了一种适用于现代Web应用程序开发的分布式体系结构,以及与之相关的交互性组件。此外,我们还对流行的服务器端技术进行了一系列压力测试。我们发现PHP/Apache堆栈在解决日益增长的网络流量需求的时候效率低下,Nginx的输入/输出(I/O)操作速度比Apache快2.5倍以上,而Node.js则优于两者。虽然Node.js在I/O操作和资源利用方面非常出色,但是在使用其内置的HTTP服务器来提供静态文件上有所欠缺,而Nginx在这项任务中表现出色。因此,为了解决效率问题,可以将Nginx服务器置于前台并代理静态文件请求,从而允许Node.js进程仅处理动态内容。这样的配置可以在效率和可扩展性方面提供更好的基础架构,取代过时的PHP/Apache堆栈。此外,我们发现构建基于Web技术的跨平台应用程序既可行又高效,特别是在寻址固定和移动设备时,以及它们之间的碎片化。我们的研究得出结论:Node.js提供客户端-服务器开发集成,帮助web应用程序重用代码,并且是开发快速,可扩展网络应用程序的完美工具。

1介绍

世界网络的诞生得益于通过互联网进行的社交互动,1991年,TimBerners-Lee在Usenet上的alt超文本新闻组上发布了一个项目摘要,这是仍在广泛使用的最古老的计算机网络通信系统之一[1]。六年后,第一个可识别的社交网站SixDegrees.com上线[2]。在2013年第四季度财报中,目前最大的社交网络Facebook透露,它拥有超过12.3亿的月活跃用户和9.45亿移动月活跃用户[3]。社交网络和应用程序的病毒式增长可以通过社会发展和技术进步加以解释,它们为用户共同创建内容提供了新的应用程序类型。社交网络的传播效应可以归因于另一个因素,即iPhone的出现,最终引出了智能手机文化[4]。支持Web的设备已经变得非常普遍,移动设备引领潮流,但这给开发者带来了挑战[5]。这是在移动环境中同时运行长度(设备分化)和宽度(操作系统分化)的分化。具有不同处理,存储器,通信和显示能力的设备是设备分化的例子[6]。有不同的公司拥有自己的平台,运行不同的操作系统,并且需要每个开发环境的专业知识,这使得处理多个设备变得困难且成本高昂。因此,传统的原生方法并不总是一个理想的解决方案。移动电话是社交工具,通过使人际交流变得轻松。由于世界人口的3G覆盖率估计到2017年将达到85%,因此在网络上使用它们也是有意义的,在它们发展成为基本的网络客户端之后,[7]所有平台的共同之处在于,通过现代Web浏览器为他们提供的Web标准的遵守日益增加。如现代浏览器的改进和HTML5的标准化等技术成就,导致了先进的网络应用程序的创建,提供了以前仅适用于本地应用程序的功能。这种与网络的巨大互动现象带来了一些需要解决的问题。基础设施软件必须发展以满足服务需求。“云计算”是当前计算范式,建立在共同创建内容和服务的概念上[8],而实时客户端-服务器数据交换(即WebSocket协议)有希望的协议在两年前已于2011年12月标准化[9]。由于JavaScript是用于客户端编程的最常用和主要的Web技术之一,服务器端JavaScript(即2009年5月的Node.js)的诞生通过使用相同的语言端到端,提供了客户端-服务器编程集成的潜力。我们打算测试和评估纯粹的基于JavaScript的环境是否能够与跨设备Web应用程序开发提供巨大的协同作用。换句话说,在本文中,我们试图回答网络程序员的一个常见问题:“纯JavaScript是构建现代Web应用程序的可行选择吗?”在这一行中,我们比较并评估了Node.js的性能与最通过使用两个最广泛使用的开源Web服务器Apache和Nginx,部署了Web语言即PHP,占据了60%以上的市场份额[10,11]。我们将研究结果和结果结合起来,以便得出结论:JavaScript是否是构建现代Web应用程序的端到端系统的最佳方式,从基础架构层到用户体验,非常轻松高效,而不仅仅是短暂的趋势。

在Sect.2我们介绍趋势网络技术的相关趋势,以及当前的影响和相应的研究。在Sect.3,设计和实现原则将在服务器和客户端体系结构之后进行介绍。第四部分描述了实验环境和所遵循的方法,而Sect.5介绍结果并详细阐述研究结果。最后,在Sect.6我们总结了所进行的研究。

2目前的趋势和挑战

Web应用程序可以定义为“基于万维网联盟(W3C)的技术和标准的软件系统”。他们通过用户界面提供Web特定资源,如内容和服务,Web浏览器[12]HTML5是一种标记语言,用于构建和呈现万维网的内容和由W3C维护的互联网核心技术[13]。HTML5也被用作简化术语,用于解决其他相关Web标准和技术系列,如CSS3和JavaScript,它们代表完整的包或想法,即HTML5[14]。智能手机,平板电脑和相应的移动操作系统(OS)的发展推动了移动应用的蓬勃发展。移动应用程序是运行在移动设备上的应用程序,它们分别分为本地,混合或纯Web应用程序。本地应用程序是垂直开发的,可用于特定的操作系统。它们使用特定的编程语言进行编码,例如用于Android平台的Java,用于iOS的ObjectiveC等。它们提供最丰富和最引人注目的用户体验,因为它们针对运行设备的特定操作环境进行了优化,它们可以充分利用设备软件和硬件功能,并且能够脱机运行。原生移动应用程序开发的一个明显的主要缺点是成本,因为原生应用程序需要从头开始对每个本地平台重新编码。为了降低成本,可以采用混合方法。混合移动应用程序是Web技术与本地执行的结合。它们在本地容器中运行,并利用设备的浏览器引擎(而不是浏览器)来呈现HTML并在本地处理JavaScript。它们使用跨平台框架构建,如PhoneGap[15],Appcelerator[16],IBM提供的Worklight[17],Motorola提供的RhoMobile[18]等,仅举几例,它允许开发人员编写一个应用程序,就能使用框架来适应多平台。Web技术再次处于前台,因为通常需要HTML5和JavaScript来使用这些框架,而基于RubyonRails的RhoMobileSuite就是个例外。混合移动应用的主要缺点是每个平台都有不同的优点和缺点,而实际上,混合移动应用需要对每个平台做出调整[19]。纯移动Web应用程序是使用Web技术的软件,即JavaScript和HTML5,以提供交互,导航或定制功能。移动Web应用程序在移动设备的Web浏览器中运行。这意味着它们通过互联网即时交付,并且它们不是单独的程序,需要存储在移动设备上,因此它们呈现出最广泛覆盖范围的关键优势。移动web应用程序的主要缺点是缺乏用户体验和性能[19]。为了提高性能并提供类似于本地应用程序的用户体验,可以将Web应用程序开发为单页应用程序。单页应用程序可以在单个页面加载中加载所需的资源,也可以动态加载适当的资源,以响应用户操作。基于HTML5,客户端和服务器端的结构化JavaScript以及响应式设计技术,在任何时候都没有页面重新加载,因此用户体验与常见的网页浏览体验不同[20]。

几个相关的研究解决了现代Web应用程序的挑战。Lau-tamki检查了现代Web应用程序开发的问题以及客户端-服务器实时通信的可能性,得出结论认为诸如Node.js,WebSocket协议和WebRTC(Web实时通信)等新工具有助于实现实时网络[21]。Taivalsaari等人[22]将重点放在使用Web作为软件平台。他们得出结论:“向基于网络的应用过渡将标志着二进制终端用户软件的终结”。KaiShuang和冯凯比较了不同的服务器推送技术,并对延迟和不必要的连接成本进行了评估。他们得出结论认为WebSocket优于所有其他检查方法[23]。有几项工作评估了不同跨平台开发解决方案的优点和局限性,并得出了这样的结论:

图1 2013年10月Web服务器部署-Netcraft

基于Web的应用程序是可行的选择[23–26]。此外,几家公司如微软,LinkedIn,eBay和YAHOO!已经开始使用Node.js软件开发[27]。另外,Firebase是一家提供实时服务的公司,支持WebSocket协议并抽象出后端的思想[28]。最后,两个利用近实时效果的例子是Facebook的新闻播报[29]和Twitter[30]的HTTP轮询技术。

总结现代Web应用程序面临的当前挑战时,Web服务器体系结构的高并发性非常重要。实际上,部署最多的Web服务器是Apache,如图2所示。1而Web应用程序选择的服务器端语言是PHP[31]。据报道它们都有约40%的市场份额。但是,PHP从来不打算用来编写复杂的基于Web的应用程序[32]。另一方面,Apache不能随着CPU内核的数量线性扩展[33]。在我们的研究中,我们将使用带有Apache和Nginx的Node.js来强调并证明PHP/Apache的流行组合并不是解决未来流量高涨的最佳工具,而且在利用资源方面效率相当低[34]。

跨平台的移动应用程序开发是第二个挑战。根据国际数据公司(IDC)的数据,Android和iOS在2013年第一季度的智能手机操作系统出货量中所占比例达92.3%[35]。Android设备有很多不同的配置,而iOS设备则更加一致。这很容易从图2中看出来。图2和图3,分别显示了每个操作系统的应用程序编程接口(API)和屏幕大小分段。如图所示,Android平台拥有不同大小的屏幕[36]。在所有这些屏幕上运行良好的设计和编码布局非常具有挑战性,这不适用于保持相同物理屏幕尺寸的iOS设备,而增加它们的像素密度[36]。

图2 Android和iOS屏幕尺寸分割

图3 Android和iOSAPI碎片

硬件是选择操作系统版本时的一个限制因素,因为较旧的设备,尤其是低端的基于Android的设备,无法满足较新软件版本的要求[36]。由于移动设备不支持Java applet和flash,因此不能再将其视为跨平台解决方案。为跨平台移动应用程序开发留下的唯一可行的解决方案是HTML5和其他与之相关的现代网络技术,这也是我们在研究中会遵循的路线。

此外,实时网络需要实时通信。但是,HTTP并非设计用于支持实时,也就是说,服务器无法向客户端发送通知。随着JavaScript和AJAX(异步JavaScript和XML)的出现,轮询技术实现了近实时通信。取决于轮询间隔,在延迟和效率之间存在折衷[21]。实现实时通信的另一种方式是在AdobeFlash平台中实现的FlashXMLSocket[37]。虽然闪光灯倾向于安装在大多数桌面浏览器中,但Adobe已经获得了移动设备的支持。它会影响性能,并可能导致应用程序挂起长达3秒[38]。最近的研究通过使用IETF(互联网工程任务组)的WebSocket协议和WebRTC来克服实时通信问题,即使用简单的JavaScriptAPI和HTML5[40,41]。

最后一点,也是相当重要的一点是,当前的社会应用状况产生了巨大的挑战。社交应用程序一直是Web2.0的重要组成部分,导致社交网络应用程序的兴起[39]。过去几年来,社交网络可能是互联网上最流行的趋势。随着时间的推移,社会已经开始采用高度互动的平台,通过这些平台,个人和社区共享,共同创造,讨论和修改用户生成的内容[39]。我们认为,社交网络尽管在很多方面都很出色,但并不能满足人们在其他人的实际存在中的基本愿望。这就是位置和实时通信的原因。我们认为,用户之间的接近感知和真正的实时交互有助于弥合数字和物理社交互动。上述概念在解决社交应用程序开发时是紧密耦合的,应该一起彻底检查,因为它们可以在效率,代码可重用性以及用户感知的总体体验方面提供很大的协同作用。

3设计和实施

本节是作者最初报告的工作的延伸[40]。在会议期间,我们演示了一个完全用JavaScript构建的社交网络应用程序,称为Proximity。从一开始,我们的目标就是设计一个在整个开发周期内都可以扩展和维护的服务。另一个重要考虑因素是用户体验。应用程序的响应速度和效率必须满足本地应用程序的响应能力和效率,特别是在CPU,内存和电池等资源有限的移动客户端。会话管理,图像处理,消息传递,亲密感知以及音频和视频通信是被认为是现代社交网络应用中不可或缺的设计参数的特征,Proximity则将它们合并展示[40]。

3.1服务器架构

如前所述,Proximity是一个端到端的JavaScript应用程序。这是通过在架构的服务器端部分使用Node.js来实现的。在JavaScript中,函数是第一类对象,这意味着JavaScript函数只是一种特殊类型的对象,它可以完成常规对象可以执行的所有操作,例如,它们可以像其他函数一样作为参数传递给其他函数值。一个函数可能会引用自由变量超出其范围,并且当该函数被传递时,它会用它封装必要的执行上下文,因此会创建闭包。这些特性是使事件成为可能的基础,使Node.js遵循事件驱动的设计方法,其核心概念是异步的,事件驱动的I/O[42]。也就是说,处理程序(函数)被分配给事件(I/O操作)并等待执行。因此,所提出的系统选择了一个事件驱动的面向服务的体系结构。

为了评估使用Node.js实现大规模应用程序(如Proximity)是否可行,它的模型必须反映到应用程序体系结构中,以确保高可用性HTTP和WebSocket服务器放置在反向代理之后。他们的目的是将连接转换为事件并将它们转发给事件转换。事件切换是应用程序的核心。其唯一目的是通过遵循一组规则(

全文共17155字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[15319],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。