Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 隐藏与销毁HTML DOM元素的处理成本_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript 隐藏与销毁HTML DOM元素的处理成本

Javascript 隐藏与销毁HTML DOM元素的处理成本,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,从SPA的角度思考,SPA有很多不同模块的加载/卸载。例如: <body> <div class="container" id="user-landing" style="display:none"> <h2 class="title">User Page</h2> </div> <div class="container" id="home-feed"> <h

从SPA的角度思考,SPA有很多不同模块的加载/卸载。例如:

<body>
    <div class="container" id="user-landing" style="display:none">
        <h2 class="title">User Page</h2>
    </div>

    <div class="container" id="home-feed">
        <h2 class="title">Feed</h2>
    </div>
</body>

用户页
喂
隐藏和显示类似于
$(“#用户登录”).show()
可以很好地工作,但应用程序越大,就越需要注意不要重用其他模块中已经存在的
。类
#ID
,这可能会导致不期望的行为


销毁或取消设置DOM元素可以防止不希望的DOM元素目标,但代价是什么

您可以查看react来评估此成本。据我所知,当您在使用react的单页web应用程序中切换页面时,它将销毁或至少从dom中删除新页面中未使用的所有dom元素。

您可以查看react来评估此成本。据我所知,当您在使用react的单页web应用程序中切换页面时,它将销毁或至少从dom中删除新页面中未使用的所有dom元素。

您更好的选择是介于两者之间,许多其他框架都会这样做。从DOM中删除它,但不要破坏它

要做到这一点,您只需获取对它的引用,然后将其删除。您仍然可以将它保存在一个变量中(因此它不会被销毁),但它也不是DOM的一部分,因此它不会碰到其他类和ID

const someElement = document.querySelector('some-selector');
someElement.parentNode.removeChild(someElement); // remove
大多数框架都有某种缓存,它们设法跟踪所有这些缓存。当它们不应该被渲染时,它们就不会被渲染,但它们仍然在缓存中,以便快速添加回来


至于性能,除了在RAM开始成为一个巨大问题的极端情况下,保持它的缓存和分离总是比销毁和重新创建要好。

您更好的选择是介于两者之间,这是许多其他框架所做的。从DOM中删除它,但不要破坏它

要做到这一点,您只需获取对它的引用,然后将其删除。您仍然可以将它保存在一个变量中(因此它不会被销毁),但它也不是DOM的一部分,因此它不会碰到其他类和ID

const someElement = document.querySelector('some-selector');
someElement.parentNode.removeChild(someElement); // remove
大多数框架都有某种缓存,它们设法跟踪所有这些缓存。当它们不应该被渲染时,它们就不会被渲染,但它们仍然在缓存中,以便快速添加回来


至于性能,除了在RAM开始成为一个巨大关注点的极端情况下,保持它缓存和分离总是比销毁和重新创建要好。

如果您有类或ID冲突,这将是一个问题。我认为他是指,例如,如果您有一个SPA,包含多个“页面”,并且每个页面都包含一个“\header”元素。它们并不真正冲突,因为它们不会同时显示,但如果您只是隐藏元素,它们会发生冲突。对于性能问题:度量。然后检查你的测量是否正确。然后再量一些。通常,这在很大程度上取决于精确的工作负载。如果您有类或ID冲突,则无论哪种方式都会有问题。我认为他的意思是,例如,如果您有一个包含多个“页面”的SPA,并且每个页面都包含一个“#页眉”元素。它们并不真正冲突,因为它们不会同时显示,但如果您只是隐藏元素,它们会发生冲突。对于性能问题:度量。然后检查你的测量是否正确。然后再量一些。通常,这在很大程度上取决于精确的工作量。