Google apps script 如何最小化google脚本的加载时间?

Google apps script 如何最小化google脚本的加载时间?,google-apps-script,Google Apps Script,我正在研究谷歌应用程序脚本的HtmlServices。在这个脚本中,我实现了两个功能,Autocomplete和DataTable,因为它使用了许多js和css文件。所有功能都运行良好,但当加载脚本时,会花费太多时间。一旦脚本被完全加载,那么它就可以正常工作了。此脚本发布在web上 那么,有什么方法可以最大限度地缩短加载时间呢?我也遇到过同样的问题,但得出的结论是,我是如何设计我的脚本导致了这个问题。最初,我设计脚本构建整个页面,然后将其呈现给用户。当脚本开始时,第一页似乎需要很长时间才能呈现,

我正在研究谷歌应用程序脚本的HtmlServices。在这个脚本中,我实现了两个功能,Autocomplete和DataTable,因为它使用了许多js和css文件。所有功能都运行良好,但当加载脚本时,会花费太多时间。一旦脚本被完全加载,那么它就可以正常工作了。此脚本发布在web上


那么,有什么方法可以最大限度地缩短加载时间呢?

我也遇到过同样的问题,但得出的结论是,我是如何设计我的脚本导致了这个问题。最初,我设计脚本构建整个页面,然后将其呈现给用户。当脚本开始时,第一页似乎需要很长时间才能呈现,这使得页面看起来很慢。很慢

我现在正在切换到显示快速显示的“加载…”类型页面。加载后,它对服务器进行回调以构建页面的其余部分,并将其传递回客户端脚本以显示页面。我还没有完全完成这项工作,但它看起来很有希望


我不确定气体是否会很快,因为它依赖于Caja。因此,我们需要在代码中使用良好的设计来尽可能地提供帮助。

doGet()
启动和
google.script.run
第一次执行之间,似乎存在明显的延迟。我创建了一个名为Simple的虚拟应用程序,它的结构与我的应用程序(基于演示应用程序)类似,它只执行一个jQuery调用来设置模板中的文本

doGet()
加载我的
index.html
模板。我在
index.html
模板中包含了CSS和Javascript,以进一步简化工作

我设置doGet()以在加载模板后立即对其求值

在计算时,
google.script.run
调用
code.gs
中的伪函数,该函数不执行任何操作并返回null。成功后,它调用一个javascript来更新页面,该页面执行一个jQuery来更新我的html元素。模板中有“Hello world!”,这将替换为“Hello other world!”

这是一件微不足道的事情。该模板几乎立即加载,显示“Hello world!”,但通过单个jQuery调用更新内容大约需要6秒钟。这种性能反映了我的实际应用程序正在做什么。一旦应用程序访问javascript,随后对google.script.run的调用就会非常快

有趣的是,我可以在web开发环境中评估
doGet()
,它在半秒内运行,执行记录确认所有适当的调用(包括jQuery引用)都已执行

这说明了一些事情。首先,
doGet()
正在快速加载和显示模板(调用
template.evaluate()
)。似乎对
google.script.run
的第一次调用就是延迟的地方,但只有当应用程序出现在web上时才会出现延迟。随后对
google.script.run
的调用非常快,这可以从我的工作应用程序中看出,它有一个表单,我可以通过调用
google.script.run来更新页面,并通过URL传递一个变量

这种延迟使得谷歌应用程序脚本对于我所能想到的大多数基于网络的应用程序来说毫无吸引力。这是不幸的,因为环境中有太多其他因素使其具有吸引力

我很高兴应要求与任何人分享我的示例代码。我也想听听谷歌是否意识到这一点,以及在这个问题上的立场。代码如下:

代码G.gs:
index.html

你好,世界!
/**
*在web应用加载时运行初始化。
*/
$(函数(){
//在此处调用服务器以检索构建页面所需的任何信息。
google.script.run
.withSuccessHandler(函数(内容){
//在这里响应成功条件。
更新显示(内容);
})
.withFailureHandler(函数(msg){
//在此处响应故障条件。
$('主标题').text(msg);
})
.getFolderContents();
});
函数updateDisplay(){
$(“#主标题”).text(“你好,另一个世界!”);
}


你完全正确。我也在努力实现同样的目标。但是,我无法在google脚本中调用两个html页面。当第一次运行脚本时,它会显示“加载…”类型页面,之后我回调返回另一个html页面的google脚本函数,但它不会显示。更新:代码现在运行得非常快,没有任何更改。我怀疑谷歌发现并纠正了这个问题。请尝试再次运行代码。如果它仍然运行缓慢,则可能与循环的设计效率低下有关。您可以随时尝试我上面发布的代码,以确保“最佳情况”ajax调用毫不延迟地工作。
function doGet(e) {
  Logger.log('start');
  var template = HtmlService.createTemplateFromFile('Index');
  // Build and return HTML in IFRAME sandbox mode.
  Logger.log('before template.evalute()');
  return template.evaluate()
      .setTitle('Web App Window Title')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  Logger.log('after template.evaluate()');
}


function getFolderContents() {
  var contents = 0;
  return contents;
}
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">

    <h1 id="main-heading">Hello world!</h1>

<!-- Use a templated HTML printing scriptlet to import JavaScript. -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
  /**
   * Run initializations on web app load.
   */
  $(function() {
    // Call the server here to retrieve any information needed to build the page.
    google.script.run
       .withSuccessHandler(function(contents) {
            // Respond to success conditions here.
            updateDisplay(contents);
          })
       .withFailureHandler(function(msg) {
            // Respond to failure conditions here.
            $('#main-heading').text(msg);
          })
       .getFolderContents();
  });

  function updateDisplay() {
    $('#main-heading').text("Hello other world!");
  }
</script>