gpt4 book ai didi

javascript - View 转换后浏览器中的旧 View 或 DOM 元素会发生什么情况?

转载 作者:行者123 更新时间:2023-11-29 22:12:16 25 4
gpt4 key购买 nike

例如,我的 gwt-app 包含两个 View ,并通过 appController().goTo(place) 从 view1 导航到 view2。ClientFactory 持有 View 对象。

ClientFactoryImpl  implements ClientFactory{

public View1 getView1(){
if(view1 == null){
view1 = new ViewImpl1();
}
return view1;
}

public View2 getView2(){
if(view2 == null){
view2 = new ViewImpl2();
}
return view2;
}
}

view1 的所有 dom 元素都从浏览器中消失,它加载了 view2 的新 dom 元素。如果我现在在 view2 上并且我按下后退按钮,它将返回到 view1 并且 view1 具有与以前相同的状态。我的问题是导航到 view2 后 view1 会发生什么。view1 的所有这些 DOM 元素(如按钮、列表等)会发生什么。他们在哪里?它说 DOM 元素的创建很昂贵,但是当我导航回 view1 时,view1 的 DOM 元素必须再次呈现到 DOM 浏览器中,或者我理解错了?导航后所有这些小部件(在 DOM 元素末尾)在后台发生了什么,以及它们如何在导航回来后返回到 dom。如果每次 ClientFactory 都返回一个新的 View 对象实例,有什么区别?请帮忙!

抱歉我的英语不好,希望我的问题很清楚。

最佳答案

因为您将 ViewImpl1ViewImpl2 实例作为延迟初始化的单例保存在您的 ClientFactory 中,所以每个小部件的 DOM 元素将保存在内存。

向/从另一个小部件添加/删除小部件,然后将其 DOM 元素附加到/从父小部件的 DOM 元素分离,并最终附加到文档。

如果您将 ClientFactory 更改为始终返回一个新实例,您将始终需要创建 DOM 元素,而不是重新使用它们。根据 View 的复杂性,这会对您的应用程序性能产生负面影响(尽管在内存中保留大 View 也会消耗过多内存,从而降低应用程序的速度,尤其是在资源受限的设备,例如手机/平板电脑;这是一种权衡,您必须找到正确的平衡点:将最有可能接下来使用的屏幕缓存/保存在内存中)。

以上所有假设架构类似于 http://www.gwtproject.org/doc/latest/DevGuideMvpActivitiesAndPlaces.html

关于javascript - View 转换后浏览器中的旧 View 或 DOM 元素会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17459768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com