哪个更好 - Ext.get() 或 document.getElementById()

Which is better - Ext.get() or document.getElementById()

本文关键字:document getElementById get 更好 Ext      更新时间:2023-09-26

Ext.get()document.getElementById()在性能方面有什么区别?Ext.get()会不会因为内部调用document.getElementById()而变慢?或者使用Ext.get()有什么特定的优势吗?

Ext.get

相对于 getElementById 的主要优势在于它返回了一个 Ext.Element 实例。此实例不仅包含 getElementById 将为您提供的 DOM 节点引用,而且还显着扩展了它 - 提供了一套方便的方法、事件规范化和消除跨浏览器差异。

从表面上看,getElementById 可能比 Ext.get 有一些微小的速度增益,只是在进入相同的基本 DOM 调用之前少了一个函数。但是,就整体性能而言,检索后对元素执行的操作可能比检索本身产生更大的影响。手头有Ext.Element包装器可能会被证明是非常有益的。

您可能还想看看Ext.fly。此方法类似于 Ext.get,不同之处在于它向您返回一个单例 Ext.Element 实例。如果您需要存储元素以供以后使用,那将没有任何好处,但是如果您正在对唯一的DOM节点进行简单的一次性操作,它可能比Ext.get便宜。

document.getElementById()是原生JavaScript,因此会比Ext.get()

现在为什么Ext.get()在那里,

document.getElementById()返回一个 DOM 元素,而Ext.get()返回一个适合链接目的的 Ext 对象。

这也是jQuery有$("#elm_id")的原因。请注意,Ext.get()也更容易输入:)

Ext.get()允许使用String ID,现有的HTMLElement或Ext.Element - 所以它更灵活一些。 document.getElementById()只接受字符串 ID。

也就是说,如果它满足您的需求,我会使用document.getElementById()。 它是浏览器原生的,应该快一点 - 而且你少了一个将自己链接到特定JavaScript框架的调用。

在性能方面,原生JS函数总是会更快。

但是,我并不是说不使用JS库,它们很棒,因为它们:

  • 减少编写代码的时间
  • 它使您的代码更具可读性
  • 您编写的代码更少(减少文件大小和下载时间(

最后,也许您甚至可以节省时间,因为更少的代码意味着更快的下载速度,在某些情况下,它甚至可以击败性能。

所以是的,使用一个而不是另一个是一样的,因为一方面您可以通过性能节省时间("document.getElementById(("(,另一方面您可以减小文件大小和下载时间("Ext.get(("(。

您可以同时使用两者,并且不应有任何明显的区别。

正如其他人在这里逃避的那样,使用的方法取决于需要,如果你只是想出于一些非 Ext 目的获取对 dom 元素的引用,你也可以使用本机函数,但如果你打算在 Ext 上下文中对返回的对象执行操作,那么 Ext.get 将返回一个提供其他方法的元素引用。

Ext.get

是 Ext.ComponentManager.get 的简写,虽然它是对库函数的调用并且效率可能较低,但应该注意的是,Ext.Element 上有 ~180 种可用的方法,所以如果你需要这些,可能值得包括包装器调用。

正如 owlness 所提到的,Ext.fly(( 是在您需要对元素执行单个函数时设计的,例如。 Ext.fly("myDiv").hide();而 Ext.get(( 适用于需要获取对元素的引用以供以后使用时,例如。 var something = Ext.get("myDiv");也许something.sort(); something.badger(); return something;

我不熟悉 Ext 库,但对于 vanilla Javascript,只有少数几种方法可以获取特定元素;您可以通过其 ID 获取它,在通过标签名称获取所有元素后搜索它(我相信这就是 JQuery 通过类名获取元素的方式(,或者,HTML5 新手,通过类名获取元素。如果您获得创意;),还有其他几种方法仅通过 ID 获取它是最快的,假设您没有保存本地引用。

所以,如果你要做的就是获取一个元素,而不做任何 Ext.js 通过该函数调用所做的工作,那么 vanilla Javascript 会快得多。