为什么浏览器没有集成jQuery? (注:该问题涉及IT技术)

26

为什么jQuery没有整合到浏览器中,这样在您的网站上就无需引用它了,而是浏览器会自动检测使用的jQuery,并且一切都能正常工作。

尽管引用jQuery并不那么困难,但拥有这样一个非常酷的功能仍然很不错。 谢谢。


我几天前也在想同样的事情...每个开发者都必须在每个网站上包含并让用户下载这些东西,这太愚蠢了。 - Toni Michel Caubet
那么对于在你的想法出现之前就使用浏览器的全世界99.9%的人来说怎么办? - AlienWebguy
2
此外,通过从CDN(如Google)引用库(jquery等),人们通常会在本地缓存版本,因此它甚至不再请求文件。 - Didier Ghys
7个回答

22
将jQuery作为外部脚本的主要优点是,如果在新版本的jQuery中获得了一个新功能并且(假设jQuery已经进行了适当的跨浏览器支持),则可以自动在所有您的用户使用的浏览器中使用该功能。您可以编写您的网站以使用该新jQuery功能,并知道它将在常用的所有浏览器中正常工作。
如果将jQuery功能内置到浏览器中,则只能使用最低公共分母方法。您只能依赖于最落后或最旧的浏览器中存在的功能。当引入新功能时,您必须等待近十年的时间,直到不支持该新功能的所有较旧浏览器退出常用状态,您才能确保使用它是安全的。或者,您必须构建自己的跨浏览器支持,从而创建一个新的类似于jQuery的跨浏览器库,这样就会重新开始循环。
使用jQuery,您只需在网站中包含最新版本的库,就可以在所有常用浏览器中自动使用该新功能。
至于效率,如果正确地将jQuery作为外部文件包含,您不会失去太多。如果使用其中一个更常见的CDN(例如Google)链接到jQuery,则jQuery可能已经在浏览器缓存中,并且它会从本地硬盘加载而不是每次需要时下载。是的,如果内置,它可以进一步优化,但然后您将失去之前讨论的所有这些好处,这就否定了最初拥有它的整个原因。

此外,内置功能每年都在向前发展,但这并不意味着没有进步。这叫做标准运动。问题是它移动得非常缓慢。看看CSS3转换。我们今天在所有流行版本的Firefox、Chrome、Opera和Safari中都有CSS3转换支持,但还没有任何IE版本支持。因此,由于我们距离所有流行版本的IE7、IE8和IE9消失还有很长的路要走,我们距离能够“使用”CSS3并期望浏览器支持它还有很长的路要走。仍然需要一个动画库。即使IE10明天就发布并自动支持CSS3转换的所有功能,我们仍然需要多年时间才能停止在Web上使用所有旧版本的IE。


哇.. 完美的解释。 - Dheeraj Avvari
2
通过在浏览器中保留每个当前版本,是不是可以避免这种情况?例如,网站添加了一个 jquery 1.9.1 标签,浏览器检测到后,会插入自己的 jquery 1.9.1 而不是向网站发出请求。在另一个网站中,它看到了一个 jquery 7.4 的标签,由于没有该文件,它会从服务器请求。 - sricks
1
如果您从CDN使用jQuery,浏览器已经通过缓存基本上实现了这一点。 - jfriend00
是的,实际上我已经在使用一些Web标准功能,例如自定义元素、影子DOM等。我正在检查浏览器是否支持customElements,如果不支持,我会动态请求js以支持polyfill。 - Nitin Dhomse
@NitinDhomse - 只要你使用功能检测而不是浏览器版本号,那么这种技术对于polyfills(因为你仍然可以只有一个代码版本)非常有效。 - jfriend00
显示剩余5条评论

5
因为不同的浏览器会有不兼容版本。 任何本地实现都保证与实际情况有一些细微差别; 最终,我们需要一个跨浏览器的jQuery包装器,然后循环就会重复。 这也会使更新更加复杂。 它还会破坏定义$函数(例如Prototype)的其他库。

1
为了实现这一点,jQuery 必须成为规范或标准,这是没有意义的。任何为特定目的向语言添加额外功能的东西都应该是一个框架。 - Hal

2

快进到2018年:网页浏览器几乎每月更新一次(除了Edge/IE似乎是半年一次,这仍然不错)。因此,关于跟上最新版本的观点已经没那么重要了,考虑到jQuery已经成熟到人们很少立即使用最新功能,也没有严重的错误。

在高速互联网和缩小尺寸的情况下,加上浏览器缓存和CDN,下载也不再是问题。

人们通常忽视的主要点是性能提升。每个页面都解析/加载jQuery不是明智之举。想象一下,在低端移动设备上不必在每个页面加载时解析它会更容易。一个本地浏览器代码库实现jQuery的语法风格来利用JavaScript/ECMAScript是目标,而在我看来,这是不可避免的。一个不错的催化剂将是Mozilla/Chromium社区中拥有巨大力量/影响力+开箱即用思维+勇气的人(就像史蒂夫·乔布斯),使这成为现实。


1

首先,JQuery并没有什么特别之处 - 它只是一种更人性化的编写JavaScript代码的方式。它处理了更多的跨浏览器问题等,因此开发人员不必过多考虑。

话虽如此,JQuery遵循ECMAScript标准,浏览器也是如此。IE是一个顽固的浏览器,因为它使用专有的JScript而不是JavaScript。

浏览器不应该承担这个负担。你真的想回到那些占用500多MB内存并需要10秒钟才能打开的臃肿浏览器的日子吗?

最后,如果Mozilla和Webkit开始包含JQuery,那可能会惹恼很多使用Mootools、YUI、Dojo等的有才华的JavaScript开发人员。


1
所有的JavaScript库都应该被整合到浏览器中,因此使用全局存储(例如Google)来更新库。这样,当一个库被更新时,它也会在那个存储中得到更新。这是一种方式,无论浏览器版本如何,库都不会过时。至于美元符号,我认为浏览器应该创建一些函数,比如...
 use_library( 'jquery' ){
     // my jquery code
 }

 use_library( 'prototype' ){
     // my prototy[e code
 }

然而,由于集成JavaScript库仅在浏览器不会在每个请求上通过互联网加载它时才有效,而只有在库更新后一次性加载,因此需要具有某种“酷炫”的系统,每天检查一次新的库,尽可能少地发出请求。

我的意见。


0

0

首先,jQuery 有几个版本,一些插件可能与较新的版本不兼容。此外,如果 Firefox 等浏览器实现了这一功能,它们每次更新时都必须下载 jQuery,而不能保证 Chrome 和其他浏览器会跟进。例如,Internet Explorer 不喜欢任何新东西,因此您仍然需要为不支持它的浏览器引用它。

最后,即使浏览器开始实现它,我也不会依赖它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接