美文网首页
117.深度学习qiankun-快照沙箱

117.深度学习qiankun-快照沙箱

作者: wo不是黄蓉 | 来源:发表于2022-11-01 22:37 被阅读0次
深度学习qiankun-快照沙箱.png
原理,通过控制属性的激活和失效达到效果。
第一次,当应用激活时用一个变量windowSnapshotcopy window上的属性生成快照,此时modifyPropsMap被修改的属性上面没有记录

当应用失活时对比window上的属性和copy_window上的属性是否有区别,有区别说明有更新,用modifyPropsMap记录这些属性,然后使用windowSnapshot 恢复window环境

第二次,当应用激活时用一个变量copy window上的属性生成快照,此时modifyPropsMap不为空,将修改过的属性再添加到window上即可

简易版实现:

function iter(obj, callbackFn) {
  for (const prop in obj) {
    if (obj.hasOwnProperty(prop) || prop === "clearInterval") {
      callbackFn(prop);
    }
  }
}
//快照沙箱
class SnapshotSandbox {
  windowSnapshot = null; //记录快照属性
  sandboxRunning = null; //标识是否使用沙箱
  modifyPropsMap = {}; //记录被修改过的属性

  active() {
    this.windowSnapshot = {};

    //生成快照
    for (const prop in window) {
      if (window.hasOwnProperty(prop) || prop === "clearInterval") {
        this.windowSnapshot[prop] = window[prop];
      }
    }
    //恢复window环境
    Object.keys(this.modifyPropsMap).forEach((p) => {
      window[p] = this.modifyPropsMap[p];
    });
    this.sandboxRunning = true;
  }

  inactive() {
    this.modifyPropsMap = {};

    iter(window, (prop) => {
      //window上属性和快照上属性不一致
      if (window[prop] !== this.windowSnapshot[prop]) {
        //记录被修改属性
        this.modifyPropsMap[prop] = window[prop];
        //将window所有属性恢复为之前copy的window属性
        window[prop] = this.windowSnapshot[prop];
      }
    });

    this.sandboxRunning = false;
  }
}

let snapshotSandBox = new SnapshotSandbox();
snapshotSandBox.active();
window.app = "vue2";
console.log("get app1:", window.app); //vue2
snapshotSandBox.inactive();
console.log("get app2:", window.app); //undefined
snapshotSandBox.active();
console.log("get app3:", window.app); //vue2
snapshotSandBox.inactive();

源码实现

相关文章

  • 117.深度学习qiankun-快照沙箱

    原理,通过控制属性的激活和失效达到效果。 第一次,当应用激活时用一个变量 copy window上的属性生成快照,...

  • 118.深度学习qiankun-LegacySandBox

    原理:和快照沙箱原理相同,是对快照沙箱的完善。不同是LegacySandBox使用es6的proxy,使用代理可以...

  • JS快照沙箱

    自己实现一个快照沙箱:1 年前拍一张,再拍一张,将区别保存起来,再回到一年前,多个子应用就不能使用这种方式了,可以...

  • Preserving SSD lifetime in deep

    摘要:在大规模深度学习应用中,SSD已被广泛采用以加快训练速度。在深度学习应用程序中会定期保存快照,并将大量训练参...

  • 昨天下午没事花了3小时考了阿里云的一个网站建设的认证,简单又实用

    课程学习 购买认证包后,才可学习全部课程,其中在线实验的学习需要消耗“沙箱点”,购买认证包后,实验课所需的“沙箱点...

  • 网站建设Clouder认证

    课程学习 购买认证包后,才可学习全部课程,其中在线实验的学习需要消耗“沙箱点”,购买认证包后,实验课所需的“沙箱点...

  • 服务器运维Clouder认证

    课程学习 购买认证包后,才可学习全部课程,其中在线实验的学习需要消耗“沙箱点”,购买认证包后,实验课所需的“沙箱点...

  • 一个网站建设的认证,简单又实用

    课程学习 购买认证包后,才可学习全部课程,其中在线实验的学习需要消耗“沙箱点”,购买认证包后,实验课所需的“沙箱点...

  • Redis深度历险 - 持久化机制(一)

    Redis深度历险 - 持久化实现 Redis支持两种持久化的方式:快照和AOF;快照指的是会将当前数据库中所有的...

  • chrome中沙箱使用

    chrome中沙箱使用chrome中沙箱使用chrome中沙箱使用

网友评论

      本文标题:117.深度学习qiankun-快照沙箱

      本文链接:https://www.haomeiwen.com/subject/ympdtdtx.html