【问题标题】:Drawbacks of using jQuery?使用 jQuery 的缺点?
【发布时间】:2011-03-18 03:07:34
【问题描述】:

我听说过很多关于 jQuery 的好消息,但是当前版本的 jQuery 有哪些缺点以及您希望在下一个版本的 jQuery 中提供哪些功能?

【问题讨论】:

  • 它只会在每个版本中变得更好 - 只是我的 2 美分 - 我可以看到使用它的唯一缺点可能是文件大小,但现在,你发现的大多数图像的文件大小都比缩小的 jQuery 大图书馆。是跨浏览器开发的福气。
  • 它可以在 Internet Explorer 上运行...如果你问我主要缺点 :)
  • @alex:很容易修复。检查 IE,如果找到,不要加载 jQuery。 ;p

标签: javascript jquery jquery-ui frontend


【解决方案1】:

一个很大的缺点是它的抽象隐藏了 JavaScript 的“丑陋部分”,因此使学习 JS 变得更加困难。这是困扰 JS 社区的一个问题。最终发生的事情是,您的设计师/开发人员可以进行简单的翻转和幻灯片放映,但一旦真正的 DOM 操作开始发挥作用,就会遇到大问题。

另一个缺点不仅仅是大小,而是 jQuery 的真正无定形。对于每个新浏览器(最著名的是 Internet Explorer),都在幕后进行了大量工作以扩展代码库。这在 IE8 中最为明显,其中相当多的 jQuery 必须重新编写以至少符合最新版本的 IE。结果是您拥有大量的方法和属性(自 jQuery 1.5 起超过 200KB)。即使有多种压缩/缓存文件的选项,您仍然会经历相当长的加载时间(在良好的连接上需要几秒钟)。

其中一个选项是通过 Google 的内容分发网络 (CDN)。它可以为您缓存 jQuery 并缩短加载时间。但是,您现在依靠两个来源来完美运行。最近,Google 更新了 jQuery 的一个新(>=1.5)版本。这导致了几个小时的一些不兼容问题,并给 jQueryUI 和各种插件带来了问题。正如我之前所说,您总是依赖两个来源来工作。保存您自己的本地化版本可以降低这种风险。

我认为,如果规划和使用得当,它对大多数项目来说都是一个福音。但是,我确实强调需要使用适当的计划。首先问问你自己(或你的团队)你的项目是否真的需要华丽的淡入淡出和伪补间。为了最大限度地提高效率,应该最后添加这些类型的东西。

这些都是我现在想的问题。希望这对您将来有所帮助。

【讨论】:

  • 哈哈,这让我想起了我们之前的一次谈话@Matt McDonald +1 :)
  • 想解释一下“真正的 DOM 操作”是什么......就你能做什么而言,如果没有 jQuery 会更好地完成??
  • @philwinkle,这更像是与 DOM 理论相关的观察。如果有人缺乏对 DOM 的理解,操作就会变得很麻烦。没有任何库可以为您提供了解如何使用 DOM 的知识。这必须通过时间和精力来学习。
  • 我见过的一种技术是提供您自己的 jQuery 副本,并在文件名中放置时间戳(例如“jQuery_20110317.min.js”)并告诉您的 Web 服务器设置缓存过期该文件的时间为一年。然后您的用户最多每年只加载一次,除非您发布新版本并更改文件名。缺点是你必须在每个
  • “一个很大的缺点是它的抽象隐藏了 JavaScript 的“丑陋部分””
【解决方案2】:

与什么相比?在什么情况下?就其本身而言,很难说它有任何缺点。

但在某些情况下,也有一些缺点:

  • 它很大。 jQuery 库在您的服务器上很受欢迎,最终用户必须下载。最小化、CDN'ing、缓存等都有助于最小化它,但如果你正在寻找超轻量级的 JS 解决方案,从头开始编写它可能会让你的文件变小。

  • 它所做的许多 DOM CSS 操作不一定从可访问性 POV 优化。越来越好……尤其是灯丝组正在做的所有 ARIA 工作

  • 并不是每个人都喜欢 jQuery UI。这很好,当然。但也有点笨拙,恕我直言。

  • 如果您不了解 JS 的一些基础知识,可能会有些混乱。了解 jQuery 有时在幕后做了什么是件好事。

但是,老实说,你必须深入挖掘才能真正抱怨它。恕我直言,jQuery + StackOverflow 让 Web 开发再次变得有趣。 ;o)

【讨论】:

    【解决方案3】:

    对我来说,jQuery 的任何缺点都不在于它缺少哪些功能,而在于它包含了哪些不必要的功能

    • jQuery 似乎包含了许多不同的方法来做同样的事情。有很多小方法是其他方法中相同功能的快捷方式。

      这意味着文档在某些地方似乎不必要地复杂,并且很难记住做同一件事的每种不同方式。如果他们使用不同的方式来做同样的事情,可能会更难理解其他人的代码。

    • 代码库不断增长。小于 30Kb 的压缩和缩小仍然令人印象深刻,但它已经达到了比我必须加载的任何 CSS 文件或标题图像更大的大小。它对 Javascript 库采用“单片内核”之类的方法,这可能是其成功的一个重要因素 - 它在一个地方包含您想要的所有内容,而不是使其更加模块化。

    这不是什么大问题。 jQuery 非常强大和健壮。但我提出这个问题是因为最初的问题似乎假设 jQuery 只能通过向其添加更多功能来改进。我不同意 - jQuery 已达到成熟水平,缺乏功能不再是其主要缺点之一。

    【讨论】:

    • 我从没想过 jQuery 中已经存在任何不必要的功能,感谢您为我指明了方向。
    • 对参数进行排序从来没有不同的方法,其中一些只是可选的,您经常会看到选项哈希。 IMO 是唯一理智的做事方式,替代方案往往是相当不可读的代码,即使文档变得更加直接。
    • 我在选择我认为的单词时很挣扎。当我说对参数排序的不同方法时,我的意思是可以为许多方法提供不同的参数组合来实现相同的目标,或者有时甚至添加参数也会明显改变行为。例如,包含一个“选项”对象与将相同的选项作为单独的参数列出,或者添加一个额外的参数以使方法从 getter 变为 setter。
    【解决方案4】:

    如果问题是“我应该使用 JavaScript 库吗?”答案是肯定的。 javascript 最糟糕的地方在于不同的实现,而使用 js 库将极大地缓解这个问题。自 2005 年左右原型机推出以来,在不使用某种库的情况下完成的专业 JavaScript 工作并不多。

    如果问题更多的是“JQuery 的相对优势是什么?”,这里有几点

    • 它只是一个dom抽象库。如果您需要做的不仅仅是小的动画或样式更改,那么 jquery 本身是不够的。

    • 话虽如此,这就是大多数人都想做的事情,这也是它如此受欢迎的重要原因。极端流行的问题是那些不是认真的 javascript 开发人员倾向于认为 javascript == jquery,实际上并非如此。

    • 基本上,如果您要向页面添加一些琐碎的行为,jquery 非常棒。如果您正在构建“RIA”网络应用程序,您希望更多地了解 dojo(甚至是 sproutcore,具体取决于您想走多远)。如果您处于中间位置,MooTool 将满足您的一切需求。

    • 如果您是那种宁愿构建自己的工具集而不是选择“一切和厨房水槽”类型框架的人,jquery + 下划线 + 主干将带您走得很远。

    【讨论】:

    • 它不仅仅是一个用于“琐碎小行为”的 dom 抽象库。当然,Dojo 或 ExtJS 或其他库可能更适合特定项目,但 jQuery 不仅仅是制作动画。
    • @DA:好的,它是一个带有一些实用方法的 dom 库,它的全面性和真正的亮点在于 dom 操作。 Ext 是一个完整的 GUI 工具包,但它也不是一个综合库。 Dojo 和sproutcore 之类的东西是完整的平台,涵盖了编写javascript 应用程序 所需的一切。 JQuery 对于网站或大部分工作都在服务器端完成的 web 应用程序很有用。
    • rebecca murphy 在这里blog.rebeccamurphey.com/on-jquery-large-applications 谈论这个问题做得很好(虽然她写的时候骨干并不存在)。就个人而言,我更喜欢“工具的大杂烩”,而不是庞大的框架。但是,即使我宁愿将我需要的所有部分联系在一起,我认为如果说将所有这些东西连接在一起然后首先使用适合问题的东西以任何方式更有效率,那将是一个谎言。
    • 这是一篇很好的博文。并且我同意。也就是说,我想说 jQuery,在企业中,75% 的时间,将比目前的存在改进(通常是陈旧的 active-x 控件的混搭,臃肿的付费 JS 组件,处理服务器端、Flash、以浏览器为中心的代码等的方式太多了)。在意识到之前,我参与了 Dojo 规范的项目:a) 他们真正需要的只是一些不错的 UI 改进;b) 他们找不到任何使用过它的人。 ;)
    【解决方案5】:

    我认为这取决于我们谈论的 JavaScript 专业水平。如果我们从初学者到中级的角度来讨论,缺点是它可能成为阻碍开发人员磨练原生 JS 技能的拐杖(另一方面,它也可以成为 INTO JS 开发的桥梁——它肯定是为了我)。

    一旦你对更多地使用纯 JS 工作感兴趣,主要的缺点就是它是以 DOM 为中心的。随着您的编程变得更加注重数据,对 DOM 的偏见有时会成为阻碍。

    随着代码变大,让所有代码井井有条也会变得有点棘手。

    我认为我最希望看到的是某种依赖管理 - 例如,让我的脚本自动加载或不自动加载任何需要的插件和组件。

    说了这么多,我绝对是 jQuery 的粉丝,它是我选择的 JS 库。我发现优势远大于劣势,并且一直在改进。

    【讨论】:

    • 你看过骨干吗? IMO 对于优秀的 js 开发人员来说,jquery + 主干 + 下划线 + 把手对于更大规模的工作来说可能是一个非常好的“堆栈”。
    • 我最近发现了下划线,它真的很有用。听说过但未探索过的骨干——肯定会去看看它和车把!
    【解决方案6】:

    主要的缺点(除了它抽象了 javascript 的一些关键概念之外)是捆绑所有东西的事实,因此库本来就很大。

    大型 javascript 文件 = 更多加载时间。

    也不要误会我的意思,我喜欢 jQuery……我只是向你展示了故事的另一面 :)

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2021-03-06
      • 2010-09-09
      • 1970-01-01
      • 2013-12-02
      • 2020-05-12
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多