1

私はグーグルアプリスクリプトのHtmlServicesに取り組んでいます。このスクリプトでは、オートコンプリートとDataTableの2つの機能を実装しました。これには、多くのjsファイルとcssファイルが使用されていました。すべての機能は正常に機能していますが、スクリプトが読み込まれると、時間がかかりすぎます。スクリプトが完全にロードされると、正常に機能します。このスクリプトはWeb上で公開されています。

それで、ロード時間を最小化するためのアプローチはありますか?

4

2 に答える 2

2

doGet()起動時からgoogle.script.run初回実行時までにかなりのタイムラグがあるようです。テンプレートにテキストを設定するための単一の jQuery 呼び出し以外は何もしない (デモ アプリに基づく) アプリと同様の構造を持つ Simple というダミー アプリを作成しました。

doGet()index.htmlテンプレートをロードします。index.htmlさらに単純化するために、テンプレートに CSS と Javascript を含めました。

テンプレートを読み込んだ後、すぐにテンプレートを評価するように doGet() をセットアップします。

評価時に、何もせずに null を返すgoogle.script.runダミー関数を呼び出します。code.gs成功すると、javascript を呼び出してページを更新し、単一の jQuery を実行して html 要素を更新します。テンプレートには「Hello world!」があります。その中で、これは「Hello other world!」に置き換えられます。

これは、取るに足らないことです。テンプレートはすぐに読み込まれ、「Hello world!」と表示されます。ただし、1 回の jQuery 呼び出しでコンテンツが更新されるまでに約 6 秒かかります。このパフォーマンスは、実際のアプリケーションが行っていることを反映しています。アプリが JavaScript に到達すると、その後の google.script.run の呼び出しは非常に高速です。

興味深いことに、doGet()Web 開発環境内で評価でき、0.5 秒未満で実行され、jQuery 参照を含むすべての適切な呼び出しが行われたことを確認する実行トランスクリプトが表示されます。

これは、いくつかのことを示しています。まず、doGet()テンプレートの読み込みと表示 ( の呼び出し時template.evaluate()) が非常に高速です。への最初の呼び出しgoogle.script.runは遅延があるようですが、アプリが Web に表示された場合のみです。後続の への呼び出しは非常に高速です。これは、URL を介して渡された変数を使用してgoogle.script.run呼び出すことでページを更新できるフォームを備えた作業中のアプリで実証されています。google.script.run

この遅延により、私が考えることができるほとんどのWebベースのアプリにとって、Webアプリ用のGoogle Appsスクリプトは魅力的ではありません. 環境には他にも魅力的なものがたくさんあるので、これは残念です.

リクエストがあれば、喜んでサンプル コードを共有します。また、Google がこれを認識しているかどうか、また、この問題についてどのようなスタンスを取っているかを知りたいです。コードは以下に含まれています。

code.gs:

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;
}

index.html

<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>

于 2015-07-01T20:36:40.570 に答える
1

私は同じ問題を抱えていましたが、スクリプトの設計方法が問題の原因であるという結論に達しました。もともと、ページ全体を構築してユーザーに提示するようにスクリプトを設計しました。スクリプトが開始されたとき、最初のページが表示されるまでに時間がかかり、ページが遅く見えるように見えました。遅かった。

すぐに表示される「読み込み中...」タイプのページを表示するように切り替えています。ロード後、サーバーへのコールバックを実行してページの残りの部分を作成し、それをクライアント スクリプトに戻して表示します。私はまだこれで完全に終わっていませんが、有望に見えます。

Cajaに依存しているため、GASが高速になるかどうかはわかりません。したがって、コードで適切な設計を使用して、可能な限り支援する必要があります。

于 2012-12-18T12:30:01.273 に答える