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

标签 javascript gwt dom

例如,我的 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 元素。 如果 iam 现在在 view2 上并且按下后退按钮,它将返回到 view1 并且 view1 具有与之前相同的状态。 我的问题是导航到 view2 后 view1 会发生什么。 view1 的所有这些 DOM 元素(如按钮、列表等)会发生什么。他们在哪里? 它说创建 DOM 元素的成本很高,但是当 iam 导航回 view1 时,view1 的 DOM 元素必须再次渲染到 DOM 浏览器中,还是我理解错误? 导航后,所有这些小部件(在最后的 DOM 元素处)在后台发生了什么,以及它们在导航回来后如何返回到 dom。 如果每次 ClientFactory 都会返回一个新的 View 对象实例,那么区别在哪里? 请帮忙!

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

最佳答案

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

向/从另一个小部件添加/删除小部件,然后将其 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/

相关文章:

javascript - three.js 如何制作纹理 "generated"纹理坐标,如 blender 循环

javascript - "Cocos2d-Javascript"和 "Cocos2d-x html5"哪个更适合HTML5开发?

java - GWT依赖的解释

java - 将 XML 格式保存为字符串而不是文件

javascript - 如何使用表单编辑 react 中的状态

javascript - 使用 javascript 单击 html 按钮

java - 在 GWT 中捕获异常

与 GWT 一起使用的 Json <-> Java 序列化

javascript - 为什么只有部分 JSON 数据而不是全部发送到 DOM?

javascript - 使用 jQuery 创建一个元素并设置其属性