当前位置: 首页 > 科技观察

jQuery是时代的眼泪

时间:2023-03-14 22:22:57 科技观察

作为几乎称霸全球门户网站的前端工具,在Web2.0刚出现的时候,jQuery曾经风头正劲。然而,随着前端技术的不断演进和浏览器底层标准的统一,jQuery逐渐成为一些网站眼中的“技术债”。日前,英国政府网站GOV.UK在其网站上删除了所有前端应用依赖jQuery。删除后,13个前端应用程序JavaScript的大小减少了32KB(或31%到49%),其他几项性能得到改进,团队的一些技术债务也被清除。2019年,Bootstrap4.3.1发布,开发团队表示,在v4.3发布后,将在Bootstrap5的开发过程中实现一些关键变化,包括放弃使用jQuery。2018年,GitHub改版重构页面时,去掉了jQuery。GitHub前端团队并没有使用其他框架来替代jQuery,而是使用了原生的JavaScript。另一方面,据BuiltWith统计,已知使用jQuery的实时网站数量高达69,193,395个,在流量排名前百万的网站中,使用jQuery的比例高达75.6%。从使用数据上看,jQuery还在江湖上,但是从声音上看,jQuery已经逐渐让位给后起之秀了...Web2.0,jQuery登场明白jQuery的出现一定不能避开浏览器大战和JavaScript上个世纪的出现。1994年,Netscape网景公司成立,开发出浏览器NetscapeNavigator,并在四个月内占领浏览器市场四分之三的份额,成为1990年代互联网的主要浏览器。当时,Netscape的技术能力和技术策略领先于市场。Netscape预见到Internet将变得更加动态,其创始人MarcLowellAndreessen认为HTML需要一种胶水语言,即脚本语言,可以方便网页设计师或非专业程序员设计图片和插件。经过一些内部研究,Netscape决定发明一种辅助脚本语言来与Java一起使用。1995年5月,Netscape的工程师设计出脚本语言的原型,为了让Java这种新语言流行起来,Netscape和Sun计算机公司组成的开发联盟于同年12月发布了NetscapeNavigator2.0Beta3。在部署时,暂时重命名为JavaScript。JavaScript出现后,逐渐受到开发者的追捧。但是,随着Web2.0对交互性需求的增加,也对JavaScript提出了更高的要求。另外,当时的浏览器厂商还在忙着跑马圈地,抢占市场。很多软件无法在不同的浏览器上通用,增加了软件作者的开发难度。jQuery之父JohnResig当时就饱受折磨。程序员之一。JohnResig“当我在做网络编程的时候,我非常讨厌浏览器的错误。不同的浏览器有不同的错误,而且有很多。所以我用JavaScript做了一个CSS选择引擎,然后我做了一个动画引擎,都是自娱自乐。但同时我发现自己做的一些app不能放到浏览器中。为了把app放到火狐浏览器中,我开始做相关的API来应用CSS选择引擎和动画引擎,这些最终变成了jQuery。几个月后,我把那些应用程序做成Firefox,然后它们也可以在IE中运行。”JohnResig于2005年首次向外界展示了一个在JavaScript上具有更简洁语法的CSS选择器,在2006年的BarCampNYC活动上,JohnResig发布了第二个新版本:jQuery:NewWaveJavaScript,“这段代码彻底改变了Javascript与HTML交互的方式”。jQuery的设计宗旨是“writeLess,DoMore”。多年以后,约翰仍然以此为自己的目标——让每个人都可以在网页上写东西,并且写出来的东西可以流畅地显示在浏览器中运行。jQuery的出现解决了当时前端开发者的两个普遍烦恼:使JavaScript和DOM的交互界面变得简单,减少了开发过程中的跨浏览器问题。第一个是简化DOM操作。HTMLDOM为HTML定义了一组标准对象,以及用于访问和操作HTML文档的标准方法。通过DOM,您可以访问所有HTML元素以及它们包含的文本和属性,修改和删除内容,创建新元素等等。在jQuery之前,使用JavaScript操作DOM需要定义一个函数,然后将其绑定到特定DOM中的各种HTML元素,这对于日常使用来说非常繁琐和复杂。所以jQuery提供了一个选择器引擎——后来迭代为Sizzle,它允许开发者在上面的CSSElements中通过名称(比如div)、ID(比如#myId)、类别(比如.my-class)等来选择页面,使用字符串而不是函数来查找元素,过滤子元素,比其他引擎更快,文件体积更小,易于扩展且无依赖性。另一方面,在纯JavaScript开发中,开发者需要检查浏览器使用哪种方式来添加事件,然后做出选择,但是jQuery提供了一些不兼容隐藏了不同浏览器的JavaScript实现,可以检查浏览器期望使用什么方式,并使用合适的。凭借这两个优势,jQuery很快获得了开发者社区和众多大公司的支持。2010年前后,微软和谷歌都在他们的CDN网络中为jQuery库提供了托管服务;MediaTemple竭尽全力捐助托管jQuery网站;微软也参与了jQuery的测试和开发,VisualStudio和ASP.NETMVC都内置了jQuery;诺基亚参与jQuery测试,聘请jQuery核心成员BrandonAaron;Mozilla直接聘请了JohnResig...正是这些大公司的支持和使用,让jQuery在最初几年非常成功。据JohnResig介绍,jQuery的开发资源全部来自外部捐赠。2011年,jQuery成立了jQuery基金会,主要支持jQuery核心、用户界面和移动项目的开发,提供jQuery文档和支持,促进jQuery社区的发展。“令我高兴的是,干净的API设计显然在世界上仍有一席之地,jQuery的持续成功证明了这一点。”在jQuery十周年之际,JohnResig也表达了对jQuery流行的钦佩之情,“太棒了!jQuery比以往任何时候都更受欢迎,全球排名前100万的网站中有77.8%使用它。”这个比例至今只下降了2.2%,很多公司还在使用jQuery。有业内人士分析:“2016年之前jQuery的渗透率非常高,市场占有率接近90%。许多从jQuery开始的开发人员。2016年后,虽然React和Vue在国内发展迅速,但生态层面仍不如jQuery完备。当一些开发者在新兴的MVVM框架上找不到解决方案时,他们只能从jQuery生态系统中寻找。有很多网站都在混合中。“那么,在如此高的使用率下,为什么jQuery会成为一些公司想要抹掉的技术债?jQuery已经不在人间了?”目前从全世界来讲,jQuery是一个被边缘化的技术存在。业内人士指出,自2006年第一个版本发布以来,jQuery迎来了10年的黄金期,这意味着它很难瞬间被淘汰。但是随着JavaScrpit本身的成熟和浏览器核心的统一,jQuery的优势正在慢慢淡化……”我们基本上不增加新的特性,目前的大部分工作都是优化,让jQuery更快、更强、更简单理解。未来的工作也是优化,让jQuery的功能更加清晰。”2011年,jQuery团队发表的观点可以说为jQuery后来的命运埋下了注脚。当jQuery开始走向优化路线,当jQuery最初解决的问题逐渐不再是常见问题时,它们就不可避免地失去了优势。回顾jQuery的两大主战场,DOM操作的简化和浏览器的兼容,这几年已经有了更好的解决方案。第一,浏览器兼容性问题。在jQuery雏形的前一年——2004年,来自Opera、Mozilla、Apple等不同组织的一群志同道合的人聚集在一起,组成了一个独立的规范小组,叫做WHATWG,旨在为jQuery编写更好的HTML标记规范。构建新一代的Web应用程序。这组规范的结果就是WebApplications1.0规范。然后,经过W3C成员的多次讨论,2007年3月,HTML工作重新启动。新的HTML工作组做出的第一个决定是采用WebApplication1.0规范并将其称为HTML5。与以前的HTML版本相比,HTML5更适合编写动态应用程序,并且通过定义明确的解析算法,所有实现HTML5的浏览器都将从相同的标记创建相同的DOM。但是HTML5刚出现的时候并不完美,外部采用率低,这让jQuery在早期有了喘息和成长的机会。2008年,第一个HTML5草案诞生。同年,IE、Chrome、FireFox、Safari等几大浏览器巨头纷纷开始支持HTML5。但此时,HTML5还没有定稿,也饱受质疑。比如2012年Facebook应用放弃了HTML5部分,采用纯原生的方式开发。HTML5的标准制定者W3C和WHATWG因为标准制定的分歧不再合作。一向是HTML5大力支持者的Apple,不再允许纯WebAPPshell登录AppStore。HTML5又经历了一段低迷时期,在此期间,jQuery仍然是全球大多数网站的首选。直到2014年10月底,时隔8年,W3C终于宣布HTML5定稿。此后两年,浏览器厂商纷纷宣布支持HTML5,各种应用开发商也纷纷采用HTML5开发产品,一些HTML5服务商也获得了融资。伴随着HTML5的广泛应用,另一个对jQuery构成“威胁”的技术框架——MVVM的流行使得jQuery在DOM操作上的优势不复存在。由于开发者希望用HTML5开发的应用能够接近原生App的效果,因此暴露出一些问题,比如大量的DOM操作,频繁调用DOMAPI,操作繁琐,代码难以理解维护,页面渲染性能降低。Slowdown等。jQuery虽然可以简化DOM操作,但是不如直接跳过DOM操作的MVVM架构。MVVM架构由三部分组成:Model、View和ViewModel。Model层表示数据模型,可以定义数据修改和操作的业务逻辑;View代表UI组件,负责将数据模型转化为UI显示。ViewModel是一个同步的视图和模型对象。View和Model通过ViewModel交互,两者之间的同步是完全自动的,不需要开发者手动操作DOM。由于MVVM结构实现了数据和视图的分离,通过数据驱动视图,封装了DOM操作,将数据和视图的绑定变成了自动操作,进而将DOM操作从业务代码中移除,导致jQuery在很多地方失去了用处场景。MVVM架构图符合MVVM思想的新一代前端开发框架逐渐出现,形成了现在的三大前端框架:2009年,AngularJS框架出现,后来被谷歌收购。核心特性包括MVVM、模块化和自动双向数据绑定。2013年5月,来自Facebook的用于构建用户界面的JavaScript库React开源;2013年,就职于谷歌的游玉玺受到Angular的启发,发布了一个轻量级框架Seed,同年12月更名为Vue。2014年1月24日,Vue正式对外发布,版本号为0.8.0。有人这样描述jQuery和新框架的对比:我让jQuery买一瓶酱油,给他100元。这时候我们需要告诉他小店怎么走,怎么告诉老板买什么酱油,买多少。酱油,找多少,告诉他怎么取回来(命令式)。这时候就让vue买酱油了。这时候我只需要给他钱,告诉他目的地在哪里,买什么酱油就可以了。没必要教他(函数式)。这就是传统开发和现代框架开发的区别。总体而言,随着UI交互标准的提高和浏览器解析标准的统一,jQuery很难在新功能上超越所有MVVM框架。但是jQuery目前最大的优势就是比较轻量级,只需要面向浏览器即可,而新的框架需要大量的工程化手段,技术门槛比jQuery高。而且jQuery组件有一定的历史背景,涉及面广,功能也比较全面。在生态上也比MVVM框架成熟。另外,由于jQuery的市场占有率仍然很高,而且使用方便,因此掌握jQuery仍然是很多开发者的“基础练习”。在对jQuery的评价中,流传着这样一句话:“任何一个程序员都可以在三天内学会jQuery的基本用法并投入使用”。此外,开发者技术栈的更新也存在一些主观因素。对于大多数开发者,尤其是那些不擅长前端领域的开发者来说,要完全推翻他们已经掌握的技术是非常困难的。业内人士预测,未来几年jQuery的主要受众仍将是后端开发人员。当然,这个群体的比例会随着新人的不断加入而逐渐被稀释。“总的来说,我们今天讨论的不是jQuery的状态,而是它存在的意义。对于实际的人来说,人们更关心的是jQuery能帮助他们解决多少问题。状态不再是jQuery的标签。“