【问题标题】:How to reduce time of execution for javascript code如何减少 javascript 代码的执行时间
【发布时间】:2016-06-10 10:04:21
【问题描述】:

下面是我的代码,它在for 循环中花费时间从一个对象中提取数据并填充另一个对象。有什么办法可以减少执行时间?我尝试了while 循环,但它并没有太大帮助。请帮忙

function SetGridWithData(result) {
    if (!result) {
        return;
    }
    CtrlBillableItem_SearhedBillableItems = result
    var boxOfJson = [];
    var j = 100;
    if (result.length >= 100) {
        if (PagingLastRecNum == 0) {

            btnPrevious.style.display = 'none';
            for (var i = 0; i < j; i++) {
                boxOfJson.push(result[i]);
            }
        } else {
            btnPrevious.style.display = 'inline';
            var intializer = (j * PagingLastRecNum) + PagingLastRecNum;
            var limiter = intializer + 99;
            for (var i = intializer; i < limiter; i++) {
                boxOfJson.push(result[i]);
            }
        }

    } else {
        btnPrevious.style.display = 'none';
        btnNext.style.display = 'none';

        for (var i = 0; i < result.length; i++) {
            boxOfJson.push(result[i]);
        }

    }
}

我正在尝试实现已完成的分页,但首先每页 100 个数据它将检查第 0 页,如果它是循环一个,如果不是 0,则不是其他情况。

【问题讨论】:

  • 您可以尝试slice 一次性获取阵列的一部分,而不是推入新阵列,这可能涉及随着阵列的增长而重新分配和扩展。但我怀疑即使是 100 个元素也会很慢。
  • 另外,由于您使用的是 i &lt; limiter 而不是 i &lt;= limiter,您可能想再次添加 100,而不是 99。
  • 对不起,我没有得到最后一条评论,你能再解释一下吗?有什么错误吗?我的意思是它会获取下一个 100 总是正确的?
  • 谢谢它不需要第 100 个数据,我知道了,非常感谢
  • 使用切片,正如@Rup 指出的那样。注意:通过new Array(length) 预分配数组总是比在已知边界的循环中动态扩展数组更快。

标签: javascript jquery json for-loop


【解决方案1】:

您可以尝试在函数的开头缓存result.length(在开头的 if 检查之后)..

   function SetGridWithData(result) {
            if (!result) { return; }
            var resultLength = result.length;
            CtrlBillableItem_SearhedBillableItems = result
            var boxOfJson = [];
            var j = 100;
            if (resultLength >= 100) {
                if (PagingLastRecNum == 0) {

                    btnPrevious.style.display = 'none';
                    for (var i = 0; i < j; i++) {
                        boxOfJson.push(result[i]);
                    }
                }
                else {
                    btnPrevious.style.display = 'inline';
                    var intializer = (j * PagingLastRecNum) + PagingLastRecNum;
                    var limiter = intializer + 99;
                    for (var i = intializer; i < limiter; i++) {
                        boxOfJson.push(result[i]);
                    }
                }

            }
            else {
                btnPrevious.style.display = 'none';
                btnNext.style.display = 'none';

                for (var i = 0; i < resultLength; i++) {
                    boxOfJson.push(result[i]);
                }

            }
}

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 2015-05-12
    • 2021-06-03
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多