簡體   English   中英

Google App Script:識別代碼的性能/執行速度瓶頸部分

[英]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循環。

  • 最后,我建議您進一步閱讀並在appendinnerHtmlhtml()之間進行性能測試,因為根據具體情況,它們在性能方面可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM