Javascript 隐藏与销毁HTML DOM元素的处理成本
从SPA的角度思考,SPA有很多不同模块的加载/卸载。例如: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
<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,并且每个页面都包含一个“#页眉”元素。它们并不真正冲突,因为它们不会同时显示,但如果您只是隐藏元素,它们会发生冲突。对于性能问题:度量。然后检查你的测量是否正确。然后再量一些。通常,这在很大程度上取决于精确的工作量。