- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 HTML5 构建我的第一个网络应用程序,专门针对 iPhone。
由于我对此很陌生,所以我正在尝试养成一些良好的编码习惯、遵循最佳实践、优化性能并最大限度地减少资源受限 iPhone 上的负载。
我需要经常做的事情之一......我有很多 div(每个都有一个唯一的 id),我经常更新(例如,使用 innerHTML)或修改(例如,使用 webkit 的样式属性)转换和转换)。
一般来说,每次我需要一个 div 的句柄时,我最好使用 getElementByID,还是应该在开始时将对我访问的每个 div 的引用存储在“全局”变量中?
(我在引号中使用了“global”,因为我真的只有一个真正的global变量——它是一个将我所有的“global”变量存储为属性的对象)。
我假设每次使用 getElementByID 都必须有一些开销,因为该函数需要遍历 DOM 以找到 div。但是,我不确定此功能的工作量或效率如何。
使用全局变量来存储每个元素的句柄必须消耗一些内存,但我不知道这些引用是否只需要少量的 RAM,或者更多。
那么 - 哪个更好?或者,这两个选项是否都消耗了如此微不足道的资源,我应该只担心哪个会产生更易读、更可维护的代码?
非常感谢!
最佳答案
"In general - am I better off using getElementByID each time I need a handle to a div, or should I store references to each div"
当您调用 getElementById
时,您是在要求它执行一项任务。如果您在使用相同的参数调用相同的方法时不期望得到不同的结果,那么缓存结果似乎是有意义的。
"I assume using getElementByID each time must have some overhead, since the function needs to traverse the DOM to find the div. But, I'm not sure how taxing or efficient this function is."
尤其是在现代浏览器中,它非常快,但不如查找全局对象的属性快。
"Using global variables to store handles to each element must consume some memory, but I don't know if these references require just a trivial amount of RAM, or more than that."
微不足道。它只是一个指向已经存在的对象的指针。如果您从 DOM 中删除该元素而不打算再次使用它,那么您当然会想要释放对它的控制。
"So - which is better? Or, do both options consume such a trivial amount of resources that I should just worry about which produces more readable, maintainable code?"
视情况而定。如果您只获取它几次,那么您可能会发现不值得将其添加到您的全局对象中。获取相同元素的次数越多,缓存它的意义就越大。
Here's a jsPerf test比较。当然,DOM 的大小、遍历变量范围的长度以及全局对象中属性的数量/深度都会起到一定的作用。
关于javascript - HTML5 网络应用的最佳实践 : using getElementByID or storing a reference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963449/
我在优化 JOIN 以使用复合索引时遇到问题。我的查询是: SELECT p1.id, p1.category_id, p1.tag_id, i.rating FROM products p1
我有一个简单的 SQL 查询,我正在尝试对其进行优化以删除“使用位置;使用临时;使用文件排序”。 这是表格: CREATE TABLE `special_offers` ( `so_id` int
我有一个具有以下结构的应用程序表 app_id VARCHAR(32) NOT NULL, dormant VARCHAR(6) NOT NULL, user_id INT(10) NOT NULL
此查询的正确索引是什么。 我尝试为此查询提供不同的索引组合,但它仍在使用临时文件、文件排序等。 总表数据 - 7,60,346 产品= '连衣裙' - 总行数 = 122 554 CREATE TAB
为什么额外的是“使用where;使用索引”而不是“使用索引”。 CREATE TABLE `pre_count` ( `count_id`
我有一个包含大量记录的数据库,当我使用以下 SQL 加载页面时,速度非常慢。 SELECT goal.title, max(updates.date_updated) as update_sort F
我想知道 Using index condition 和 Using where 之间的区别;使用索引。我认为这两种方法都使用索引来获取第一个结果记录集,并使用 WHERE 条件进行过滤。 Q1。有什
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
mysql Ver 14.14 Distrib 5.1.58,用于使用 readline 5.1 的 redhat-linux-gnu (x86_64) 我正在接手一个旧项目。我被要求加快速度。我通过
在过去 10 多年左右的时间里,我一直打开数据库 (mysql) 的连接并保持打开状态,直到应用程序关闭。所有查询都在连接上执行。 现在,当我在 Servicestack 网页上看到示例时,我总是看到
我使用 MySQL 为我的站点构建了一个自定义论坛。列表页面本质上是一个包含以下列的表格:主题、上次更新和# Replies。 数据库表有以下列: id name body date topic_id
在mysql中解释的额外字段中你可以得到: 使用索引 使用where;使用索引 两者有什么区别? 为了更好地解释我的问题,我将使用下表: CREATE TABLE `test` ( `id` bi
我经常看到人们在其Haxe代码中使用关键字using。它似乎在import语句之后。 例如,我发现这是一个代码片段: import haxe.macro.Context; import haxe.ma
这个问题在这里已经有了答案: "reduce" or "apply" using logical functions in Clojure (2 个答案) 关闭 8 年前。 “and”似乎是一个宏,
这个问题在这里已经有了答案: "reduce" or "apply" using logical functions in Clojure (2 个答案) 关闭 8 年前。 “and”似乎是一个宏,
我正在考虑在我的应用程序中使用注册表模式来存储指向某些应用程序窗口和 Pane 的弱指针。应用程序的一般结构如下所示。 该应用程序有一个 MainFrame 顶层窗口,其中有几个子 Pane 。可以有
奇怪的是:。似乎a是b或多或少被定义为id(A)==id(B)。用这种方式制造错误很容易:。有些名字出人意料地出现在Else块中。解决方法很简单,我们应该使用ext==‘.mp3’,但是如果ext表面
我遇到了一个我似乎无法解决的 MySQL 问题。为了能够快速执行用于报告目的的 GROUP BY 查询,我已经将几个表非规范化为以下内容(该表由其他表上的触发器维护,我已经同意了与此): DROP T
我是一名优秀的程序员,十分优秀!