Отображение аддона на боковой панели - какой способ сделать быстрее? - PullRequest
2 голосов
/ 22 апреля 2020

У меня есть надстройка боковой панели на листе Google. Время отображения довольно медленное (около 7 секунд с момента запуска отображения боковой панели до refre sh.

. Я попробовал использовать очень простую функцию сценария на стороне сервера, приведенную ниже (просто вернуть фиктивное значение), и все равно требуется столько же времени для отображения (так что проблема не в сложности функции на стороне сервера).

Можно ли что-нибудь сделать, чтобы ускорить ее?

code.gs

function onOpen(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name: "Show sidebar", functionName: "showSidebar"}]; 
  ss.addMenu("TestMenu", menuEntries);
}


function getDataDummy() {
  return {data: "foo"};
}

function showSidebar() {
  var ui = HtmlService.createTemplateFromFile('TestSidebar')
      .evaluate()
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setTitle("Title");
  SpreadsheetApp.getUi().showSidebar(ui);
}

TestSidebar. html

<div class="sidebar branding-below">
  <p>
  Test
  </p>
  <div class="block div-table" id="sidebar-record-block">
  <div id="field-data" class="div-table-row"><div class="div-table-td"><input type=text id="data" /></div></div>  
  </div>
  <div class="block" id="sidebar-button-bar">
  </div>
  <div id="sidebar-status"></div>
</div>

<?!= HtmlService.createHtmlOutputFromFile('TestSidebar.javascript').getContent(); ?>

TestSidebar. javascript

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
  $(function() {
    google.script.run.withSuccessHandler(showData).getDataDummy();
  });

  function showData(record) {
    if (record && record["data"]) {
      $("#data").val(record["data"]);
    }
  }
</script>

Этот код ничего не делает с самим листом, но от щелчка по меню до отображаемых данных - 7 секунд.

1 Ответ

0 голосов
/ 22 апреля 2020

Попробуйте это:

function getDataDummy() {
  return {data: "foo"};
}

function showSidebar() {
  var html='<html><head><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script><link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"><script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script></head>';
  html+='<body><div class="sidebar branding-below"><p>Test</p><div class="block div-table" id="sidebar-record-block">';
  html+='<div id="field-data" class="div-table-row"><div class="div-table-td"><input type=text id="data" /></div></div>';
  html+='</div><div class="block" id="sidebar-button-bar"></div><div id="sidebar-status"></div></div>';
  html+='<script>$(function(){google.script.run.withSuccessHandler(showData).getDataDummy();});function showData(record) {if(record && record["data"]){$("#data").val(record["data"]);}}</script>';
  SpreadsheetApp.getUi().showSidebar(HtmlService.createHtmlOutput(html).setTitle('No Title'));
}
...