我喜欢jquery,仍然这样做

2021-06-29 22:51:47

jQuery 3.4.0已在两天前发布,我在Twitter,Reddit和黑客新闻中看到的负面反应量是惊人的。

让我们清楚:jquery本身没有错。 John Resig的图书馆仍然是有史以来最相关和最受欢迎的JavaScript代码之一。这些年来讨厌jQuery的人可能不知道(或忘记)前端javascript开发曾经是什么和/或正在为自己的坏代码批评图书馆。

回到90年代后期,网站几乎完全是服务器端生成的HTML页面。 JavaScript是页面的相对较少的部分,它经常使用(或滥用)只是为了添加眼睛糖果,例如滚动文本,勾选每秒的时钟,等等。

然后,Gmail于2004年出现,这是数百万采用的第一个大型单页申请(SPA)。虽然,当时我们并没有真正使用“spa”这个词,所以我们会用富有的互联网应用程序(RIA)或“Web 2.0 App”等术语来指代该类别。

Gmail激发了无数的开发人员,敢于使用网络。问题是,它是十五年前(时间飞逝......),Web开发人员与Internet Explorer 6作为最常用的Web浏览器打交道。 Mozilla Firefox刚刚出现并慢慢开始蠕动。

Safari和Konqueror是2005年首次通过acid2测试的浏览器,证明完全符合HTML和CSS 2.1规范。 Firefox遵循一年后,Internet Explorer终于成为2009年版本8的“符合标准标准”(基于acid2测试)。

简而言之,二十一世纪的第一个十年的网络发展是一团糟。我们正在处理没有实施标准的浏览器,呈现出于规格的无视页面,并在顶部添加了自己的专有技术。我们也没有豪华的东西,例如HTML5,CSS3,ES2015(ES6)或WebSockets;可用的API并不富裕和强大。最重要的是,我们必须处理像闪光这样的丰富插件,经常用于(不必要的)眼糖果,有时像播放视频一样。

在2006年,jquery出来了这一环境。确切地说,它不是唯一的,也不是第一个图书馆。其他流行的替代方案包括原型(2005年首次发布)和script.aculo.us combo-yes名称是真实的。

当我们需要一个简单的库以向大多数静态页面添加交互性时构建jQuery,在多个浏览器的顶部添加统一的图层,这些层不符合标准。开发人员可以使用jQuery来增加服务器端生成页面的用户体验,添加一定量的交互性:例如,在不重新加载整个页面的情况下提交表单,或者轮询更新的内容等。

/ * jQuery * / var ajax = {}之前; ajax。 x =函数(){if(xmlhttprequest!=='未定义'){return new xmlhttproquest(); } //此函数的其余部分是支持IE 6 var版本= [" msxml2.xmlhttp.6.0" ," msxml2.xmlhttp.5.0" ," msxml2.xmlhttp.4.0" ," msxml2.xmlhttp.3.0" ," msxml2.xmlhttp.2.0" ," microsoft.xmlhttp" ]; var xhr; for(var i = 0; i<版本。长度; i ++){try {xhr = new ActiveXobject(版本[i]);休息 ; }捕获(e){}}返回xhr; }; ajax。发送=函数(URL,回调,方法,数据,异步){if(async ===未定义){async = true; } var x = ajax。 X (); X 。打开(方法,URL,异步); X 。 onreadyStateChange =函数(){if(x。ReadyState == 4){回调(x。responseText)}; X 。发送(数据)}; ajax。 get =函数(URL,数据,回调,异步){var query = []; for(数据中的var键){查询。推(编码(key)+' =' +编码(数据[key])); ajax。发送(URL +(查询。长度?'?' +查询。加入('&'):''),回调,&#39 ;获取',null,异步)}; //示例:ajax。得到(' mydata.xml' {q:10},函数(响应){//做某事});

/ *带jquery * / $。 ajax({url:' mydata.xml',数据:{q:10},成功:函数(响应){//做某事}});

jQuery对DOM操纵也非常有用。它抽象了许多表现得很奇怪的Web浏览器的怪癖(例如,像IE 6 ......)给出一致,强大的API。在浏览器开始实现它之前,jQuery还提供了Document.QuerySelector等多年的内容(在Internet Explorer中,只使用版本8到达,它是MADGY之前的版本9)。

如果您仍然不相信jQuery有多重要,请考虑Microsoft在2008年在Visual Studio和ASP.NET中包含它。这是他们第一次在其中一个Flasghsip产品中发布开源库并将其用作主要卖点。

就像我在上面说的那样,当前端开发是关于增强服务器端生成的页面时建造的jQuery建立,以添加一些交互性。然而,开发人员梦想着建造像Gmail这样的东西。

在00s后期,没有框架和工具,如棱角(首次出现在2010年),打字,网客等。没有JavaScript模块,ES2015,Babel译员等。在没有今天的工具,开始建造“ spas“与jquery

但jquery从未设计过,并建立“水疗中心”,这很难。最终结果是,大多数开发人员最终写了一大吨的意大利面代码,建立几乎不可能维护的怪物。您的开发团队更大,您的代码可能更为复杂。

“2008年 - 我”也有罪,而且仍然是我建造的互联网上的视频:

John Resig建立了jQuery,使其简单而有趣地编写跨浏览器的JavaScript代码并调用Ajax请求。建设“SPA”不是他的目标,而且使用jQuery的开发人员只是滥用它。所以,如果开发人员最终在尝试用jQuery建造SPA时写得非常凌乱的代码,他们只有自己责备,而不是图书馆。

当然,我不会尝试用它建造水疗中心。但是,如果我需要快速在静态页面内部建立一些互动,如果我仍然认为jQuery是我的首选。

使用jQuery添加到页面的交互性真正快速。您只需要包含一个< script>标签,你很高兴,不需要用网吧弄乱。

jquery有一些非常简单的API,多年来一直稳定。它很容易使用,它只是有效,它很好。即使强度较小,该项目仍然积极维持。

有一个巨大的jQuery开发人员社区(即使是今天),jQuery仍然是Stackoverflow上最受欢迎的标签之一。 这意味着找到大多数问题的解决方案非常容易。 同样,有很多模块和插件用于jQuery进行许多事情。 Bootstrap本身使用jQuery添加像Poprove等的交互性。 有时您正在构建复杂的Web应用程序,并使用类似角度,反应,Vue,Svelte等的东西是最佳选择。 很多次,如果你只是在构建一个视图或两个观点,你真的不需要这些框架的复杂性。 在所有情况下,请记住,每种技术都是针对特定目的而建立的,如果您最终在误用它时撰写不良代码,那就所有人都在您身上。