JavaScript 在特定计算机上运行速度非常慢

标签 javascript

我编写了一段代码,获取黑白图像并检查特定区域(方形)中的像素,最后返回其中有多少黑色的总和,该区域的每个像素都以For 循环如下例所示:

    function is_box_black_corner(x,y,width,heigth){
    var counter=0;
    for (var i=x; i<(x+width); i++){
        for (var j=y; j<(y+heigth); j++){
            if(my_isblack(i,j)==1){
                counter++;
            }
        }
    }

正如您在 for 循环中看到的,我调用了一个函数来验证特定像素是否相当黑:

   function my_isblack(x,y){
        var p = ctx.getImageData(x, y, 1, 1).data;
        if(p[0]<50 && p[1]<50 && p[2]<50){
            return 1;
        }
        else{
            return 0;
        }
    }

正如您所想象的,这有点计算量大。但问题是,我的计算机突然比其他计算机慢得多(即使使用最差的处理器)。我已经检查过 RAM 内存和处理器,没有一个使用率超过 30%,而运行代码之前的处理器接近 0%。

而且不知道还能去哪里寻找。我感谢一些帮助,如果有人知道如何更快地做到这一点,我们将非常感激

最佳答案

我将按照@ASDFGerte的建议尝试一次调用getImageData:

var x=10; var y=10; var width=50; var height=50;
var counter=0;
var image;
var p;   //global data

function init(){
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    ctx.fillStyle = "black";
    ctx.fillRect(10, 10, 50, 50);      //this is just a black square

    image = ctx.getImageData(x, y, width, height);      //Load the image
    p = image.data;                                     //get the data of the image
    is_box_black_corner();
};

function is_box_black_corner(){
    for (var i=x; i<(x+width); i++){
        for (var j=y; j<(y+height); j++){
            if(my_isblack(i,j)==1){
            counter++;
            }
        }
    }
    console.log(counter);
}; 

function my_isblack(x,y){
    if(p[0]<50 && p[1]<50 && p[2]<50){  //check the global data
        return 1;
    }
    else{
        return 0;
    }
};

关于JavaScript 在特定计算机上运行速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44980237/

相关文章:

javascript - SetInterval 是否在单独的线程上运行?该方法如何工作?

javascript - 处理多个上传的文件 'synchroneously'

JavaScript 对象超出范围

javascript - 将 Protractor 测试项目从 javascript 移植到 typescript 的步骤

javascript - 如何在html文本输入中只允许输入冒号分隔的2位数字?

javascript在平均计算中排除一些值

javascript - Flot:尝试在页面加载时绘制图表时弹出奇怪的错误?

javascript - 具有依赖类型的 Typescript 联合

javascript - Grails:我应该使用 Controller 还是JavaScript来运行查询并相应地更新页面?

javascript - 如果切片颜色为白色,Highcharts donut 饼不显示悬停指示器