jQuery 1.8 版本征求意见

发布日期: 作者:

我们已准备好进行下一轮社区意见征求,这次是针对 1.8 版本!这是您提出建议的机会,让我们可以改进 jQuery,修复、添加、更改或删除功能,使其更强大。

您可以通过此表格添加建议;尽可能提供指向错误报告、详细描述的页面或代表您想法的实现的链接。我们希望在 12 月 5 日之前收到所有您的意见,以便在制定 1.8 版本路线图之前,我们可以阅读并讨论这些意见。

感谢大家在关于如何通过精简 jQuery 来改进 jQuery 的早期博客文章中留下的建议。我们已经过了一遍这些评论,并且对如何在未来的版本中解决其中一些问题有一些想法。

创建可配置的下载构建器

许多人想知道为什么我们没有一种方法来构建只包含您需要的 jQuery 部分的文件,因为例如 jQuery UI 有这个选项。这并不是完全相同的情况。如果您使用的是 UI 手风琴,您就知道这一点,因为您直接调用它。您通常不知道您(或者您页面上包含的某些插件)是否正在使用 $.fn.prepend() 或 $.fn.animate()。您是否使用它们甚至可能取决于您在运行时传递给插件的参数。

为了使 jQuery 开发保持可管理性,并确保 CDN 可以提供一个可以被互联网上每个人有效共享和缓存的单个文件,团队希望继续以单个文件作为其主要产品。创建可配置的下载可能可以稍微提高文件大小,但它也会使文档、插件使用和调试变得更加复杂。这对您和我们来说都是更多工作量。

我们已经开始努力提高模块化,方法是消除 jQuery 内部不需要的依赖关系;我们宣布的许多已弃用功能将针对删除这些依赖关系。通过奠定这个基础,其他人想要创建他们自己的更小的 jQuery 子集或模块化版本应该会更容易。

但是,我们相信我们可以做得更好,并且希望提供自动化的方式,让任何用户都可以创建包含应用程序代码和仅包含 jQuery 需要部分的优化最小化文件。特别是,我们正在与 Google Closure Compiler 团队合作,看看是否可以利用其ADVANCED_OPTIMIZATIONS选项。随着开发的进展,我们将提供更多关于我们进展的信息。

等到 2.0 版本再删除东西

我们很重视现有的所有 jQuery 代码。这就是为什么我们尽早弃用某些功能的原因,这样人们就有足够的时间更改他们的代码。仅仅因为我们今天弃用了一些东西,并不一定意味着我们会在下一个版本中删除它。我们相信 1.8 版本中实际删除的内容列表很少,不太可能影响大多数用户。

如果我们使用 Closure Compiler 的实验成功,我们甚至可以保留许多已弃用的功能,但如果您不使用它们并构建包含 jQuery 的自定义应用程序文件,它们将被自动删除。这将是两全其美的事情。

删除 IE 6、7 和/或 8 支持

这个话题经常出现,所以让我们一次性解决它。人们往往高估了 jQuery 中专门与 IE 相关的代码数量。IE 6 和 IE 7 中的大多数问题也存在于 IE 8 中,因此只要最后一个浏览器仍然拥有可观的桌面市场份额,并且必须得到支持,那么删除对前两个浏览器的支持就不会带来实际的尺寸或复杂性优势。没有人(包括微软本身)喜欢这些“侏罗纪公园”浏览器,但是现在就剥夺对它们的的支持会让许多用户的网站崩溃。

也就是说,我们知道在某些情况下(例如移动浏览器)不需要旧 IE 支持。我们正在研究如何将尽可能多的代码放到一个清晰标记的代码块中,以便那些愿意创建自己的自定义 jQuery 版本的人可以轻松地将其删除。Closure Compiler 也可能可以帮助解决这个问题。但是,我们不确定这是否会节省 gzipped 文件大小,而且它也不会带来性能提升,因为其他浏览器不会执行这些代码路径。

删除 jQuery.browser

我们已经记录了两年左右的时间,我们将 jQuery.browser 移到插件中,许多人在评论中也建议这样做。浏览器嗅探不是查找功能的可靠方法,我们推荐使用类似Modernizr的东西。用于浏览器嗅探的正则表达式很大,压缩效果不好;将其移到插件中将确保只有使用它的人才会为此付出尺寸代价。

您的想法怎么样?

请务必利用这次机会给我们提出您的意见。团队期待着查看您的建议。哦,别忘了尽快试用 jQuery 1.7.1!

关于“jQuery 1.8 版本征求意见”的 108 个想法

  1. @Heinrich Gobl

    节点社区不需要一个无头 jQuery 文件。它没有 DOM,并且它有 ES5。

    模块化 jQuery 很好,但它应该明确地只坚持浏览器环境。

  2. 将动画和队列与对象分离,以便它们可以被用作除链以外的其他东西。创建高级效果或像并行效果一样简单的东西不应该强迫您使用对象绑定链作为基础。

    将效果和队列作为独立对象仍然允许这些链,但为更轻松和更高级的动画使用打开了道路。

  3. charles sistovaris on 说:

    jQuery 不需要改进,它已经很棒了。
    为什么不利用你的才能让像 Backbone(或其他 MVC 相似的框架)更好的框架呢?

  4. 1. 使用异步 (AMD) 模块模块化 jQuery。好处将是巨大的:开发者可以只使用他们实际需要的 jQuery 部分,而无需您创建自定义下载构建器。例如,如果我想进行简单的 DOM 操作而不是动画,我可以有一个非常精简的 jQuery 文件。使用 RequireJS 附带的 AMD 构建工具,您可以获得一个包含您所需 jQuery 部分的单个优化文件。

    2. 更好的移动/触摸事件支持。我希望 jQuery 注册 ontouchend 事件而不是点击,例如,这可以节省我浏览器中的 200 毫秒转换。

    3. 所有动画的 CSS3 过渡/动画。除了作为旧版 IE 的后备方案外,没有必要使用旧方法。CSS3 过渡看起来比 JS 计时器动画好得多,尤其是在移动设备上,因为它们是硬件加速的。

  5. 我们可以解决 jQuery 和 nivoSlider 之间的问题吗?滑块滞后很严重,并且不能完全过渡到下一张图片…有些部分(小方块)被留下来过渡到过渡…我认为我回到了 1.6.4 版本,它没有那么糟糕…但这并不是解决方案。

  6. Madhava Jay on 说:

    1. 模板(例如您停止支持的 MS 插件)
    2. 数据绑定/链接(例如您停止支持的 MS 插件)
    3. 本地存储/WebSQL 抽象层,可能带有模板/数据绑定支持
    4. jQuery 的移动版本,用于与 jQuery Mobile 一起使用,更小,例如 Zepto?
    5. 一些视网膜图像支持,这样您就不需要自己滚动 CSS 类检测和图像交换,以便在 iPhone 4+ 和高 DPI Android 手机上显示视网膜图像。

    继续努力!

  7. gtraxx 说道:

    @Stefano Zoffoli
    jquip 不是一个好主意,如果没有 jquery.css 和 jquery.ajax 函数,使用它有什么意义呢?
    我使用 jQuery、ajax 和 CSS 函数!

  8. Hay Kranen 说道:

    大多数要点已经提出,但无论如何,这是我的清单。

    1) 用于自定义事件的简单发布/订阅机制(.trigger() 太复杂,命名空间很糟糕)
    2) CSS3 动画和转换
    3) 触摸事件
    4) 来自 Underscore.js 的一些更好的内容(pluck、filter)
    5) 简单模板(类似 Mustache),或类似 printf() 的函数
    6) 一个非常简单的 .random() 实用函数(基本上与 PHP 的 rand() 相同)
    7) 一个 URL 解析器
    8) IE<9 HTML5 shim?

  9. Chris Kihneman 说道:

    我一次又一次地看到人们评论想要模块。我只是完全没有明白其中的好处。

    使用 CC 来删除无效代码的举措是我之前从未想到的。在 CC 讨论之前,我可能也会大声要求模块——但现在看来——它并没有解决任何问题。以 jquip 为例——核心、事件、domready、css、ajax。是的,我需要这些(也许不需要 domready——但是的)!我不需要的是它们带来的所有额外方法。我不需要所有 append、appendTo、prepend 等等——我不需要任何像 mousedown、click 这样的 jQuery 别名(如果它们被完全删除,我会很高兴——旁注)——模块系统如何解决这些问题?它做不到——它做不到。

    CC 消除了你所有的担忧,让你专注于完成任务(当然,CC 还需要改进——但听起来他们正在努力。)

    在开发过程中,你可以使用 jQuery 的完整未压缩版本(就像你应该做的那样)——生产时,用 CC 压缩它!发布。完成。

    我希望有一个简单的方法来用其他东西替换 sizzle——它是一个庞然大物——说实话,我从来没有看到它处理所有复杂情况的必要性……我一直很好地使用 ID 和简单的 find(还记得那个 class 吗?)。有这么多选择器引擎——我相信其中许多引擎都愿意作为 jQuery 的一个选择与我们合作(并在他们自己的代码中进行适当的更改以正确连接)。

    如果这一切都实现了,我就可以回到 jQuery 用于移动应用——现在,它太慢了,加载量太大,无法证明其价值。

    你们做得很好——你们干得漂亮!jQuery 万岁!

  10. Xavier Freymuth 说道:

    [en] 一种发展方向是关注页面元素彼此之间的位置。
    浏览器知道如何放置项目,它们可以使用 css3 创建动画,但没有关于对象相对于其他对象的相对位置的内容。
    jquery.jcss_align.js 是一个触及这个问题的插件,但要更进一步,需要集成这种功能。
    [fr] Une piste d’évolution serait de s’occuper des placements relatifs des éléments d’une page les uns par rapport aux autres.
    Les navigateurs savent placer les éléments, ils sauront réaliser des animations avec css3 mais il n’existe rien concernant le placement relatif des objets par rapport aux autres objets.
    jquery.jcss_align.js est un plug-in qui effleure le problème mais pour pousser plus loin il est nécessaire d’intégrer ce type de fonctionnalité.

  11. 最近,jQuery 添加了新的类型,比如 $.Deferred 和 $.Callback。请继续这样做!我非常希望看到 jQuery 集合类型有一个实际的名称和工厂(除了 $,我的意思是)。我并不是反对万能的 $,但如果能以自己的名称公开功能,那就太好了,这样如果我想构建一组新的 HTML 节点或查询 DOM,我可以明确地这样做。

  12. 对我来说
    – 为满足开发人员的不同需求,创建多个版本的 jQuery,就像 Eclipse 一样。
    – 只支持每种类型浏览器的 n(n <= 3)个最新版本。(这很痛苦,迟早会发生。)
    – 创建一个面向 IE 的插件
    – 与一些库或插件集成,比如 TweenLite/color-animate-plugin。

  13. 看来很多人仍在支持 jQuery 的模块化构建。我非常喜欢 Google Closure Compiler 的方法。它是一种非常智能且强大的方法,可以从你的代码中删除冗余内容。

    我希望能够更轻松地扩展某些 jQuery 对象。例如,我现在有一个案例,我想扩展 $.Deferred。问题是,某些状态部分没有存储在 Deferred 对象中,而是存储在闭包内的私有变量中。因此,如果我使用 `$.Deferred()` 作为原型的构造函数创建 `Dfer`,然后创建实例 `d`,一旦我解析 `d`,所有当前和将来的 `Dfer` 实例也会被解析。当然,我可以在构造函数中调用 `$.extend(this, $.Deferred())`,但这并不像直接创建快。

  14. 我希望看到 live()(以及现在的 on())事件适用于任何上下文,而不仅仅是直接选择器。

    在许多情况下,我需要使用更复杂的过滤才能获得需要保持动态的 对象。在这些情况下,我目前必须使用多个 live/on 事件才能将它们正确连接起来。

  15. Bob Belanger 说:

    大小!大小!大小!加载时间!

    JQuery 已经变得相当大了。添加一些插件(JQueryUI 非常大),它会很快失控。

    我那些流量很大的网站面临的最大挑战是速度、大小、加载时间优化。

    我们都想要花里胡哨的功能,但必须有一种更好的方法来提高 DOM 加载时间。现在使用的延迟加载方式效果并不理想,主要原因是优先级只有两个等级。

    (毫无疑问,这是有史以来最好的项目/工具!!!谢谢)

  16. Francesco 说:

    我希望 Jquery 能够自动地在标准动画和 webkit-transformations 之间切换。

    让我解释得更清楚一点。

    如果我在台式机上运行一个 jQuery 动画,效果还不错,但在 iPad 上运行动画还是有点卡顿。
    所以,jQuery 应该能够识别正在运行的系统/浏览器,然后应用正确的动画类型。

  17. 如果能知道元素何时被创建,这样我们就可以在生成 HTML 时执行一个函数。类似于这样:

    $(‘MyTextBox’).on({
    created: function () { 做一些事 }

    目前,livequery 插件似乎可以做到这一点,但我还没有测试过。但如果 jQuery 核心库可以做到这一点……求求你了!!!

  18. Arvind Bhardwaj 说:

    如果 jQuery 可以包含内置的表单验证器,比如电子邮件验证、日期验证等,那就太好了。

  19. Carlos A. 说:

    我在考虑结构:一个非常基础的 jQuery 核心,以及其他所有功能,其他功能将作为插件按需加载(延迟加载)。
    说实话,我喜欢它现在的状态,唯一不方便的是大小,但是……代码大小和功能成正比。

  20. 怎么样把 jQuery 核心代码的大小缩减到比如 MooTools 的大小?对我来说,这将是目前最实用的功能。

    我真的很喜欢 jQuery,它拥有我需要的一切,但有时它会成为我正在开发的网站中最大的文件。

    我知道它是一个功能丰富的巨兽,但其他框架也提供了类似的功能,但文件大小更小。我知道一些反对者会告诉我用那些框架,但那些框架没有 jQuery 的支持和社区。

    所以,我们能不能请您尝试着缩减一下 jQuery 的文件大小/占用的空间呢?

  21. @Darren
    你部分是对的。jQuery 一直在不断增长,这就是为什么一些东西已经被弃用。但你不能仅仅因为人们在使用而删除函数和功能。“去死吧”不是答案,这应该很明显,所以弃用是最好的选择。例如,新事件(un)绑定语法就是这样做的。

    另外,不要高估 jQuery 库的实际大小。任何合适的 web 服务器都会对其进行 gzip/deflate 压缩,只剩下 30KB 左右的数据要推送。我个人认为,对于这样一个完整的库来说,30KB 算不上什么。

  22. 不要放弃对旧版本 IE 的支持!

    虽然支持旧版本的 IE 很痛苦,但很多用户在选择浏览器时别无选择。他们工作的组织决定了哪些软件可以安装在他们的公司机器上。作为为这些用户开发网络应用程序的开发者,我感谢 jQuery 保持了对旧版本 IE 的支持。如果 jQuery 停止支持旧版本的 IE,我将被迫使用其他库。

  23. 我希望在“CSS 中存在类,但元素没有该类”的情况下获取 CSS 属性。
    我认为这可能需要一个 CSS 解析器,比如 JSCSSP。

  24. Robert Johnson 说:

    我希望看到当我在没有网络连接的情况下检索文件时,ajax 响应不会返回失败。通过使用 appcache/manifest 文件,请求失败仅仅因为找不到网络连接已经不再相关。我花了很长时间才弄清楚为什么我设置的 jQuery mobile 在离线模式下无法检索页面。

  25. Jared - Regina Web Design 说:

    我同意放弃对旧浏览器的支持。支持旧浏览器会让人们更不愿意升级。Google 甚至不支持 IE 6,很快也不会支持 IE 7(IE 10 发布后)。此外,微软将在不久的将来推出 IE 自动更新,所以支持旧浏览器只会让 jQuery 变得臃肿。

  26. 请添加对不在 HTML 命名空间,但在 DOM 中的元素的支持(如 svg)。

    创建 svg 元素可以通过与创建 div 元素相同的方式实现,使用 $(‘svg’, namespace)。目前你需要使用 document.createElementNS…

  27. 1. 通过数据选择器。与 $”[href]” 相同,只是数据。
    因为数据可以是 JavaScript 的复杂对象,所以选择器可能会获得一个对象作为选择器的值。

    2. 带参数的选择器。理解它的含义是不可读的
    $(“div[href='”+ myVar +”‘]”);
    相反,我更喜欢字符串格式,就像 c++ PRINTF 或 c# string.format

    3. 在实用程序中添加一个等效于字符串格式函数的函数,就像 c++ PRINTF 或 c# string.format

  28. 我绝对认为你应该考虑放弃对 IE 6 和 IE 7 的支持,但我认为现在仍然有太多人使用 IE 8,因此不能放弃对它的支持。我认为这通常得到 https://w3schools.org.cn/browsers/browsers_explorer.asp 的支持。

    我认为,任何可以从 jQuery 中删除的代码(无论多么少),只要与 IE 6 和 IE 7 有关,都会受到非常热烈的欢迎。现在是最好的时机,因为微软已经正式宣布 IE6 已经死亡,并且在美国只有不到 1% 的人还在使用它。

    此致

  29. 为什么我们要放弃对旧版浏览器的支持?拜托!这可能是使用 jQuery 的第二个最大优势(最大的优势是与 DOM 和动画交互的简单性)。

  30. 我刚读了几条评论,提到要原生添加 Pub/Sub 模块。我完全同意,除了我前几天刚完成了一个 jQuery 的 Pub/Sub 插件的事实。它将在明天下午在我的网站上 (http://joezimjs.com) 提供下载。另外,当插件网站恢复运行时,它也会出现在那里。

    我相信我的 Pub/Sub 实现是在功能和速度之间取得了很好的平衡,它绝对可以满足大多数人的需求。

  31. 虽然我在核心博客中看到了“之前讨论过”的回复,但我仍然希望推动将事件优先级添加到事件中。

    事件优先级的优势在于多模块开发,其中事件可能已经绑定到某个元素,并且通常会先触发。如果我们想让一个较后的条件事件先触发,即使它已绑定,我们也无法做到。理想情况下,当然,我们在开发之前会编写整个接口,包括控制器等等,但是当由于时间等原因无法做到这一点时,事件优先级可以降低代码复杂性,并且在日常工作中提供真正的帮助。

    拜托,再考虑一下。
    (我已经将实现了事件优先级的 jQuery 1.7.1 发送给了 John Resig)

  32. 您好,

    一个检测变量值何时改变的函数。像这样

    var TheObject = new Object();
    TheObject.Property1 = “test”;

    $(TheObject.Property1).trackChange(function () {alert(“it changed”);});

    TheObject.Property1 = “new val”;

    “it changed”!

  33. 请不要删除对旧版浏览器的支持,因为在中国,许多用户仍在使用 IE6。如果 jQuery 不支持 IE6,这意味着超过 33% 的用户将无法浏览使用 jQuery 的网站。中国的程序员将不得不放弃 jQuery。

  34. 首先:很多人抱怨 jQuery 的大小。好吧,现在是 2012 年了,各位。我们现在可以对浏览过的资源使用缓存。缓存 jQuery。加载一次,缓存,每次使用(本地,当然!)缓存文件。

    其次:对旧版浏览器使用一些代码并没有明显的开销,但是使用这些代码违反了任何合理的进步。企业也应该放弃那些旧的垃圾浏览器。迟早他们会这样做。越早越好。

    第三:就我个人而言,我认为现在更多的(现代)事件(例如:滑动、点击、长按、捏合、缩放、旋转)就足够了。

    其余的只是对一个(已经)坚实而成熟的库的自然发展和演变,这个库已经深入我们许多人的内心和思想。

    继续努力!

  35. 现在是 2012 年了,人们不应该再使用 IE6-7 甚至 IE 了。

    说真的,我们每天都在得到更好的库和更好的 Web 功能,这些功能需要最新的浏览器。我个人认为,Web 浏览器应该让你更新,比如你打开它时,你会收到一条消息,说“要继续浏览 Web 的精彩内容,你必须更新你的浏览器”。

  36. Marc Diethelm on said:

    请公开 jQuery.uuid。有时我需要动态地为元素分配一个唯一的 ID。(我不希望为此使用时间戳。计数器也不是解决方案,因为我可能在模块化组件中工作,并且查找有效的增量 ID 会效率低下。)