我有一个侧栏附加组件在一个谷歌表上,显示时间相当慢(从触发侧栏显示到刷新大约7秒。
我试过用下面一个非常简单的服务器端脚本函数(只是返回一个虚值),它仍然需要同样的时间来显示(所以问题不在于服务器端函数的复杂性)。
有什么办法可以加快它的速度吗?
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>
这段代码对工作表本身没有任何作用,但从点击菜单到显示数据,需要7s。
解决方案:
试试这个。
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'));
}