- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道我是否应该销毁我的 Slick carousel 实例,然后再在可以调用 N+ 次的页面上每次调用它?前任。我有一个日历,每次用户点击带有事件的日期时,我都会像这样初始化 Slick
$("#slickEvents").slick({options here})
然后这些事件会显示在光滑的轮播中。如果用户点击另一个有事件的日期,我会得到新的 HTML 并再次调用 Slick。因此,当用户在该日历页面上时,这可能会被调用 N+ 次。我是否必须担心 Javascript 构建实例而不在某些垃圾收集器中释放它们,或者我是否应该检查以查看是否首先初始化了 Slick 实例然后使用像这样的 Slick destroy 方法
if (slickIsInitialized)
{
$("#slickEvents").slick('unslick'); destroys the slick instance
}
$("#slickEvents").slick({options here});
Slick 确实有一个名为“getSlick”的方法,但我不确定如何或是否可以这样使用它
$("#slickEvents").slick('getSlick');
我还寻找了一个“reInit”方法,但没有看到一个,只有一个“reInit”事件,但它不会在我每次实例化一个 slick 实例时被调用,只有 init 事件被调用!
有没有办法在调试器中检查实例是否正在构建以及它们是否正在被释放?我对 JS 有点陌生,来自 C# 背景
最佳答案
要回答你问题的第二部分,是的,有一种方法可以查看 JS 中的内存使用情况。在大多数浏览器的开发工具中都有一个 JS Profiler(在 Chrome 中它位于“性能”选项卡中)。 Here's简要说明如何在 Chrome 中使用它,因为我在回答的后半部分使用了它。
现在,要回答您问题的第一部分,Slick 的额外初始化似乎不会导致内存问题。
这是 JS 堆图的 Chrome 调试器的屏幕截图(这个主题对于这个答案来说太复杂了——假设它是我们案例的总内存使用量),我在其中反复调用 $('#object').slick ()
在同一个 DOM 对象上(注意我使用了一个 ID 选择器)通过点击一个按钮在大约 10 秒的时间段内。此选项卡上应该没有其他 JS 事件。
图中的每个“步骤”都是对 slick
的新调用,它在调用跟踪中是可验证的(由于 Slick 进行了其他初始化,所以它太大而无法在此处发布,但应该不难自己验证)。请注意,当“悬崖”发生时,额外的对象正在被垃圾收集(最后一部分保持高位,因为堆还没有大到足以触发另一个 Major GC 事件)。
同样,如果 DOM 元素变得不可访问,Slick 对象也应该被 GC。由于 Slick 基于 JQuery 扩展函数,因此应该在元素的 JQuery 对象被 GC 时进行 GC(因为它应该是对它的唯一引用,而 DOM 元素是对 JQuery 实例的唯一引用)。
最后,以防万一我没有正确阅读问题,您可能应该为新的 DOM 元素创建新的 Slick 实例。我注意到您担心为新页面元素创建新的 Slick 实例,但即使是库 Demo页面就是这样做的。由于 Slick 使用 JQuery,因此您需要这样做,以免意外导致在错误的元素上触发事件(例如,如果您开始使用 slickAdd
函数)。
P.S.:关于 reInit
事件,它似乎在 DOM 操作发生时被触发(例如向轮播添加新幻灯片或过滤轮播)。它实际上不是任何类型的重新初始化(鉴于其名称,这有点令人困惑)。
关于javascript - 每次用户调用其初始化时销毁旧的光滑轮播实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558031/
当你有一个对象 OBJ1 包含一个关键部分 CS 和一个指向另一个对象 OBJ2 的指针时,我无法弄清楚什么是正确的关闭过程 假设您有两个函数 A 和 B。 A进入临界区,修改OBJ2中的数据后离开临
我有一个成员变量声明为 CComPtr m_spXMLDoc; XML 文档是这样创建的 CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC
在我的工作平台中,我遇到了 session_destroy 问题 function logout() { $_SESSION['id'] = ''; session_destroy(); } 在这
如何使用 destroy 删除 jScrollPane。请您给出以下代码的简单示例: $(document).ready(function() { $(".div1").jScrollPane
这是我在这里发表的第一篇文章,但我想对社区表示感谢,因为通过来到这里并在已经得到解答的问题中找到解决方案,我已经无数次找到了问题的解决方案。 话虽这么说,我想进入正题。我正在 Code Gear 的
我在导航 View 中工作。在此导航 View 中,您可以偶然发现个人资料页面。在此个人资料页面中,您可以看到与当前个人资料相关的其他个人资料(基本上是数据 View 中显示的图片)。您可以通过点击这
我想销毁项目中的 session ,这样当我单击“注销”时,它会转到页面“KillSession.jsp”,在该文件中我编写了“session.invalidate();”然后我将用户重定向到登录页面
我有关于 Thread 的 2 问题,我只是想澄清一些事情。使用以下代码: public class MyThread implements Runnable { Boolean StopTh
我遇到了内存泄漏,代码类似于下面的代码(这是每个循环都有不同输入的模拟)。 问题 对象 Object_XXX 非常复杂,它与数据库以及其他填充了数据库数据的对象有连接。 for(int i=0
当我在 Python 中启动一个类时,我给它一些值。然后我调用类中执行某些操作的方法。这是一个片段: class TestClass(): def __init__(self):
我想删除所有 div、类、属性和几乎所有 CKEDITOR 添加到 DOM 的内容。例如调用 jquery tabs("destroy");将删除所有由 jQuery 选项卡添加的 div。我怎样才能
我想清除析构函数中的一个映射,但我不知道它是否为空。如果我按如下方式清除它可以吗? for(std::map::iterator it = m_map.begin(); it != m_map.end
我正在尝试克隆 TikTok 应用。对于主屏幕,我制作了一个 VerticalViewPager(自定义 View 分页器),其中包含“点赞”按钮、标题和评论。我正在从 Firebase 检索视频。
我正在制作自己的游戏。目标之一是在世界中拥有尽可能多的物体。在这个游戏中,需要在一些不可预测的时间段内创建许多对象(比如武器开火会创建一个对象),一旦该弹丸击中某物,该对象也需要被摧毁(也许它击中的东
有没有办法在 JavaScript 中破坏 HTML5 WebWorker? 这是我的情况:我有一个 Web 应用程序生成相当数量的 WebWorker(在 16 到 32 之间的任何地方)来优化一些
如何销毁 php 中的 session ? 事情是当用户点击注销按钮时, session 将结束,他将被重定向到 index.php 这是我的代码 客户.php 这是来自用户想要再次登录的 ind
关于 GtkBuilder 的问题。 当我们取消引用构建器指针时,它是否会破坏构建器创建的所有屏幕/小部件? if( builder_ptr ) g_object_unref(G_OBJECT
有没有办法销毁 WebView 实例?如果页面加载,并说视频开始播放,我希望能够,当我隐藏 WebView 时,基本上可以销毁它,或者至少重置它。 我知道我可以听 visibleProperty 并执
我有一组可拖动的元素。如何删除可拖动功能? $('.draggable').draggable('disable') 在我的情况下不是一个选项 $('.draggable').draggable('d
下面的代码会抛出一个 EZDecompressionError 消息 'Invalid ZStream operation' 每当行 Reader.Free 被执行。有人可以告诉我这段代码有什么问题吗
我是一名优秀的程序员,十分优秀!