Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将选中/找到的元素存储在变量中是否会提高性能?

将选中/找到的元素存储在变量中是否会提高性能?
EN

Stack Overflow用户
提问于 2012-05-07 21:38:10
回答 3查看 2.2K关注 0票数 7

我创建了一个jQuery插件来修改我的导航。不幸的是,我必须访问和修改几乎所有的子元素,比如<ul><li><a>等等。然后需要这些元素一到四次。

我应该将它们全部存储在变量中,还是应该在需要时像$('.my-nav').find('li')$('.my-nav').find('li')一样访问它们?

只需25行代码就有5个变量,这似乎是浪费内存。但我不知道为了获得更高的性能,这是不是一个可以接受的折衷方案。

我创建了一个提琴来说明它的含义:http://jsfiddle.net/Yj35Q/2/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-07 21:43:48

缓存你的节点总是很好的实践。您还可以使用http://jsperf.com/进行基准测试

除非要存储大量的DOM树或其他东西,否则您不需要担心变量需要多少存储空间。更相关的是JS引擎定位节点所需的工作量。

编辑

或者更好的是,您可以找到其他人已经创建的现有测试用例

http://jsperf.com/ns-jq-cached/4

票数 8
EN

Stack Overflow用户

发布于 2012-05-07 22:50:29

无论是否使用jQuery,在适当的地方缓存DOM元素无疑都是明智的。

但这个问题让我想,也许我们应该有一个插件来帮助解决这个问题。我到处找都找不到。

所以我很快就写了一个。这是lazy loading jQuery selector..。

代码语言:javascript
运行
AI代码解释
复制
(function($){
    var cachedObjects = new Array();

    $.lazy = function(selector) {
        if (typeof selector != "string" || arguments.length > 1) 
            return $.apply(this, arguments);

        var o = cachedObjects[selector];
        if (o == undefined)
        {
            o = $(selector);
            cachedObjects[selector] = o;
        }

        return o;
    };
})(jQuery);

你会像这样使用它...

代码语言:javascript
运行
AI代码解释
复制
$.lazy('.my-nav').show();

如果我疏忽了什么,请告诉我。但我相信,只要你选择的元素是静态的,而不是动态添加或删除的,这将是很好的选择。

更新

我已经修改了代码以使其更高效。当选择器不是字符串时,我已经在return $(selector)中添加了一行。因此,只有当选择器是字符串时,缓存才会起作用。

更新#2

现在,根据jFriend00的建议,当你不是简单地传递一个字符串时,它就会return $.apply(this, arguments)

票数 4
EN

Stack Overflow用户

发布于 2012-05-07 21:52:40

在同一个函数中,我会将DOM搜索的结果缓存到一个局部变量中,这样就不必在同一个函数中多次执行相同的DOM搜索。对于大多数函数来说,这是不需要的,但是将结果放在一个局部变量中是简单和安全的,所以我认为这是一个好习惯。

我通常不会将DOM节点缓存到全局变量中,因为我尽量避免使用全局变量,而且在特定函数需要时检索DOM节点也很少会造成性能问题。避免在全局变量中使用DOM引用的另一个原因是,如果从DOM中删除了特定的DOM节点,并且您打算对其进行垃圾回收,则如果在全局变量中存在对该节点的引用,则不会对该DOM节点进行垃圾回收,从而可能导致内存泄漏。

在某些情况下,我会重复查找相同的DOM节点(比如在计时器上),将DOM节点缓存到函数闭包中的非全局变量中,然后在本地使用该变量。但是,我发现在某些情况下,这种情况很少见。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10489525

复制
相关文章
WPF 设置元素为 Collapsed 是否会创建此元素
在 WPF 的 XAML 中,如果将某个元素初始的时候设置 Visibility 为 Collapsed 的值,那么意味着这个元素将不会参与布局,就和不存在是一样的。那么这个元素是否会被创建在内存中?是会创建的
林德熙
2020/11/27
1.1K0
jquery在iframe中选中父元素节点
我们在使用如layui的layer弹窗或者在页面上用别的方式打开的iframe中可能会要获取到父页面的某个元素
阿超
2022/08/17
1.9K0
判断元素是否在视窗之内
作为一名前端工程师我们经常需要判断目标元素是否在视窗之内或者和视窗的距离小于一个值(例如 100 px),从而实现一些常用的功能,例如:
IMWeb前端团队
2019/12/04
2.1K0
如何检测一个元素是否在 vector 中
可以使用头文件 <algorithm> 里的方法 std::find, #include <algorithm> #include <vector> vector<int> vec; if (std::find(vec.begin(), vec.end(), item) != vec.end()) do_this(); else do_that();
ClearSeve
2022/02/10
2K0
判断 checkbox 是否选中以及 设置checkbox选中
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154601.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
6.2K0
在Java中如何高效判断数组中是否包含某个元素
原文地址:http://www.hollischuang.com/archives/1269
Java后端技术
2018/08/09
5.6K0
如何提高Linux系统nfs存储的性能
mount的参数对存储的性能有很大的影响。 下面是一些基本的mount参数,大家可以参考。
用户8418197
2021/03/26
5K0
jquery获取checkbox是否选中
在使用jquery的过程中,发现了一个比较特别的属性,那就是 input标签的 checkbox的 是否选中状态
执笔记忆的空白
2020/12/25
3K0
jquery判断数组中是否包含某个元素的值_java判断元素是否在数组中
如果arry数组里面存在”C#” 这个字符串则返回该字符串的数组下标,否则返回(不包含在数组中) -1
全栈程序员站长
2022/11/02
6.4K0
Go 判断元素是否在切片中
如何判断元素是否在切片中,Golang 并没有提供直接的库函数来判断,最容易想到的实现便是通过遍历来判断。
恋喵大鲤鱼
2021/12/06
10.4K0
Go 判断元素是否在切片中
Jquery 判断 checked 是否选中
如果要判断Js中的 checked 是否选中,首先取决于你 引用 的 Jquery 的版本。
White feathe
2021/12/08
2.8K0
C++变量的存储类别 | 判断是否是闰年
在上一节小林讲过,作用域从空间的角度来分析的,分为全局变量和局部变量,在这一节中,小林带着你学习变量的另一种属性,变量在内存中的存在期间,也就是存储期。
小林C语言
2020/12/01
8450
C++变量的存储类别 | 判断是否是闰年
将hex printf输出存储到变量
I have to round off a float to decimal. After rounding off, I should convert this number to hexadecimal. I think I got the round off part okay with round()
iOS程序应用
2022/11/10
1.4K0
Flask session的默认将数据存储在cookie中的方式
一般服务的session数据是在cookie处存储session的id号,然后通过id号到后端中查询session的具体数据。 为了安全,一般session数据都是存储在后端的数据库中。 但是也有其他的存储方式,如下:
Devops海洋的渔夫
2019/12/16
4.6K0
Flask session的默认将数据存储在cookie中的方式
java中如何将嵌套循环性能提高500倍
转载请注明出处https://www.cnblogs.com/funnyzpc/p/15975882.html
上帝
2022/05/10
6680
JQuery 遍历被选中的checkbox元素
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/78819667
泥豆芽儿 MT
2018/09/11
2.3K0
JQuery 遍历被选中的checkbox元素
如何提高 Java 中锁的性能
两个月前向Plumbr公司引进线程死锁的检测之后,我们开始收到一些类似于这样的询问:“棒极了!现在我知道造成程序出现性能问题的原因了,但是接下来该怎么做呢?”
哲洛不闹
2018/09/19
1.1K0
<script>元素在XHTML中的用法
  编写XHTML代码的规则要比编写HTML严格得多,例如如下代码: 1 <script type="text/javascript"> 2 function compare(a, b){ 3 if(a < b) { 4 alert("A is less than B"); 5 } else if(a > b){ 6 alert("A is greater than B"); 7 } els
就只是小茗
2018/03/07
2.7K0
使用js获取选中的dom元素 并改变选中(有序dom)的状态
拿我格子衫来
2023/10/19
5600
使用js获取选中的dom元素 并改变选中(有序dom)的状态
点击加载更多

相似问题

在使用for循环之前,将str.length()值存储在变量中是否会提高Java的性能?

20

压缩是否会提高性能?

12

在子块中声明变量会提高性能吗?

46

将经常使用的字符串定义为变量是否会提高性能?

11

存储在变量中会提高性能吗?而var,let,const也会影响性能吗?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档