javascript - 动态加载/卸载外部JS

标签 javascript html memory memory-management loading

在尝试模仿 Youtube 等网站并在链接点击时仅加载页面的特定片段的过程中,我尝试制作一个函数来加载/卸载当前页面所需的特定 JS 文件和 CSS 文件。

我注意到,当 CSS 文件从 DOM 中删除时,该文件中的样式不再有效,只有再次添加特定的 link 标记时才会再次有效。然而,JS 文件似乎在加载时存储在内存中,并且简单地删除 DOM 中的引用并不能阻止与该文件关联的功能仍然有效。 Youtube是如何解决这个问题的,或者您对我应该走哪条路径来实现“完全”卸载/加载JS文件有自己的建议?

我的一个想法是让我的代码中的所有变量、元素 ID 等(无论是 HTML 还是 JS)都是唯一的,并且有一个数组来不断检查已加载的 JS 文件 - 所以内存中每个 JS 文件不会超过一个。但我想这不是一个安全的解决方案,因为如果该“页面”长时间没有使用,GC 可以从内存中删除 JS 文件?

最佳答案

你可以将变量设置为 null,然后垃圾收集器会将其从内存中清除,这样,你就可以将 javascript 动态加载到变量中,以便稍后你可以将其设置为 null。你的文件可以有一个对象或者是一个构造函数。

这只是一个基本的解释,但是,我的建议是您查看 angularjs、reactjs 和许多其他适合开发单页应用程序的框架。

如果您已经开发了一些东西,requierejs 是一个用于动态加载依赖项的库,并且实现非常简单。

缓存是另一个故事,您可以通过加载文件的方式避免/刷新缓存。您可以向 url 添加查询参数,例如时间戳。这样文件的 url 每次都会不同,浏览器不会从缓存中加载它。您还可以使用 header 来告诉浏览器何时应从缓存中刷新文件,甚至完全阻止它缓存该文件。

关于javascript - 动态加载/卸载外部JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33334672/

相关文章:

javascript - Html 视频支持不同的视频 src 类型

javascript - 使用 jQuery 对 div 进行排序

javascript - "Not allowed to load local resource" Electron/VUE

string - 将 Arduino F() 宏与字符串数组一起使用

c - HeapReAlloc 改变内存地址后是否应该使用HeapFree?

javascript - 为什么使用 && 的条件语句速度快两倍

javascript - 使用 insertAdjacentHTML 在 .js 文件中给出错误,但在控制台代码段中没有给出错误

javascript - ngFor 未在 IE 11 中更新(带有 CoreJS 的 RC4)

html - 显示内联 block 问题

c - C 语言中未声明的实体如何管理内存?