哪个更好 - Ext.get() 或 document.getElementById()
Which is better - Ext.get() or document.getElementById()
Ext.get()
和document.getElementById()
在性能方面有什么区别?Ext.get()
会不会因为内部调用document.getElementById()
而变慢?或者使用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 会快得多。
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 如何用更合适的内容替换document.write
- document.styleSheets不返回任何内容
- jQuery document.ready not working
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- reactjs this.refs vs document.getElementById
- 如何通过adf中的document.getElementById获取inputText字段值
- window.opener.document在ie中不起作用
- contentWindow.document.body is null
- document.applet.method在Mounatin Lion上抛出safari 6+JDK7异常
- document.getElementById(“st”).click();不起作用
- $(document).height和$(window).heaght都返回相同的值-使用的是正确的doctype
- jQuery document.ready停止代码
- document.getElementById并使用id名称
- 使用jQuery 1.8.1准备好多个$(document).是否有任何开销
- document.getElementById在js中不起作用
- document.getElementById.style.backgroundImage not working
- 停止对document.ready函数的重定向/刷新
- 是否可以 document.getElementsByTagName('head')[0] ever 返回 null