簡體   English   中英

Google Apps腳本解析緩慢

[英]Google apps script slow parsing

我試圖使用Google Apps腳本解析vmstat,以便公司中的每個人都可以使用它來創建數據圖。 您可以在這里找到我的代碼,但是這段代碼確實很慢。 我有什么辦法可以做得更好,或者Google Apps腳本不適合這樣做嗎? 問題是需要處理的行數。 歡迎任何建議。

  function doGet(){

  var file = DriveApp.getFileById(id)

  var docContent = file.getAs('application/octet-stream').getDataAsString();
  var data = Charts.newDataTable()
                   .addColumn(Charts.ColumnType.STRING, 'TIME')
                   .addColumn(Charts.ColumnType.NUMBER, 'Memory');

  var lines = docContent.split("\n");
  Logger.log(lines.length);
  var i = 1;

  lines.forEach(function(line) {
    if ((line.indexOf('mem') < 0) && (line.indexOf('free') < 0)) {
      var values = line.match(/\S+/g);
      data.addRow(['5',parseInt(values[3])]); 
      Logger.log(i)
    }
    if (i == 20){
     return;
    }
    i++;
  }); 

  for( var i=0;i< lines.length;i++){
      data.addRow(['5',10]); 
  }
  data.build();

  var chart = Charts.newAreaChart()
      .setDataTable(data)
      .setStacked()
      .setRange(0, 400)
      .setTitle('Memory')
      .build();

 return UiApp.createApplication().add(chart);

}

與分工一樣,這不是代碼優化的問題(盡管代碼不是完美的)。

公認的Web應用程序性能優化方法涉及三個方面的分離: 演示,業務邏輯和數據訪問參考 除了生成vmstat輸出之外,您已經將所有內容都放在了一個地方,使用戶等待在Google雲端硬盤上找到文件時(使用兩次詳盡的搜索,順便說一句),然后將其解析為Charts DataTable ,最后生成HTML(通過UiApp)。

您可能會發現Google Apps腳本演示文稿的可訪問性對您的組織很有用。 (例如,在我的工作場所中,我知道我們的IT人員會使用內部Web服務器。)如果是這樣,請考慮您擁有的原型,然后對其進行重構以提供更好的感知性能。

  • 演示:從UiApp +圖表移至HtmlService + Google可視化。 這會將圖表的生成移至Web客戶端,而不是將其保留在服務器中。 這樣可以加快頁面加載速度。

  • 業務邏輯:這是將您的數據映射到可視化中的規則。 像在其之上構建的Charts Service一樣,GViz使用具有列定義和數據行的DataTables。

    這里的一種選擇是重復列定義和數據加載,除了在JavaScript的客戶端上。 這樣做將比通過Google Apps腳本快得多。

    第二種方法是更快地(尤其是對於大型數據集)更快,是從數組中加載數據。

     google.visualization.arrayToDataTable(...) 

    無論哪種方式,您都需要將數據傳遞到將構建圖表的JavaScript函數中。

  • 數據訪問:(我假設)您當前正在Linux中運行Shell腳本,該腳本調用vmstat並將輸出通過管道傳輸到本地Google Drive文件夾中的文件。 (或者,腳本可能使用Drive API將文件推送到Google Drive。)此文件為純文本。

    我在此處所做的更改將是從vmstat生成csv輸出,並使用Google Apps腳本將csv導入電子表格中。 然后,您可以使用Sheet.getSheetValues()讀取所有數據,這是從客戶端JavaScript調用的服務器端函數。

這不會像本地服務器解決方案那樣快,但是它可能是使用Google Apps腳本環境的最佳方法。

編輯:在我的博客文章“ 從UiApp +圖表服務轉換為HTML服務+ Google可視化API”中了解有關此內容的更多信息。

暫無
暫無

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

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