jQuery 1.8 版本想法征集

发布日期 作者

我们准备进行下一轮社区意见征集,这次是关于 1.8 版本!这是你建议我们如何改进 jQuery 的机会,包括修复、添加、更改或删除内容。

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

感谢大家在我们之前关于如何通过精简来改进 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 中,因此只要最后一个浏览器仍然具有可观的桌面市场份额,并且必须得到支持,那么在删除对前两个浏览器的支持时,在大小或复杂性方面没有真正的好处。没有人(包括微软自己)喜欢这些侏罗纪公园浏览器,但现在就剥夺对它们的 supports 将会破坏许多用户的网站。

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

移除 jQuery.browser

我们已经记录了近两年,我们打算将 jQuery.browser 移到一个插件中,并且一些人在评论中也提出了这个建议。浏览器嗅探不是寻找功能的可靠方法,我们建议使用类似 Modernizr 的东西。用于浏览器嗅探的正则表达式很大,而且压缩效果不好;将其移到一个插件中将确保只有使用它的人需要承担这种大小的代价。

你的想法呢?

请利用这个机会向我们提供你的反馈。团队期待查看你的建议。哦,别忘了尽快尝试一下 jQuery 1.7.1!

关于 “jQuery 1.8 版本想法征集” 的 108 条评论

  1. 将 jQuery 分成多个 js 文件,一个用于 DOM 操作函数,一个用于 ajax,一个用于实用程序,一个用于核心 jQuery(基本 $ 支持)。

    这将允许在浏览器之外的其他环境中使用 jQuery 的部分,例如没有 DOM 的环境,或者允许在 webworkers 中使用 $ajax,以及许多其他用例。

  2. 最重要的是支持 Google Closure Compiler 的高级优化。
    不要移除对旧版浏览器的支持,而是使用条件编译。
    将所有可以移除的内容都放在条件编译块下。

    我喜欢 jQuery,但现在它又胖又丑,是时候通过高级优化来改变它了。

  3. David Svetlik 说:

    现在只是头脑风暴,但如何使用不带参数的 .is() 而不是 “丑陋” 的 get(0) 或 length jQuery 检查?

    所以这样
    if ($(‘#some-element’).get(0)) {}

    将变成这样
    if ($(‘#some-element’).is()) {}
    /* 此外,它返回一个 “真实” 的布尔值,太好了! */

    此外,是否有人已经提到,使用名为 is() 和 not() 的方法,而每个方法执行完全不同的操作,这有点令人困惑?

  4. Cliff Persaud 说:

    我认为内置模板引擎会很有用。我知道 templ() 不会继续发展,但我希望看到一个内置的替代方案。

  5. Anton Smatanik 说:

    首先,移除对 IE 6、7 的支持。这是一个原则问题。

    其次,联系插件开发者,告知他们更改,他们将做好准备并更新代码。换句话说,你可以在插件中添加可用的最大 jQuery 版本。不要被低质量的插件拖后腿!

  6. 在移动设备上,过渡效果(如 show(time)、hide(time)、fadeIn/Out、animate 等)的性能非常糟糕。如果能在这方面取得一些进展,那就太好了。