分析 Google 应用脚本的性能
Posted
技术标签:
【中文标题】分析 Google 应用脚本的性能【英文标题】:Profiling the Performance of a Google App Script 【发布时间】:2013-12-30 19:26:21 【问题描述】:我编写了一个 Google 应用脚本来将 Google Analytics(分析)数据提取到 Google 电子表格中。这是一个相当长的运行脚本,它向 GA Reporting API 发出多个请求,它还使用 Google App 的 ScriptDB。
是否有一种分析脚本性能每个步骤的好方法,以便我可以确定哪些区域花费的时间最长,从而可以开始在某些区域进行优化?
【问题讨论】:
【参考方案1】:作为对 Fred 答案的补充,在脚本顶部定义一个变量 start
var start = new Date().getTime();
然后在几个Logger.log()
放置一个战略点使用
Logger.log(new Date().getTime()-start);
你会很好地了解正在发生的事情......
【讨论】:
【参考方案2】:执行记录对这种事情非常有用。
您还可以将Logger.log()
语句放在所有地方,以测量自上次日志以来的时间。这样您就可以找到执行时间较长的区域。
我有一个spreadsheet,我在其中复制执行后的日志,然后公式 + 条件格式帮助我识别速度较慢的区域。
【讨论】:
请按原样考虑我的回答:关于 Logger 方法的简单补充。您使用 SS 的解决方案当然更方便,尽管设置起来有点复杂。顺便说一句,我投了赞成票:-) 天哪,我什至不知道“执行记录”!惊人的酱汁!你制作的那个小电子表格也很棒!它可以快速帮助我识别减速。谢谢!【参考方案3】:基本工具是execution transcript 和Class Logger(在之前的答案中提到)
现在我们可以使用Stackdriver logging 和包含console.time 和console.timeEnd 的类控制台。
为了让事情变得更好,我们还可以通过 BigQuery 将 Stackdriver 日志记录发送到 Google Data Studio,这样我们就可以构建有用的指标来跟踪分析数据。
参考文献
Stackdriver Logging for Google Apps Script is now available Identify and understand errors in Apps Script with Stackdriver【讨论】:
【参考方案4】:要纠正 Serge 的回答,即调用 Date 函数有问题,您可以使用此解决方案。
function myFunction()
var start_time = new Date().getTime();
/*
your code goes here
*/
Logger.log('Total execution time is :' + (new Date().getTime()-start_time) + ' ms');
您可以用您的代码替换注释行。执行后按 Ctrl + Enter 或 Command ⌘ + Enter 在 Mac 上查看日志。你会得到类似下面的东西:
[17-01-18 12:25:58:932 UTC] 总执行时间为:16586 ms
所以这里的总执行时间是 16586 毫秒,也就是 16.586 秒。
除了上述之外,您还可以在代码之间添加以下 sn-p 以测量不同部分的执行时间。
Logger.log('Execution time till checkpoint 1:' + (new Date().getTime()-start_time) + ' ms');
【讨论】:
Serge's answer 有什么问题需要纠正? 您使用与 Serge 的完全相同的 Date 函数调用【参考方案5】:您可能应该使用console.time(label)
和console.timeEnd(label)
方法,因为使用Date
时可能会得到否定结果。
【讨论】:
我没有看到在 Google Apps 脚本服务器端代码上使用 Date 时产生负面结果的报告。你见过吗? 不,我也没有看到,但我更多地谈论的是现实世界的时钟可能会同步的一般问题,因此产生的差异会变成负数。虽然我怀疑这会发生在 Google 的服务器上。以上是关于分析 Google 应用脚本的性能的主要内容,如果未能解决你的问题,请参考以下文章
Google Chrome 中常规和性能分析器模式之间的区别