这更像是一个风格和偏好的问题而不是任何事情,尽管可能还有性能方面的考虑因素。
如果你正在使用一个框架(比如为了参数说jQuery,虽然它可以是任何框架),你需要编写一个新函数。这是一个简单的功能,您可以在不使用框架的情况下轻松完成它。
无论如何使用框架是否有优势,因为它已经加载到浏览器的内存中,有一个易于访问的DOM映射等等?或者,普通的js总是会解析得更快,因为它是“原始的”并且不依赖于框架?
或者仅仅是品味问题?
答案 0 :(得分:7)
答案很大程度上取决于你要完成的工作。通常,如果使用框架来实现可以使用“vanilla”JavaScript实现的功能,则可以保证至少对函数开销造成轻微的性能损失。这种性能损失通常是名义上的,并且在考虑到框架的其他优点时(开发速度,代码更清晰,易于维护,可重用的代码等)可以忽略不计。
如果你必须拥有最有效的代码,那么你应该尝试编写高度优化的纯JavaScript。如果像在大多数现实场景中一样,您并不关心性能差异的几毫秒,那么请坚持使用Framework来保持一致性。
答案 1 :(得分:3)
当您使用纯JS解决问题而不是让外部代码为您执行此操作时,总会有一些东西需要学习。从长远来看,它更易于维护,因为它是您的代码。它不会改变。你知道它的作用。这就是解决自己问题的价值真正发挥作用的地方。如果您对MDC,MSDN和ECMAScript spec进行研究,则跨浏览器脚本编写变得更容易处理。当然,微软有他们自己的想法和他们自己的DOM,但这就是乐趣(阅读:挑战)。
纯JS中的跨浏览器脚本确实提高了您的解决问题的能力以及您对语言的理解。如果仍然存在让你感到困惑的事情,那么jQuery可以融入其中并弥合心理差距,可以这么说。在豪华车中驾驶是很棒的,但是如果你不知道如何在轮胎变平时更换轮胎有什么用呢?最好的jQuery开发人员是那些了解JavaScript并知道何时使用jQuery以及何时使用普通JS的人。
有时,你只需卷起袖子做一些努力工作。 所有没有jQuery插件,jQuery无法隐藏各种浏览器必须提供的所有怪癖。使用自己的代码完成工作是非常有益的,即使你不得不竭尽全力使其工作。
使用许多不同的工具来完成单一任务是完全可以接受的。您只需知道何时何地使用它们。
答案 2 :(得分:1)
根据我对jQuery的理解,它实际上并没有在内存中维护dom的地图,只是有跨浏览器方法来走dom。某些浏览器中的某些东西在某些浏览器中会比其他浏览器更快(例如,Firefox中基于类的选择器将比IE中更快,因为IE没有getElementsByClassName和Firefox的内置函数)。如果您不需要框架方法来执行操作,我会说继续使用本机JS,因为这通常是您选择框架将使用的。
答案 3 :(得分:1)
我会说用框架来做,只是因为它会在项目中带来一致性。如果你在任何地方使用框架,即使是小功能,它也会更容易维护。
至于另一个因素,它实际上取决于你想要做什么。
答案 4 :(得分:0)
我一直在研究一个重量级的项目。我发现几乎每次我的代码中都有一个跨浏览器的bug,它就在我有这样代码的地方:
var element = $(selector);
// lots of code ...
element[0].someVanillaOperation();
并且所有浏览器中的vanilla都不完全相同。我喜欢jQuery的是(大多数时候)它隐藏了浏览器差异,它的功能在它们之间的工作方式相同。
答案 5 :(得分:0)
如果您按ID选择元素,那么普通Javascript会更快。但是,它不提供jQuery所带来的任何选择细节 - 例如,在一次调用中按类选择多个元素。
看看这个链接:http://www.webkit.org/perf/slickspeed/运行速度测试。它是jQuery的旧版本,但原始速度方面的结果不言而喻。
就个人而言,我倾向于将jQuery用于所有内容 - 它使代码更加清晰,而且它几乎不需要跨浏览器的JS支持问题,这在我的书中是值得的。