如何使用Wasm / JS正确处理“内存不足”错误

时间:2019-08-15 15:42:55

标签: javascript opencv webassembly

我正在使用计算机视觉网络应用程序。为此,我在the docs中提供的Wasm模块中使用了OpenCV库。 在大多数情况下,这在我的笔记本电脑/台式机上都非常有效。但是,当在我的Android手机上使用它(三星Galaxy Note III上的Firefox for Android v。68)时,最终每次重新加载时都会引发“内存不足”错误。

我曾尝试在卸载前删除Wasm模块对象以清空内存,但没有任何运气。

这是我所做的基本示例,直接来自opencv.js文档:

<script type="text/javascript">
let imgElement = document.getElementById('imageSrc');
let inputElement = document.getElementById('fileInput');
inputElement.addEventListener('change', (e) => {
  imgElement.src = URL.createObjectURL(e.target.files[0]);
}, false);
imgElement.onload = function() {
  let mat = cv.imread(imgElement);
  cv.imshow('canvasOutput', mat);
  mat.delete();
};
function onOpenCvReady() {
  document.getElementById('status').innerHTML = 'OpenCV.js is ready.';
}
</script>
<script async src="opencv.js" onload="onOpenCvReady();" type="text/javascript"></script>

我不会在此处复制/粘贴opencv.js,但如果需要,您会发现它here

另一方面,这是我处理标签页关闭/重新加载的方法:

window.onbeforeunload = function() {
  delete cv.wasmMemory;
  delete cv.wasmTable;
  delete cv;
}

我总是会收到此错误:

uncaught exception: out of memory

为避免这种情况,我必须关闭选项卡,退出浏览器,然后再次将其全部打开。如果有一种方法可以手动清空内存以避免这种现象,那就太好了。 :)

0 个答案:

没有答案