【发布时间】:2011-07-19 04:17:35
【问题描述】:
在 Chrome 扩展中使用 jQuery 作为 JavaScript 库是否明智? jQuery 和其他 DOM 库旨在隐藏浏览器之间的差异,由于我只针对 Chrome,我应该使用它吗?
【问题讨论】:
标签: javascript jquery google-chrome google-chrome-extension
在 Chrome 扩展中使用 jQuery 作为 JavaScript 库是否明智? jQuery 和其他 DOM 库旨在隐藏浏览器之间的差异,由于我只针对 Chrome,我应该使用它吗?
【问题讨论】:
标签: javascript jquery google-chrome google-chrome-extension
没有理由不在您的扩展页面之一(背景、弹出窗口、选项等)上使用 jQuery。不过,您应该始终使用本地 jQuery 副本,而不是通过 http 加载远程托管的副本。
如果可能的话,我建议不要将 jQuery 作为内容脚本注入。如果您只需要一些简单的选择器或事件侦听器,那么在每次访问页面时注入大约 100kb 的 js 代码就有点过头了。
【讨论】:
document_idle(针对页面速度进行了优化)我认为频繁加载是可以的。如果您将 run_at 覆盖用于任何其他注入点,我同意避免不必要的负载很重要。
我将它用于我的 Chrome 扩展程序,我认为它非常聪明。 jQuery 不仅仅是隐藏差异。它充满了使您能够更快、更健壮地编写代码的功能。有大量的扩展可以让你扩展你的脚本。我认为不使用它会伤害到你自己!
【讨论】:
除了更快地编码和“不重新发明轮子(不必要地)”之外,有时您可能需要处理除 Chrome 扩展之外的其他内容。
jQuery 使您可以更轻松地在其他平台或不同情况下重用该工作。
最后,通过使用标准库,其他人将能够更轻松地:帮助、改进或仅仅信任代码。 (如果它好的话,它不会永远只属于你。)
【讨论】:
不,你不应该在 Chrome 扩展中使用 jQuery。
jQuery 相当大,其中绝大多数是对其他浏览器的支持,您不必在扩展中关心这些。
例如,您根本不需要 Sizzle 引擎(使用 document.querySelector),尽管这在 IE6-8 中确实很有价值。您不需要标准化的事件处理程序,因为您根本不支持 IE 或 Opera(使用 element.addEventListener)。当Chrome supports Promise natively 时,你不应该需要jQuery's deferred 实现。当你有fetch 时,你不需要$.ajax。有lots more。
此外,jQuery 不支持很多现代功能,例如您不能使用passive event handlers 或异步加载脚本(它是doesn't even support defer)。
正如当前选择的答案还指出:jQuery 的注入成本很高。值得用最少的代码优化到您真正需要的内容。
作为一般规则,任何工具包扩展(jQuery、Underscore 等)总是在没有它们的情况下开始,只有在你发现需要它们时才引入它们。如果您确实发现需要一个框架,请考虑利用新功能(您可以依赖 Chrome 中的功能)的更现代的框架,而不是那些旨在标准化浏览器之间代码的框架。准确地考虑一下您从框架中需要的是什么——如果只是您了解并喜欢 jQuery,那么很好(如果您/您的团队学习新事物的成本很高,那么熟悉可以成为一个理由)但您应该注意该决策中相关的注入和执行成本。
jQuery 是一个非常优秀的工具包,得到了广泛的支持,但它并不是仅用于 Chrome 扩展的正确工具。
【讨论】: