javascript - 如何从对象和类中清除 javascript 中浏览器的内存?

标签 javascript jquery memory browser asynchronous

我正在制作一个包含三个场景的探索游戏。玩家可以从一个场景移动到另一个场景并返回。 (比如一个众所周知的经典任务:Neverhood,Machinarium,猴岛的诅咒) 每个场景都有自己的对象、类和图形元素包。这是一个场景的脚本。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="js/jquery.gamequery-0.5.0.2.js"></script>

<!-- ////////////////////////////////////////////////
    ///////////                 Charecters            ////////////////////
     /////////////////////////////////////////////////////////////// -->

    <script type="text/javascript" src="js/charecters/player.js" id="player_anime"></script>
    <script type="text/javascript"  src="js/charecters/mama.js" ></script>


    <!-- ////////////////////////////////////////////////
  ///////////                 Scene globals            ////////////////////
   /////////////////////////////////////////////////////////////// -->
    <script type="text/javascript" src="js/scene_globals/scene2/audio.js"></script>
    <script type="text/javascript" src="js/scene_globals/scene2/background.js" ></script>
    <script type="text/javascript" src="js/scene_globals/scene2/scene.js"></script>

    <!-- ////////////////////////////////////////////////
   ///////////                 Game controls            ////////////////////
    /////////////////////////////////////////////////////////////// -->


    <script type="text/javascript" src="js/game_control.js"></script>

为了解决内存使用问题,我想异步加载每个场景的脚本。但我意识到,即使我销毁所有脚本并为下一个场景加载其他脚本,对象和图形元素仍保留在内存中。

这里是通用算法:

1) 加载第一个场景的图形和脚本。 2)用户通过第一个场景 3) 删除第一个场景的所有对象、脚本和图形 4)加载第二个场景所需的所有内容

还有另一种方法:我可以将每个场景的所有内容放入 iframe 中,而不是异步解决方案。因此,当 iframe 重新加载到下一个场景时,所有对象和图形都会被删除。但这是另一个问题——如何从父页面使用 iframe 中的所有对象和图形。 (我有一些互动)

我希望我糟糕的英语足以把问题说清楚。

等待任何建议。

最佳答案

我的目标是采用这样的策略:

  • 采用Module Pattern
  • 写一个静态的、通用的模块,适用于所有场景
  • 为每个场景编写一个 javascript 文件,其中包含一个适当构建的模块,其中包含特定于该场景的所有数据/函数。
  • 在通用框架中包含加载(例如使用 JSONP)所需场景的适当模块的方法。

使用模块模式,您通常会确保模块不会“覆盖”同名的另一个模块。但是,在这种情况下,这正是您想要的。

加载新模块时,垃圾回收将在删除“覆盖”模块后进行处理。

由于 javascript 的垃圾收集有些懒惰,您可以在加载新场景之前使用 delete 命令强制执行它。您需要做的唯一准备是确保将模块定义为外部 project 命名空间的属性(这是典型的模块模式)。

正确实现后,您将只在全局命名空间中放置一个成员(为每个实用程序/库对象加上一个或多个成员,例如 jQuery)。

关于javascript - 如何从对象和类中清除 javascript 中浏览器的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16372430/

相关文章:

objective-c - 永远不会调用UIImage dealloc

PHPExcel内存问题

.net - 服务主机效率

javascript - ipad portrait 的特定 JS 也在 landscape 中触发

javascript - 彩盒: binding cbox_complete differently for multiple lightboxes

javascript - CSS 溢出 : auto by 'touching' bottom div

jquery - 使用 CSS 和/或 jquery 创建向下箭头,例如与所选标签颜色形成对比的 gmail 标签

javascript - 文本区域干扰 Ajax 代码

javascript - Node 错误 - 在 MakeCallback 中使用域属性已被弃用

javascript - 如何使用 DOM 为 CSS 元素提供增量坐标?