jquery是当今世界上采用最广为的javascript库。web合作开发街道社区在21十七世纪蓬勃发展了jquery,建立了三个由中文网站、应用程序和架构共同组成的多样的生态系,那些控制系统在主脑采用jquery。
但在往后一两年中,jquery做为web合作开发的头号人物辅助工具的话语权早已减少。让他们来看一看jquery为何显得盛行,为何它又失势,甚么情景下它依然是三个当代中文网站的好优先选择。
query百科辞典
john resig在2005年合作开发了jquery的如上所述版,并在2006年正式发布了它。在起初的jquery网站上,他写到:
jquery是三个javascript库,它把这句座右铭埋怨:撰写javascript标识符如果很有意思。jquery透过继续执行常用的、多次重复的各项任务,拿掉大部份无谓的记号,使它意味深长、智能化、易懂,进而同时实现了这一最终目标。
jquery有三个主要就的商业价值提倡。第三个是提供更多三个易于操作方式页面的api。不光是,它提供更多了强悍原素优先示例。
除只依照原素的id或类优先选择原素以外,jquery还容许繁杂的函数,比如依照原素间的亲密关系优先选择原素:
// 优先选择条目中的每一li
$(#contactsul.people li);
第二个卖点是它消除浏览器之间的差异。在当时,浏览器的兼容性是非常糟糕的。
缺乏标准化意味着合作开发人员必须考虑许多不同的浏览器兼容性。只要看一看这个早期的jquery源标识符,然后搜索jquery.browser以查看一些示例。这里有三个:
// If Mozilla isusedif( jQuery.browser ==”mozilla”|| jQuery.browser ==”opera”){// Use the handyevent callbackjQuery.event.add(document,”DOMContentLoaded”, jQuery.ready );
// If IE isused, use the excellent hack by Matthias Miller//http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited}elseif( jQuery.browser ==”msie”){
// Only works ifyou document.write() itdocument.write(“”src=javascript:void(0)></script>”);
// Use the deferscript hackvar script =document.getElementById(“__ie_init”);script.onreadystatechange=function(){if(this.readyState ==”complete”)jQuery.ready();};
// Clear frommemoryscript =null;
// IfSafari is used}elseif( jQuery.browser ==”safari”){// Continuallycheck to see if the document.readyState is validjQuery.safariTimer = setInterval(function(){// loaded andcomplete are both valid statesif(document.readyState ==”loaded”||document.readyState ==”complete”){
// If either oneare found, remove the timerclearInterval( jQuery.safariTimer );jQuery.safariTimer =null;
// and executeany waiting functionsjQuery.ready();}},10);}
透过采用jquery,合作开发人员可以忽略浏览器间的兼容性。
后来,jquery支持更强悍的功能,比如说动画和ajax。jquery实际上成了中文网站的标准依赖项。今天,它继续为互联网的很大一部分提供更多动力。w3techs估计,大约74%的中文网站采用jquery。
jquery的管理也显得更加正式。2011年,jquery团队正式建立了jquery委员会。在2012中,JQuery委员会形成了JQuery基金会。
在2015中,jQuery基金会合并了“基金会”基金会,成立了JS基金会,然后在2019与基金会合并,形成了基金会基金会,并将jQuery做为其“影响项目”之一。
不断变化的环境
然而,近年来jquery的受欢迎程度有所下降。github从他们的中文网站前端删除jquery,bootstrap v5将删除jquery,因为它是bootstrap的“常规javascript最大的客户端依赖项”(目前是30kb,已缩小并gzip)。web合作开发的几个趋势削弱了jquery做为三个必须采用的辅助工具的话语权。
浏览器
由于几个原因,浏览器的差异和限制显得不那么重要。一是标准化水平提高。主要就的浏览器供应商(苹果、谷歌、微软和mozilla)透过web超文本应用技术工作组就web标准进行协作。
虽然浏览器在很大程度上依然存在差异,但厂商至少有办法找到并合作开发共同点,而不是彼此之间展开不间断的战争。因此,浏览器api显得更加强悍。例如,fetch api可以替代jquery的ajax函数:
// jQuery$.getJSON(https://api.com/songs.json).done(function(songs){console.log(songs);})
// nativefetch(https://api.com/songs.json).then(function(response){return response.json();}).then(function(songs){console.log(songs);});
queryselector和queryselectorall方法复制jquery的优先选择功能:// jQueryconst fooDivs = $(.foo div);
// nativeconst fooDivs =document.querySelectorAll(.foo div);
现在可以采用classlist操作方式原素类:
// jQuery$(#warning).toggleClass(visible);
// nativedocument.querySelector(#warning).classList.toggle(visible);
他可能不需要jquery中文网站列出更多的jquery标识符可以替换为本机标识符的情况。有些合作开发人员总是采用jquery,因为他们不知道那些api是可用的,但是随着合作开发人员对它的了解,他们对jquery的依赖性减少了。
采用本机功能还可以提高页面的性能。许多jquery动画效果现在可以用css更有效地同时实现。
第二个原因是浏览器更新的速度比往后快。
大多数浏览器现在都有三个自动更新策略,苹果的Safari是主要就的例外。它可以在无需用户干预的情况下自动更新自己,并且不受操作方式控制系统更新的限制。
这意味着新的浏览器功能和bug修复程序可以更快地被用户采用,合作开发人员不必等待我采用百分比达到可接受的水平。他们可以放心地采用特性和api,而不必加载jquery或polyfill。
第三个原因是internet explorer用户量越来越少。ie一直是当今世界各地web合作开发人员的祸根。IE特有的漏洞是出了名的普遍,而且由于IE是21世纪的主流浏览器,并且缺乏永久性的更新,旧版顽固地挂在那里。
微软加快了IE的速度,在2016年结束了对IE 10及以下版的支持,将IE 11做为最后三个支持版。越来越普遍的是,web合作开发人员有幸忽视了ie的兼容性。
甚至jquery在2013年2.0版正式发布时也放弃了对ie 8及其以下版的支持。虽然像传统中文网站这样的特殊情况依然需要IE,但这种情况越来越少见。
新架构
自jquery正式发布以来,出现了大量的web架构,其中一些当前的领先者是react、angular和vue。与jquery相比,那些架构有三个显著的优势。
首先,它可以很容易地将ui分解为组件。它被设计用来处理页面的呈现和更新。jquery通常只用于更新页面,依赖服务器提供更多如上所述页面。
另一方面,react、angular和vue组件容许html、标识符甚至css之间的紧密耦合。同样,他们可以将三个标识符库分解为多个自包含的函数和类,将三个ui分解为可重用的组件使得构建和维护三个繁杂的网站更加容易。
第二个优点是,较新的架构鼓励声明式规范,在这种规范中,合作开发人员描述ui如果是甚么样的,并将其留给架构来进行必要的更改。这种方法与以jquery标识符为特征的命令式方法相反。
采用jquery,您可以显式地撰写进行任何更改的步骤。对于声明性架构,你可以说,“基于那些数据,这就是ui如果呈现的样子。”这可以显著减少撰写多余的标识符。
合作开发人员采用了那些新的方法来构建中文网站,减少了jquery的相关性。
何时采用jquery
那么他们甚么时候如果优先选择采用jquery呢?
如果所讨论的项目预计会显得越来越繁杂,那么最好优先选择三个不同的库或架构开始,它将容许您从容地处理这种繁杂性,例如将ui分解为组件。对这样三个中文网站采用jquery一开始可以很好,但它可以很快变的越来越繁杂,在这里您不确定甚么标识符会影响页面的哪些部分。
我以前处理过这个问题,每当你想改变的时候,这种情况就会产生一种不安的感觉。很难确定没有中断任何内容,因为jquery优先示例依赖于服务器生成的html结构。
另一方面,你有三个简单的中文网站,只需要少量的交互性或动态内容。对于那些情况,我依然建议不采用jquery,因为他们现在可以采用本机api做更多的事情。
即使我确实需要更强悍的功能,我也会为这个用例寻找三个特定的库,比如说Axios forAJAX或animate.css for animations。采用这样的库通常比为jquery的一点功能加载整个jquery更轻量级。
我认为采用jquery的最好理由是它提供更多了为中文网站前端提供更多便捷的全面功能。不必学习大部份各种本地api或特殊用途的库,只需阅读jquery文档,就可以立即提高工作效率。
它的命令式方法不能很好地扩展,但是它比其他库的声明式方法更容易学习。对于三个范围明显有限的中文网站来说,加入jquery并继续前进是合理的;它不需要任何繁杂的构建或编译过程。
那么,jquery是三个很好的选择,因为您有理由相信中文网站不会显得更加繁杂,而且您不想采用本机功能,因为本机功能肯定比同等的jquery标识符更加冗长。
当你必须支持旧版的ie时,在这种情况下,jquery是明智的优先选择。
期待
jquery不会很快离开。它正在进行积极的合作开发,很多合作开发人员甚至在有本机方法可用时也喜欢采用它的api。
它帮助一代合作开发人员建立了可以在每一浏览器上工作的中文网站。尽管jquery在许多方面被新的库、架构和范例所取代,但它在web发展方面发挥了巨大的积极作用。
除非jquery功能发生重大变化,否则jquery在未来一两年中的采用率会继续缓慢而稳定地下降。新的中文网站往往从一开始就采用更当代的架构来构建,jquery的采用情景会显得越来越少。
有些人对web合作开发辅助工具的流失率感到不满,但对我来说,这是三个快速进步的迹象。jquery给了他们更好的做事方法。它的继任者也这样做了。
The history and legacy of jQuery