优化此脚本
optimise this script
谁能建议一种减少这个脚本时间的方法?
var countObject = new Object();
var length = data.length;
for(var i = 0; i < length; i += 4) {
var key = data[i] + ',' + data[i+1] + ',' + data[i+2];
if(typeof(countObject[key]) == 'number') {
countObject[key]++
} else {
countObject[key] = 0
}
}
它是为了建立从画布检索的数据中找到的 RGB 值的出现次数。大概来自context.getImageData()的数据已经是优化的数组类型...?
编辑:我不一定需要格式为"255,255,255"的RGB值,这只是我能想到的用作数组键的全部内容。也欢迎采用不同的方法:-D
我不知道
这是否会产生任何显着差异(您必须有很多值才能看到任何明显的性能差异),但您可以:
- 使用快速位移操作而不是慢速字符串串联创建密钥
- 在作业中剪掉几个步骤:
所以:
for(var i = 0, l = length; i < l; i += 4) {
var key = (data[i] << 16) + (data[i+1] << 8) + data[i];
countObject[key] = (countObject[key] || 0) + 1;
}
编辑:既然你提到从键中获取RGB值,这是它是如何完成的:
/**
* From a color key (integer) return an object
* with keys 'r', 'g' and 'b'
*/
var colorFromKey = function(key) {
return {
'r': (key >> 16) & 0xFF,
'g': (key >> 8) & 0xFF,
'b': key & 0xFF
};
}
谁能建议一种减少这个脚本时间的方法?
不,似乎很好,但我还有其他一些建议:
var countObject = new Object(); // use {} instead, that's more common
var length = data.length; // why that? You are already using var l=...
for(var i = 0, l = length; i < l; i += 4) {
var key = data[i] + ',' + data[i+1] + ',' + data[i+2];
if(typeof(countObject[key]) == 'number') { // remove the brackets. typeof is no function
countObject[key]++ // ; missing
} else {
countObject[key] = 0 // are you sure this should not start with 1?
}
}
如果您有彩色图像,则在之前进行countObject
初始化可能会更快(将每个可能的键设置为0
)。然后保存每次迭代的 if 条件。
相关文章:
- 优化J$plus组合3<脚本>转换为1
- 优化自定义控件的脚本
- 如何优化 jquery 脚本以提高性能
- 压缩脚本和样式,并将所有js和样式引用合并为单个引用,以优化网站性能
- 谷歌网站优化器脚本中的混淆脚本标记
- 优化此脚本
- Requirejs 优化器 - 为站点的各个部分创建脚本的缩小分组
- 无论如何,优化此视差脚本以获得更好的性能
- 有哪些方法可以优化js上的脚本
- 需要帮助优化隐藏表行的脚本
- 优化谷歌脚本值检索
- 我如何优化这个jquery脚本与else语句
- 优化jquery脚本
- Chrome脚本内存优化
- 我如何优化这个简单的脚本
- JavaScript优化脚本
- 优化加载SVG和图像的Kineticjs脚本
- 优化循环在谷歌应用程序脚本
- 如何优化jquery脚本(表创建N行X 56列)
- 在 r.js 优化文件和 requirejs 脚本加载之间切换