Metamarket的CTO Mike Driscoll最近发表了一篇略带煽动性的帖子,讨论了Web应用的架构。 他认为Node.js等框架预示着LAMP的终结。
三个月前,我们决定废弃仪表盘选用的框架:Python的Django,并用Node.js(服务器端的Javascript)重新构建了框架。 鉴于LAMP堆栈已经死亡,我们才做出了这个决定。
Mike认为Web有三个阶段:
- 1991-1999:HTML时代——这是个文档的时代。
- 2000-2009:LAMP时代——使用数据库的时代。
- 2010-??:Javascript时代。Javascript时代是事件流的时代。
现代的Web页面已经不再是页面了,它们都是事件驱动的应用,信息会通过这些应用流转。
他解释道:
LAMP架构已经死了,因为对于响应里的Mashup,很少有应用愿意把全部的有效负载转移到很小的事件上去; 他们只想用Javascript更新DOM的一个片段。 AJAX做到了这一点,但如果服务器端的LAMP模板有10%的HTML和90%的Javascript,这么做显然是不对的……
Mike认为,服务器的主要作用就是带着数据(JSON)把应用发送到客户端(Javascript),并让客户端从中构造UI。 服务器的次要作用则是监听处理事件的流,并有效地把响应推回客户端, 这些事件可能是一次新的编辑、一条消息、或是Ticker发生了变化。
一些人对此发表了评论:
Bruce Atherton赞成Mike的观点,但他认为事件并不会通过HTTP来流转:
Websockets和SPDY将会接管这方面的处理,因为和HTTP相比,它们更合适这个任务。
Chase Sechrist已经在很多地方使用了Node.js,即便如此,他仍然列举了一些对Node.js的担忧:
你还需要知道一些高级知识,比如竞态条件的调试方法、事件循环的工作原理,甚至在递归回调导致栈溢出时,调用堆栈的处理方式。 正因为如此,对那些写了二十年C的人、还有刚开始编程的初级工程师来说,控制流还是非常奇怪、令人费解的。
“Jorjun”指出,以现在的变化速度来看,即使Javascript这个新的架构是合理的,它也不会太持久:
两年之内会有一种更高效的方式对宝贵的IP进行编码。 需要注意的是,新的方式正在出现,Java对它们没有任何意义——这些方式在九十年代末还没有出现。 Javascript的愚蠢名副其实。 它有大括号、奇怪的Fudgery、极其恼人的Artefact,对我这样的老学究来说,Javascript看起来轻率、讨厌、太复杂而容易混淆。
NOLOH的联合创始人Asher Snyder认同帖子的前提条件:“Web应该、也正在转向事件。” 但并不相信Javascript能引领方向。 他认为“我们正在走向一个平台或统一语言的时代,因为只有平台或统一语言才能让快速开发真正处理好Web的疯狂”。
Subbu Allamaraju最近发布了Node.js和Play的一些性能对比数据,InfoQ和他简单讨论了一下:
就个人而言,我发现Node.js和Play等框架让Web开发人员觉得很兴奋,因为它们带来了一些新的思想。 在Web框架领域,特别是在Java端,这样的简单性已经很久违了。 尤其是Play,它在Netty之上,而不是传统的Servlet框架,是一个很不错的选择。
Web应用架构的演进确实很快。 由于Web应用变得越来越“厚重”,特别是在事件驱动的世界里,人们只能思考REST还剩下什么,看来我们要回到最初开始的地方了。 最近我们确实没怎么听说有关REST及其统一接口的消息,还有它怎样成功改变Web应用架构的相关内容。 你对Web应用架构的未来持什么观点呢? 你怎么看Javascript成为主流的编程语言?
查看英文原文:Will the Rise of Javascript Mean the End of LAMP?
中文来源:http://nodejs.iteye.com/blog/1604880
分享到:
相关推荐
"Lava Lamp 0.2.0 JavaScript 导航条" 是一款基于jQuery库的动态导航菜单插件,其设计灵感来源于20世纪60年代流行的熔岩灯,因此得名。这款插件旨在为网站增添一种独特且吸引人的用户交互体验,通过滑动效果使导航条...
掌握JavaScript意味着可以创建跨平台的应用程序,以及运用其在Web开发中的各种前端技术,如AJAX、JSON、DOM操作、事件驱动编程等。随着前端框架(如React、Vue、Angular)的兴起,JavaScript也在不断地推动Web技术...
JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的脚本语言,主要应用于网页和网络应用的客户端编程。这份“JavaScript中文手册”旨在为开发者提供详尽的JavaScript语言指南,帮助他们理解和掌握这一强大的...
《JavaScript语言精粹》作为一本深入浅出讲解JavaScript编程语言的经典之作,对于想要提升自己JavaScript技能的开发者来说,无疑是一份宝贵的资源。本书由Douglas Crockford所著,他不仅是JSON格式的创始人,也是...
JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在客户端脚本方面占据着核心地位。这份"JavaScript学习帮助文档"是专为初学者设计的,旨在帮助他们掌握JavaScript的基础知识和实际应用技巧。 首先,...
本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript编程要点;第2部分介绍JavaScript的发展和技术背景;第3部分深入探索JavaScript,介绍了语法...
描述中提到“内容丰富”,意味着这个压缩包可能包含了各种类型的JavaScript应用场景,包括但不限于DOM操作、事件处理、动画效果、表单验证、AJAX请求、JSON处理、函数与闭包、对象与原型链、异步编程、模块化、以及...
本资源包包含了多个关于JavaScript的重要参考资料,包括“JavaScript权威指南(英文版).chm”、“javascript5.5.chm”、“css2gb.chm”以及“JavaScript对象与数组参考大全 .chm”。 首先,我们来看“JavaScript权威...
在这个场景中,我们关注的是VS2015的安装过程中涉及到的证书问题以及两个特定的组件:JavaScript_ProjectSystem.msi和JavaScript_LanguageService.msi。 首先,关于“VS2015安装证书”,这通常是指安装过程中需要...
1. **基础语法**:JavaScript是一种基于原型的动态类型语言,这意味着变量在声明时不需要指定数据类型,而是根据赋值自动确定。了解变量、常量、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组和...
而将函数视为一等公民,意味着函数可以作为变量赋值、作为参数传递以及作为返回值,这是JavaScript实现高阶函数的基础。 书中会详细介绍JavaScript的数据类型,包括基本类型(如Undefined、Null、Boolean、Number和...
在JavaScript中,函数是一等公民,这意味着它们可以作为其他函数的参数,也可以被赋值给变量,甚至可以作为其他函数的返回值。手册可能会涵盖函数表达式、函数声明以及箭头函数的使用。 JavaScript还支持原型继承和...
JavaScript Obfuscator是一种工具,主要用于保护JavaScript代码,通过将源代码转换为难以理解的形式,以防止未经授权的用户查看、修改或盗窃代码。在Web开发中,尤其对于那些包含商业逻辑或者敏感信息的JavaScript...
- **JavaScript**:作为一种广泛使用的编程语言,JavaScript能够实现在客户端执行复杂的逻辑操作,如动态更新网页内容、验证表单输入等,从而提高网站的互动性和用户体验。 3. **创建数据驱动的网站**:指明了如何...
JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在客户端脚本方面扮演着核心角色。这份"javascript试题(附答案)"是为初学者设计的,旨在帮助他们更好地理解和掌握JavaScript的基础知识。 一、变量与数据...
现代JavaScript教程是一个全面的学习资源,旨在帮助开发者深入理解JavaScript这一重要的编程语言。JavaScript,作为Web开发的核心技术之一,被广泛用于构建交互式的网页和应用程序。本教程覆盖了从基础概念到高级...
最后,随着Node.js的兴起,JavaScript已经不再局限于浏览器,而是可以用于服务器端开发,实现了全栈开发的可能性。学习Node.js的模块系统、事件驱动的非阻塞I/O模型,以及如何使用npm(Node Package Manager)管理...
在JavaScript中,函数是一等公民,这意味着函数可以被赋值给变量、作为参数传递给其他函数以及作为其他函数的返回值。函数式编程强调纯函数(pure functions)和不可变性(immutability),纯函数指的是相同的输入...
### JavaScript教程概览 #### 关于本教程 JavaScript是一种轻量级、解释型的编程语言,主要用于创建网络中心的应用程序。它与Java互补并可集成使用。由于JavaScript能够与HTML集成,因此非常易于实现。此外,...
描述中提到的“逻辑可配”意味着这种跨语言调用方式特别适用于那些需要根据应用环境动态改变的业务逻辑。例如,你可以在Java服务端定义一个接口,该接口允许在运行时加载和执行JavaScript脚本来完成特定任务,这样就...