Javascript 处理svg时的内存管理<;图像>';s

Javascript 处理svg时的内存管理<;图像>';s,javascript,windows,firefox,google-chrome,memory-leaks,Javascript,Windows,Firefox,Google Chrome,Memory Leaks,我正在使用创建一个相当大的SVG图像文件。问题是内存使用似乎很疯狂,我想知道这是正常的还是优化部门缺少了一些东西 下面的表格显示了每个阶段的内存增量,使用Firefox 10关于:内存页面: 阶段: Before:加载SVG编辑之前 就绪:SVG编辑已加载 加载35个总大小为16.6MB的图像* 预览生成的文件* 闭式预览* 关闭选项卡,通过关于:内存页触发FF内存清理 *我的自定义函数,而不是SVG编辑 正如您在Ready Load映像的增量中所看到的,内存使用量几乎增加了300 MB!

我正在使用创建一个相当大的SVG图像文件。问题是内存使用似乎很疯狂,我想知道这是正常的还是优化部门缺少了一些东西

下面的表格显示了每个阶段的内存增量,使用Firefox 10关于:内存页面:

阶段:

  • Before:加载SVG编辑之前
  • 就绪:SVG编辑已加载
  • 加载35个总大小为16.6MB的图像*
  • 预览生成的文件*
  • 闭式预览*
  • 关闭选项卡,通过关于:内存页触发FF内存清理
*我的自定义函数,而不是SVG编辑

正如您在Ready Load映像的增量中所看到的,内存使用量几乎增加了300 MB!加载16 MB的图像!我加载图像的方式是通过创建,所以这不是原因。在预览过程中,我将ObjectURL数组转换为data:uri,因此我理解其中的巨大增长(尽管如此,我认为有点太多)。要求有一个嵌入所有图像的单一SVG,因此每个SVG的大小通常为50MB或更大

值得注意的是,SVG编辑不使用画布。它是基于DOM的编辑器

我将感谢任何帮助,特别是在如何确定到底是什么在占用内存方面

以下是加载图像时的简化流程(input change()事件):

  • 将Image.src设置为objectURL
  • 设置Image.onload事件以创建src、width、height的SVGImage元素,该元素是从图像复制的。还将执行revokeObjectURL()
  • 将SVGImage存储在对象{imageID,element,file handle}的全局数组中
  • 将SVGImages附加到SVG

    • 16MB是SVG的大小。300MB跳转用于图像表面,它们是像素数据。这将是渲染图像的每像素4字节


      因此,您可以有一个小的SVG图像,其中只有一个1000px x 1000px的矩形;这可能在不到500字节的SVG中完成。但是渲染版本将是4MB的像素数据……

      16MB是SVG的大小。300MB跳转用于图像表面,它们是像素数据。这将是渲染图像的每像素4字节


      因此,您可以有一个小的SVG图像,其中只有一个1000px x 1000px的矩形;这可能在不到500字节的SVG中完成。但是渲染版本将是4MB的像素数据……

      这听起来是正确的。我得到的分辨率约为10.6k x 6.7k。10600*6700*4/1024*1024=大约270MB,与报告的大小非常接近。所以,我想除了缩小规模之外,没有别的办法了?目前,我认为这几乎是你的选择。展望未来,浏览器可能会更好地处理这样的情况……这听起来是正确的。我得到的分辨率约为10.6k x 6.7k。10600*6700*4/1024*1024=大约270MB,与报告的大小非常接近。所以,我想除了缩小规模之外,没有别的办法了?目前,我认为这几乎是你的选择。展望未来,浏览器可能会更好地处理这样的情况。。。。