jQuery 符合 OpenAjax 标准
近几个月来,一项新计划正在形成,旨在标准化现有的各种 Ajax 和 JavaScript 代码库。一些公司实体已联手起草新的OpenAjax 标准(包括 IBM、Adobe、Opera 和 Mozilla)。
今天,我们宣布了一个新插件,您可以使用它使 jQuery 符合 OpenAjax 标准。通过这样做,jQuery 成为首批使其代码库符合新标准的项目之一。
目前,符合标准的要求相对简单,但仍然非常重要。相关规则可以概括如下
- 所有库都必须向主 OpenAjax 库注册自身(名称、版本和命名空间)。
- 所有库都必须注册它们使用的任何全局变量(在 jQuery 的情况下,它是“jQuery”,并且可以选择“$” - 默认情况下只包含“jQuery”)。
- 任何尝试注册“onload”或“onunload”处理程序都必须通过 OpenAjax 库。在 jQuery 的情况下,如果您执行:$(window).load(function),并且包含了 OpenAjax,jQuery 将 defer to OpenAjax 的解决方案。
- 库不得干扰其他库遍历 HTML DOM 文档的能力。
您可以查看jQuery 的符合标准结果,以验证它是否确实通过了测试套件。
如果您希望将 jQuery 与其他支持 OpenAjax 的库一起使用,该过程相当简单。
步骤 1 下载jQuery OpenAjax 插件 的副本到您的服务器。
步骤 2 在包含 jQuery 之后,将该库包含到您的站点中。
<script src="jquery.js"></script> <script src="jquery.openajax.js"></script>
确保在包含官方 OpenAjax 库本身之后,包含 jQuery 和 jQuery OpenAjax 插件。
就是这样!jQuery 现在将与 OpenAjax 核心库愉快地协同工作。
需要注意的是,目前,jQuery 并非OpenAjax Alliance 的一部分,但我们正在申请加入,并渴望开始积极参与。
我认为您应该避免在插件中硬编码 jQuery 版本号
OpenAjax.registerLibrary(“jQuery”, “https://jqueryjs.cn/”, “1.1”);
插件应该在注册 jQuery 到 OpenAjax 库之前检查是否已加载 JQuery,并使用其版本字符串
OpenAjax.registerLibrary(“jQuery”, “https://jqueryjs.cn/”, JQuery.fn.jquery);
这个“新计划”乍一看似乎是个好主意。然而,实际上,它看起来更像是一个糟糕的库,它将所有最糟糕的常见问题解决方案塞进一个臃肿且编写糟糕的 JavaScript 文件中。它更喜欢 attachEvent 而不是 addEventListener。它的“标记扫描器”实际上是一个缓慢而笨重的 DOM 遍历器。它创建了许多毫无意义的全局变量,尽管它声称会阻止这种情况。我想喜欢它,但它太糟糕了,我无法接受。我是不是遗漏了什么?
到目前为止,我还没有感到兴奋!:-( 对我们来说,作为 jQuery 用户,有什么好处?我的意思是,为什么我们应该追求 OpenAjax 兼容性?
据我了解,它会使我们的 jQuery 安装速度变慢,因为它在某些方面依赖于 OpenAjax 函数。
@Dean:我们最近收到了很多关于 OpenAjax 兼容性的询问,特别是来自想要获得互操作性保证的企业用户。我们将其创建为一个插件,以便这些用户可以在此设置中使用 jQuery,但不需要 OpenAjax 兼容性的用户可以继续使用 jQuery 的当前形式。
@Dominik:它是一个插件,因此如果您处于需要遵守 OpenAjax 标准的情况,我们现在提供了这种选择。如果不是,您可以继续像往常一样使用 jQuery。
虽然我没有看到实际的库,因此无法发表评论,但我可以评论这个所谓的“Open”-Ajax 计划的价值(或缺乏价值)。充其量,这似乎是在试图修复一个没有坏掉的东西,最坏的情况下,这是对开放标准施加企业控制的掩盖尝试。坦率地说,我很惊讶微软本身没有带头。
@Nate:我明白你的意思。但这确实很难,因为你既想帮助需要这种兼容性的人,又想确保项目能够朝着你想要的方向发展。我认为我们在这里取得了很好的平衡。
嗯……就像这里的一些人一样,我并不完全支持 OpenAjax。
它有优点也有缺点。
优点是企业开发者需要互操作性,而 OpenAjax 旨在做到这一点。这应该有望为 jQuery 带来更多用户。
缺点是我认为其中一些东西不太好。我将引用 Dean Edwards 的分析,因为他提出了与我心中所想相同的想法。不过,它是一个插件,因此不需要包含和使用它。
总而言之,John 和他的团队确实努力将 jQuery 推向更广阔的领域,正如 Ext 公告所证明的那样,所以干得漂亮!
我不明白大家在抱怨什么。它是一个插件。如果你需要它,就使用它,如果你不需要,就不要使用它。
这就是使 jQuery 如此强大的原因,因为它能够通过插件添加类似的东西,而不会触及任何核心代码。
Tony,你可以使用所有现有的 JS 框架“添加类似的东西”。jQuery 并不是唯一能做到这一点的,甚至也不是最擅长这一点的。
如果你不明白大家在抱怨什么,我建议你研究一下 OpenAjax 并形成自己的看法。
我担心的是,“标准”距离稳定还有很长一段时间,将来会添加更多要求,这将使遵守标准变得更加困难,并且会带来更多僵化。这显然不利于 jQuery 整体发展。如果将来 jQuery 核心代码没有任何让步,那么就不会有问题,但这真的是“拭目以待”的情况。
@All:我已经将我对这件事的看法发布在这里
http://ejohn.org/blog/thoughts-on-openajax/
对不起,但我无法将它控制在 1400 字以内 ;-)
@Dominik: 此插件不会影响您的 jQuery 代码的速度。您甚至不需要使用此插件(只有在您倾向于使用 OpenAjax Hub 并让 jQuery 连接到它时,才需要包含它)。目前,我还没有看到将此代码包含在 jQuery 核心中的理由。