我正在尝试使用HTML服务的模态对话框为Google文档创建附加组件,但是运行我的脚本和对话框窗口中发生的事情之间的时间非常慢。
这是一个非常简单的例子。 (这有点黑客,因为从Example.html调用foo会覆盖第一个日志)
// Code.gs
function openDialog() {
var html = HtmlService.createHtmlOutputFromFile('Example')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
Logger.log("hi");
var temp = Logger.getLog();
DocumentApp.getUi()
.showModalDialog(html, temp);
}
function foo() {
Logger.log("bye");
}
和
// Example.html
<script>google.script.run.foo();</script>
如果我运行它,第一个日志和第二个日志之间的差异大约为4秒。这只是它的方式吗?
答案 0 :(得分:2)
简短的回答:是的。您的方法是调用服务器端函数的最佳方法之一。
长答案:每documentation,尝试loading data asynchronously。它说-
Templated HTML可用于快速构建简单的界面,但应限制使用它以确保UI响应。加载页面后,模板中的代码将执行一次,并且在处理完成之前,不会将任何内容发送到客户端。在scriptlet代码中包含长时间运行的任务会导致UI变慢。
您也可以尝试在用户界面中提供微调器/预加载器,这将有助于改善UX。
它也建议我们Use the HTML5 document type declaration,即
如果您的页面是使用较新的
IFRAME
sandbox mode来提供的,请确保在HTML文件顶部包含以下代码段。
<!DOCTYPE html>
希望这会有所帮助。