gpt4 book ai didi

javascript - backbone.js 对不再使用的模型做了什么

转载 作者:行者123 更新时间:2023-12-03 01:45:14 24 4
gpt4 key购买 nike

最近我正在深入研究整个客户端 MVC/MVVM 设计模式,其中我特别感兴趣的是backbone.js。

我不完全理解的一件事是当模型不再真正需要时会发生什么。

假设我们有一个包含用户和产品的应用。我们有用户模型/ View 和产品模型/ View

注意:为简单起见,我们不是用户。我们可以只增删改查用户/产品。

当我进入产品页面时,我假设我们加载了模型和与之对应的 View 。

当我们离开页面并进入用户页面时会发生什么。用户模型/ View 已加载,但产品也仍在加载。

我们是否让它们保持加载状态, Backbone 是否会为您处理这些问题,或者您是否明确需要结束某些对象。

最佳答案

Backbone 不会显式地为您处理对象的清理工作。您和 JavaScript 运行时的比例是 50/50。

JavaScript 是一种垃圾收集语言,如 Java、C#、Ruby 等。垃圾收集语言的基本原理是,应用程序仍然引用的对象将不会被清除。与之相反的是,当应用程序不再引用某个对象时,该对象将被清除。

JavaScript 一般:

创建变量时,您可以将该变量的范围限定为局部函数或作为全局变量。

在页面的生命周期中,全局变量永远不会被垃圾收集器清理。它们被清理的唯一时间是当您完全离开 HTML 页面时 - 导航到不同的页面并强制浏览器从服务器加载新页面(执行完整的服务器刷新)或关闭浏览器或浏览器选项卡。

当变量超出作用域时,即当函数退出并且不再有对其的引用时,函数作用域变量将被清除。有一些异常(exception):返回值和闭包。

通过将返回值分配给另一个变量,将返回值保留在您的应用程序中。返回值遵循相同的一般规则,但变量现在位于不同的函数中。一旦该变量超出范围,就可以将其清除。

闭包允许父作用域提供后代作用域可以访问的值。当后代作用域被清理时,父级的闭变量可以被允许被清理(假设没有其他东西保留它)。

具有属性和功能的对象遵循相同的规则。一个对象可以通过为其分配属性来引用另一个对象或函数:myObj.foo = thatObj

DOM(文档对象模型 - 应用程序中的 HTML)是一个 JavaScript 对象。事件和其他对 DOM 的引用与任何其他引用的工作方式相同。如果您有一个处理 DOM 事件的对象,那么它在您的应用程序中有一个引用,并且不会被垃圾收集器清理。如果你想清理它,你必须删除对它的所有引用 - 包括事件处理程序中的 DOM 引用。

清理内存

一般规则是,如果您将数据加载到 Backbone 集合或对象中,并且希望清理该对象以使其不再使用内存,则必须删除对该对象的所有引用。这只是标准的 JavaScript 垃圾收集规则。

您无法强制进行垃圾回收,但可以使用 JavaScript 中的 delete 关键字强制变量取消引用它所指向的内容:delete myVar

主干

Backbone 是 JavaScript,因此它遵循相同的规则。您需要了解 Backbone 中闭包和引用的一些有趣用途,这将帮助您了解何时需要手动清理某些对象。

例如:事件。偶数处理程序/回调方法的工作原理是在触发事件的对象和处理事件的回调之间建立引用。这是 Backbone 应用程序中最容易导致内存泄漏的地方之一,我在这里详细讨论它:http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

除了了解事件如何在引用方面工作之外,只需遵循 JavaScript 中管理内存的标准规则就可以了。一旦您删除了对该 User 对象集合的所有引用,它们就会被清除。

关于javascript - backbone.js 对不再使用的模型做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758346/

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