Chrome脚本内存优化
Script memory optimization for Chrome
我有在html5画布元素像素工作的脚本。Google Chrome(版本:17.0.942.0 dev)有一些奇怪的行为。我对像素有两种操作:
- 改变特定多边形内像素的色调
- 像素选择工具
问题是当我改变色调时,该选项卡的内存在每次更改后增长到250MB(有时甚至更多),而不是重置为初始大小。但是当我使用魔杖工具选择时,内存不会增长,它会根据选择的像素数量上升或下降(在我看来这是正常的行为)。请帮我理解为什么第一种情况每改变一次,记忆就会增长。
注:在FF中没有这样的问题,这就是为什么我认为这是chrome特有的"奇怪"行为
下面是色调变化的代码:
function isPointInPoly(poly, pt){
for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)
((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y))
&& (pt.x < (poly[j].x - poly[i].x) * (pt.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)
&& (c = !c);
return c;
}
function changeHue(hue){
var modifyCanvas = $("#canvas-modify").get(0);
var modifyContext = modifyCanvas.getContext('2d');
modifyContext.clearRect(0, 0, modifyCanvas.width, modifyCanvas.height);
var imageData = $$.mainCanvasContext.getImageData(0, 0, $$.mainCanvasElem.width, $$.mainCanvasElem.height);
for(var i=0;i<imageData.data.length;i+=4) {
var p = {x: (i/4)%imageData.width, y: parseInt((i/4)/imageData.width)};
for(var j=0;j<$$.globalSelection.length;j++){
var poly = $$.globalSelection[j].slice(0, $$.globalSelection[j].length-1);
if(isPointInPoly(poly, p)) {
var hsl = rgbToHsl(imageData.data[i], imageData.data[i+1], imageData.data[i+2]);
hsl[0] = hue;
var rgb = hslToRgb(hsl[0], hsl[1], hsl[2]);
imageData.data[i] = rgb[0];
imageData.data[i+1] = rgb[1];
imageData.data[i+2] = rgb[2];
} else {
imageData.data[i] = 0;
imageData.data[i+1] = 0;
imageData.data[i+2] = 0;
imageData.data[i+3] = 0;
}
}
}
modifyContext.putImageData(imageData, 0, 0);
}
不只是你。
有关闭和在Chrome与任何画布imageData
相关的内存泄漏。
等。
Chromium的问题跟踪策略很奇怪。这些问题并不一定能解决,即使他们关闭了它们。
这可能是webkit的事情,而不是Chrome的事情,但我不能肯定地说。我只能说你自己没有做错任何事。
虽然我们在这里让我说你不应该这样做:
var modifyCanvas = $("#canvas-modify").get(0);
var modifyContext = modifyCanvas.getContext('2d');
每次都是为了性能考虑。
相关文章:
- 以可优化的方式使用requirejs加载模板
- 使用优化器在慢速连接上加载main.js时需要js超时
- JavaScript数组优化以提高性能
- React+Redux性能优化与组件ShouldUpdate
- 重复应用 d3 转换导致的内存泄漏
- 如何显示在给定极限内存在的所有素数
- IE7中的blockUI插件内存泄漏25kb
- JavaScript尾部调用中的函数是否经过优化
- javascript中的快捷方式融合优化
- Javascript闭包-如何防止内存泄漏
- 基于订阅的nosql内存数据库
- 显示:阻止/无html元素,css.not从内存中释放
- 如何优化循环以插入到数据库中
- jQuery Draggable:内存泄漏
- Css优化谷歌页面速度洞察
- 元素过多的HTML内存使用情况
- 如何在 NodeJS / Express 上优化内存/CPU
- 想要使用 html5 的画布优化捕获的图像调整大小和旋转的代码,现在在移动设备上发出内存不足警告
- Chrome脚本内存优化
- 优化Javascript函数的内存泄漏