javascript - for...in 循环执行速度非常慢

标签 javascript performance optimization google-apps-script google-sheets

我正在根据从外部端点获取的数据填充电子表格。一切正常,但 for...in 的执行循环非常慢。

我从 UrlFetchApp 返回的对象相当大; Object.keys().length > 1500,所以也许它只是对象的大小。

我很好奇是否有办法优化我的功能。

代码:

    var sh = SpreadsheetApp.getActiveSheet();
    function getData() {
      var response = UrlFetchApp.fetch(endpoint);
      var data = JSON.parse(response);
      var rates = data["quotes"];
      var max = Object.keys(rates).length;
      var row = 2;
      var i = 0;
      clear(); //clears the range A2:B
      for (var key in rates) {
        sh.getRange("A" + (i+row)).setValue(key.substring(3));
        sh.getRange("B" + (i+row)).setValue(rates[key]);
        i++
        if (i+1 === max) {
          //do something after complete
        }
      }
    }

最佳答案

我不确定//完成后做一些事情。那么这两种模式怎么样?请将此答案视为多个答案之一。

我修改了您的脚本,将 setValue() 替换为 setValues()。这样处理速度就会很快。

模式 1:

function getData1() {
  var sh = SpreadsheetApp.getActiveSheet();
  var response = UrlFetchApp.fetch(endpoint);
  var data = JSON.parse(response);
  var rates = data["quotes"];

  var keys = Object.keys(rates);
  var dat = [];
  keys.forEach(function(key){
    if (key != keys[keys.length - 1]) {
      dat.push([key.substring(3), rates[key]]);
    } else {
      //do something after complete
    }
  });
  sh.getRange(2, 1, dat.length, dat[0].length).setValues(dat);
}

模式 2:

function getData2() {
  var sh = SpreadsheetApp.getActiveSheet();
  var response = UrlFetchApp.fetch(endpoint);
  var data = JSON.parse(response);
  var rates = data["quotes"];

  var dat = Object.keys(rates).map(function(key){return [key.substring(3), rates[key]]});
  sh.getRange(2, 1, dat.length, dat[0].length).setValues(dat);

  //do something after complete
}

注意:

  • 如果这不起作用,您能否提供来自 var response = UrlFetchApp.fetch(endpoint); 的示例数据?当然,请删除其中的私有(private)信息。

引用文献:

如果我误解了你的问题,我很抱歉。

关于javascript - for...in 循环执行速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938168/

相关文章:

javascript - 视频在图像悬停时播放

python - 嵌套for循环慢速python计算特殊标准差

c# - 我可以减少 WPF 应用程序中手写笔/触摸输入的开销吗?

mysql - InnoDB Small 更新很慢,性能问题

perl - 如果答案已经确定,Perl 是否经过优化以跳过剩余的逻辑操作数?

javascript - QML 与 Javascript

javascript - JS 中的变量是否为空?谷歌地图 API

javascript - IE 挂起故障排除

c++ - 如何提示 Visual C++ 编译器优化器不太可能执行 if 语句的特定分支?

optimization - 我怎样才能优化这个列表理解?