16

像许多人一样,我通过学习 jQuery 来学习 JavaScript。

最近我一直在替换以下内容:

$(this).attr('title')this.title

$(this).attr('id')this.id

$(this).val()this.value

$(this).parent()this.parentNode

$(this).attr('class')this.className

我的代码不仅更干净,而且在技术上更快。

  1. 这种类型的减少是否可以接受和鼓励?

  2. 我应该在原始纯 JavaScript 而不是 jQuery 中做任何其他常见的做法吗?

  3. 这种类型的简化主义是否存在任何潜在的跨浏览器问题?

4

3 回答 3

6

虽然使用本机 Javascript 函数通常比其 jQuery 对应函数更快,但它确实使您面临使用它们时可能出现的任何浏览器兼容性问题。 this.value这不太可能导致问题,但其他类似的属性/功能可能不适用于所有浏览器。使用像 jQuery 这样的框架意味着您不必处理或担心这些事情。

如果性能是一个问题,我只会使用纯 Javascript,即你有很多紧密的循环和重复的操作。

于 2012-08-03T15:57:10.813 回答
4

我建议尽可能使用 DOM 属性。几乎所有这些都不会造成任何问题,性能会提高,并且您对 jQuery 的依赖会减少。例如,对于像checked.

如果您对某个特定属性有任何疑问,您可以查看 jQuery 源代码,看看它是否对该属性有任何特殊处理,并将其视为学习练习。

于 2012-08-03T16:24:20.087 回答
2

虽然许多人拒绝这样的说法,但我也观察到避免/最小化 jQuery 的使用可以产生明显更快的脚本。避免重复/$()特别是不必要的;而是尝试做一次事情,例如a = $(a);

我注意到的东西特别昂贵$(e).css({a:b})

Google 优化的Closure Compiler据说也可以内联这些简单的函数!

事实上,它带有一个相当大的库(闭包库),它提供了大多数跨浏览器兼容性的东西,而没有引入一个全新的概念。

需要一点时间来适应在完全优化模式下导出变量和函数的闭包方式(所以它们不会被重命名!)。但至少在我的情况下,生成的代码非常好而且很小,而且我敢打赌它已经得到了一些进一步的改进。

https://developers.google.com/closure/compiler/

于 2012-08-03T16:45:52.767 回答