[英]Google App Script: identify performance/execution speed bottleneck part of the code
Google App Script:識別代碼的性能/執行速度瓶頸部分。 就技術而言,任何人已經在這方面取得了一般性的成功嗎? 你能分享你的例子嗎?
下面是我到 output HTML 網頁的小腳本,其中包含來自 Google ClassRoom 的簡單表格。 到目前為止,我對這些技術還很陌生,但我正在努力在學習方面取得進步。
通過此腳本,output 最多 100-150 個表行。 無法理解為什么腳本運行超過 5-8 分鍾才能完成其工作並最終 output 那些 100-150 行 HTML 表。
也許我使用數組錯誤的方式或其他什么? 或者可能是 Google App Script 的本質是整體運行緩慢?
function doGet() {
var res = listCoursesHTML();
var html = HtmlService.createHtmlOutput();
html.append("<table border = \"1\">");
html.append("<tr><th>Имя преподавателя</th><th>Почта</th><th>Название курса</th><th>Название ОП (Учебная группа)</th></tr>");
for(result in res)
{
html.append("<tr><td>"+res[result].Name +"</td><td>"+res[result].email +"</td><td>"+res[result].courseName +"</td><td>" +res[result].courseDescription+"</td></tr>");
}
html.append("</table>");
//return HtmlService.createHtmlOutput(out[0]);
return html;
}
function listCoursesHTML() {
var courses = [];
var ownerId = [];
var pageToken = null;
var optionalArgs = {
pageToken: pageToken,
pageSize: 9999
};
var results = [];
while (true) {
var response = Classroom.Courses.list(optionalArgs);
// @ts-ignore
var courses = response.courses;
if (!pageToken) {
break;
}
}
if (courses.length === 0) {
Logger.log("No courses found.");
} else {
Logger.log("Courses:");
// @ts-ignore
for (course in courses) {
// @ts-ignore
results.push({
"Name": getName(courses[course].ownerId),
"email": getEmail(courses[course].ownerId),
"courseName": courses[course].name,
"courseDescription": courses[course].description
});
}
}
return results;
}
function getEmail(id) {
return Classroom.UserProfiles.get(id).emailAddress;
}
function getName(id) {
return Classroom.UserProfiles.get(id).name.fullName;
}
Apps 腳本提供了一個關於最佳實踐的良好指南,以保持您的代碼干凈,特別是為了保持它的效率。
可能與您的案例場景相關的一種方法是使用批處理操作,而不是一一設置元素。
此外,在使用潛在的無限循環( while(True)
)時請非常小心,並嘗試將其替換為 if if(pageToken)
或 while ,具體取決於變量while(pageToken)
。
正如@Cooper 提到的那樣,不建議將其用於迭代 arrays,因為它旨在迭代 object 的屬性,因此與 ZA3CBC3F9D0CE2F2C1554E1B671ZD71 一起使用時其性能可能會下降。 如本文所述,最好對 arrays使用簡單for
循環或forEach循環。
最后,我建議您進一步閱讀並在append 、 innerHtml和html()之間進行性能測試,因為根據具體情況,它們在性能方面可能會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.