AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

Javascript 的兴起是否意味着 LAMP 的终结?

  • 2011-04-20
  • 本文字数:1400 字

    阅读完需:约 5 分钟

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?

2011-04-20 09:329022
用户头像

发布了 151 篇内容, 共 66.4 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

性能测试知识科普(七):监控能给你带来什么

老张

性能测试 监控指标

Gradle入门了解

派大星

Gradle

JXcore 打包在企业级项目里的合理运用和模块系统以及网络的配置详解【node.js】

恒山其若陋兮

前端 11月月更

React源码解读之任务调度

flyzz177

React

EasyRcovery2023绿色免费版U盘数据恢复软件

茶色酒

EasyRcovery2023

CrossOver2023免费版虚拟机软件安装包下载

茶色酒

CrossOver2023

Flare Network,跨越互操作性三难困境

股市老人

三分钟了解client-go

穿过生命散发芬芳

Client-go 11月月更

一文熟悉 Go 函数

陈明勇

Go golang 闭包 函数 11月月更

【web 开发基础】PHP的匿名函数和闭包 (40)

迷彩

闭包 closure web开发基础 匿名函数 11月月更

我们为什么喜欢看疯狂科学家开飞艇?

脑极体

React源码分析3-render阶段(穿插scheduler和reconciler)

goClient1992

React

极客时间运维进阶训练营第五周作业

独钓寒江

Python 操作BeautifulSoup4(爬取网页信息)

度假的小鱼

正则 11月月更 Python BeautifulSoup4

Python操作XML文件

度假的小鱼

11月月更 Python操作xml xml与html区别

【React技术】JSX在企业级项目的运用and一个元素渲染demo

恒山其若陋兮

前端 11月月更

以原子化服务为基石,面向三大场景打造鸿蒙软硬协同新体验

最新动态

Python基础库-json库

度假的小鱼

11月月更 Python操作json json语法规则

「Go工具箱」gorilla/sessions包的使用及原理分析

Go学堂

golang 深度思考 个人成长 Web 11月月更

2022-11-28:给定两个数组A和B,比如 A = { 0, 1, 1 } B = { 1, 2, 3 } A[0] = 0, B[0] = 1,表示0到1有双向道路 A[1] = 1, B[1]

福大大架构师每日一题

算法 rust 福大大

关于部署策略的遐思

在天涯的海角

React源码分析1-jsx转换及React.createElement

goClient1992

React

富士康智能制造加速营:解决行业当下问题,创造核心技术价值

B Impact

python任务调度利器-APScheduler

AIWeker

Python 任务调度 11月月更

CDH5部署三部曲之三:问题总结

程序员欣宸

大数据 hadoop CDH 11月月更

React源码分析2-深入理解fiber

goClient1992

React

支持向量机-二分类SVC中的样本不均衡问题:重要参数class_weight

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

C++学习---类型萃取---is_pointer && is_lvalue_reference/is_rvalue_reference

桑榆

C++ STL 11月月更

盘点入职时,那些常见但不合规的操作

石云升

职场 入职 11月月更

React源码解读之更新的创建

flyzz177

React

Javascript的兴起是否意味着LAMP的终结?_Java_Jean-Jacques Dubray_InfoQ精选文章