【发布时间】:2022-10-04 20:56:04
【问题描述】:
我们开发了一个离线应用程序,我们将 json 存储在一个变量内的 Javascript 文件中,并且仅在单击按钮时加载单个所需的 javascript(我们不会一次加载全部)。在javascript的帮助下。
var view ;
var viewID;
view = file;
viewID = view.split("v")[1];
viewIds.push(viewID);
// DOM: Create the script element
var jsElm = document.createElement("script");
// set the type attribute
jsElm.type = "application/javascript";
jsElm.id = file;
// make the script element load file
jsElm.src = "viewData/"+viewID+".js";
// finally insert the element to the body element in order to load the script
document.body.appendChild(jsElm);
// $('#loading').show();
try {
jsElm.onload = function () {
defaultViewData(view);
jsElm.onerror = function () {
alert('something Went wrong');
}
}
} catch (error) {
alert(error);
}
如果已经加载,我们也不会再次加载相同的 javascript。
其中两个脚本非常大,大约 500MB,当它开始加载时,RAM 内存上升到 8GB,然后当它完成加载时它恢复正常,即 700MB。
如果在内存下降时切换,它会再次使用 RAM 来加载另一个脚本和 SNAP,说明“内存不足”。
这在 chrome 103 和 104 中工作得非常正常,在更新到 105 之后,这不仅在 chrome 中而且在所有基于 chromium 的浏览器(如现在 Edge)中都开始出现错误,我想在 v8 引擎更新中需要注意一些事情,被改变。
或者有没有其他方法可以在没有服务器的情况下在 webApp 中获取数据,目前我们正在借助很大的 javascript 获取内部数据,
还想知道对于 500 MB ,使用了 8 GB 那里发生了什么?
注意:Firefox 浏览器中一切正常。
在我们的处理 javascript 中,我们测试了使用超时函数来等待和 HeapSize 恢复正常,但随机会出现“内存不足”的快照。
【问题讨论】:
-
for 500 MB , 8 GB is utilsed what happens there?Chrome 是热垃圾 - 是否可以将 javascript 更改为 json 并使用 fetch 加载它 - 你说we store json in Javascript file的事实表明它是可能的......如果它是实际上当然是真正的 JSON - 即只有字符串、数字、数组、布尔值、空值和简单对象 - 例如没有无效的 JSON 类型 -
fetch 再次与 server 一起工作,出于安全原因,它不允许我们从本地计算机读取文件。
-
哦,所以这个页面是使用
file://而不是http://或https://加载的 - 不确定它会有什么不同 - 虽然会很有趣 -
@yogi 你到底对这个问题不了解什么?,这不是大多数互联网上的开发人员在寻找并试图理解在 html 页面中加载 500MB js 使用 8GB 内存的研究,如果你知道请回答它对某人会有所帮助,而不是仅仅评论这个问题不被理解。
标签: javascript google-chrome out-of-memory chromium v8