为什么浏览器没有安装jQuery?


19

我在几个网站上都使用jQuery,尽管我使用CDN来提供服务,但每次访问者下载jQuery都没有意义。jQuery必须是世界上使用最广泛的JavaScript框架-如果浏览器默认情况下仅安装了jQuery,这会更有意义吗?

通过这种方式,每天可以阻止jQuery的下载数百万次。既可以来自人们自己的网站,也可以来自CDN。

真正需要的只是某种if语句,例如:

 <!--[if jQuery gt 11]>

是否存在某种可以帮助我阻止用户访问CDN的东西(如果他们已经从另一个站点的缓存中获取了jQuery)?


3
问题是-用户为什么需要从网站或CDN上为其已有的内容进行新下载?jQuery可从许多位置和许多版本中提供。我担心页面速度,而用户担心(尤其是移动)带宽。如果图书馆有黄金标准,那为什么不使用它呢?当然,还有其他示例,我也欢迎这些示例-只要它们有一致的标准(例如版本号)即可。
user1914292

27
为什么使用jQuery,但为什么不使用Angular,MooTools,Underscore等呢?以及每个版本?浏览器是否应该包含每个JavaScript库的副本?
user253751

15
“对不起,您必须先升级到浏览器的0.1更高版本,才能使用我的网站”
VLAZ 2015年


4
为此进行了缓存。否则,版本处理基本上是不可能的
njzk2'9

Answers:


55

如果您从流行的CDN(例如Google的Hosted Librariescdnjs)提供jQuery ,并且访问者从相同的来源引用了它的网站(只要缓存版本未过期),就不会重新下载它。

就像您所说的那样,jQuery是一个流行的库,但是由于以下几个原因,它不太可能与浏览器绑定:

  1. jQuery相对较小(与有时捆绑在浏览器(例如Flash)中的库相比)。普通站点上最大的性能瓶颈不太可能是由于下载jQuery造成的。
  2. 对JavaScript / ECMAScript的改进意味着开发人员不再需要依赖jQuery。(请参见youmightnotneedjquery.com。)
  3. 还有许多其他流行的JavaScript库。浏览器未设计为JavaScript代码的存储库。跟踪脚本的受欢迎程度,删除较不受欢迎的库并保持所有最新信息可能最好留给各个站点的Web开发人员。

我了解这一点,但是现在我使用code.jquery.com作为CDN。但是,当另一个网站使用googleapis或cdjns时,浏览器将再次从该其他CDN下载jQuery。那只是没有意义,并在整个地方花费大量时间/带宽。如果添加到这一点,在大多数情况下,人们会喜欢jQuery1.7 +之类的东西,那么情况就更糟了。我了解您关于浏览器不是存储库的观点,但是我们是否无法提出某种“来自多个来源的缓存”规则?
user1914292

24
@ user1914292仅当所有浏览器都具有所有版本的jQuery,并且它拦截了对任何已知jQuery来源的任何请求并将其替换为缓存版本时,这才有用。如果差异很小,则可能会导致无法调试的错误。Web缓存有效并且已经使用了数十年的事实进一步加剧了这一点。您的浏览器不是唯一缓存那些jQuery请求的东西-浏览器途中的许多路由器都执行相同的操作。这个问题早在带宽确实很重要的时候就已经解决了:)
Luaan 2015年

4)如果特定站点上的jquery代码取决于最近更新中已从根本上更改的功能,并且不再希望代码执行该操作,该怎么办?
Shadur

1
@Ejay不,它不能用作跟踪机制,因为99%的时间是从浏览器缓存中获取请求。
suriv 2015年

1
@BenSteward是的,使用浏览器的开发工具,然后检查“ 网络”面板。例如,Chrome浏览器将在“大小”列中显示带有“磁盘缓存”或“内存缓存”的缓存资源,并在“状态”列中显示幻影值(只要您没有“禁用缓存”(而DevTools处于打开状态)”在开发工具设置中处于活动状态)。它可能取决于缓存控制标头和其他有关缓存内容和持续时间的因素。developer.mozilla.org/en-US/docs/Web/HTTP/Caching
Nick

21

jQuery不仅是唯一流行的JS库,而且浏览器可能必须包含多个版本。在谷歌CDN目前列出了42个版本的jQuery; jQuery UI的44个版本;jQuery Mobile的6个版本。

最好允许Web开发人员根据其网站要求定义要下载的库版本。如果您在网站上使用当前生产版本的jQuery 从更流行的CDN加载它,那么很有可能您的访问者无论如何都会对其进行缓存。


14

浏览器是引擎,找出要放入汽车中的燃油和多余零件并为您提供的燃料不是引擎设计师的责任。如果他们愿意这样做,那么浏览器将是一个巨大的膨胀软件,因为下一个问题将是“为什么只是jQuery?”,而我们最终将维护依赖项存储库。

另外,我们会包括所有版本吗?如果有人想使用自定义版本怎么办?如果有人不想使用该库怎么办?他们将多久合并和发布最新版本?我们将最终使用具有不同版本的jQuery的不同浏览器吗?他们甚至无法平等地实现标准化的HTML,CSS和JavaScript功能。如果浏览器维护者之一不包括库或其特定版本怎么办?

浏览器提供构建块和环境,供您构建尚未完成的解决方案。

将jQuery放入浏览器并不会使您的网站快速加载,因为在当今,这并不是最大的瓶颈,但是我们可以同意jQuery是一个不必要的大库,但是它的目的绝不是成为一个快速库(考虑到带宽)。还有许多其他的库是专门为快速加载而设计的,并且像Zepto一样轻巧。

如果您真的担心jQuery的大小和带宽使用情况,请不要使用它。您是否听说过Vanilla JS?这是一个更受欢迎的库,用于字面上几乎每个人,包括jQuery的本身!它已经实现了您的梦想,因为它包含在每个浏览器中!


2

使用jQuery之类的库的原因是兼容性。

浏览器已经变得更加符合标准,但是通过使用jquery库,您可以自己提供服务,而不必担心浏览器系列和版本之间的差异。

通过自己提供jquery,您肯定具有一致的api。

如果我们在浏览器中内置了jquery,则必须检查用户拥有的版本,然后我们又回到浏览器中,嗅探到“此网站最好在...中查看”。

因此,将jquery内置到浏览器中没有任何意义。

同样,缓存也可以使用,因此即使用户还没有您的jquery版本,也只需下载一次即可。


-3

我实际上认为,这里的响应者无法理解问题的答案是浏览器可能应该在客户端上包括使用最广泛的库以及polyfills等。

如询问该问题的人所述,可以使用条件注释来确保使用不包含jquery的浏览器的用户获得了适当的版本。

jQuery还通过迁移提供了其自身的向后兼容性支持,从而允许条件注释为具有较旧jquery库打包版本的用户提供复古支持,而无需下载整个新库。

在浏览器中包含这些参数的论点不仅与用户体验和成本有关,而且与我们赖以生存的地球有关。数据的使用是对全球污染的巨大贡献,确保最大限度地减少不必要的数据传输可能会对我们的碳足迹产生巨大影响。

本质上是为了在打包的浏览器中添加额外的几兆字节代码膨胀-每天不必要地传递大约数十亿次相同的数据。

这会恶化互联网上每个人的用户体验。并给大型企业带来巨额费用。

作为开发人员,您将像我们当前对IE等所做的那样创建所需的必要后备,那么,出了什么问题-可能应该确定包含它吗?


1
这与这个问题有关。问题是“为什么不使用浏览器,我该怎么办”,而不是“为什么要使用浏览器”。
斯蒂芬·奥斯特米勒

如果考虑到您的观点,OP可能会对减少CDN的流量感兴趣,如果该框架已经存在于浏览器缓存中,甚至可能来自另一个站点。就个人而言,除非有通用的引用框架的方法,否则我看不到该怎么做。
closetnoc

大多数人都没有说出与该问题最相关的答案,那就是jQuery不是Web标准,浏览器只运行缓慢变化且基于基本原理的Web标准。最初创建jQuery的目的是使基础结构在浏览器之间保持一致,因此包括jQuery在内就好像包含了一个修复浏览器的补丁程序,但浏览器最终已经可以自我修复。如今,我们已经看到jQuery的使用减少了,这一点已被许多“不需要jQuery”文章所证明。
罗布

史蒂芬 问题不是“为什么不使用浏览器,我该怎么办”。那就是你的想法。问题是为什么他们不这样做,问的人清楚地指出,只要这样做并创建一个新的框架来处理出现的问题,实际上将为所有Web用户带来巨大的潜在利益。
安迪·波普

你们都需要停止捍卫过时的成见,并接受仍然可以学习的知识。哦,还学会实际阅读一些东西。#武器。“ OP在考虑您的观点的同时,有兴趣减少CDN的访问量”。他没有说,无论是在客户端还是在CDN上,它都可以节省大量带宽。阅读effing帖子。
安迪·波普
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.