一个电子表格有一个 50x36 的数组,其中包含值。如果 col+1 单元格大于 0,该函数应该从某些列获取值并构建一个数组。代码的第一部分是调用一次页面,获取一行中的所有值,然后使用嵌套的 for 和 if,创建所需的数组。第二部分是做完全相同的事情,但是使用 getValues() 多次调用页面,这应该会更慢,而且根据谷歌的说法,这不是一个好的做法。第一个输出结果比第二个慢 100 毫秒。有人可以解释一下吗?
function PieseArray() {
let pag = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Configuracion');
//start counting time for the first part
let start1 = new Date
let allTheParts = pag.getRange(11,40,50,36).getValues()
let array2=[]
for (let i=0;i<36;i=i+4){
for (let j=0;j<allTheParts.length;j++){
if(allTheParts[j][i+1]>0){
array2.push([allTheParts[j][i],allTheParts[j][i+1]])
}
}
}
let end1 = new Date
Logger.log(end1-start1)
//start of the second part
let start2 = new Date
let piese = []
for(let k=40;k<=72;k=k+4){
piese = piese.concat(pag.getRange(11,k,50,2).getValues())
}
let array1=[]
for (let i=0;i<piese.length;i++){
if(piese[i][1]!=''){
array1.push(piese[i])
}
}
let end2 = new Date
Logger.log(end2-start2)
return(array1)
}
执行日志
1:06:11 PM Notice Execution started
1:06:12 PM Info 107.0 (first part)
1:06:12 PM Info 15.0 (second part)
1:06:12 PM Notice Execution completed
结果是相同的数组,但执行时间很奇怪。我预计代码的第二部分会慢得多。
试试这样:
两个代码都没有做同样的事情。主要比较的是不同。
不同于
此外,Apps 脚本具有先行缓存功能,您需要的值已经被缓存。如果您依次运行代码,从同一范围获取相同的值,则从第一个代码缓存的值将在第二个代码中使用。
为了正确计时这些功能,
console.time
和console.timeEnd
来正确计时功能