1

最適化の問題があります。私のサイトでは 2 つの (かなり大きな) JavaScript リソースを使用しています。

  1. application.js (最小化された jquery、jquery-ui、underscore-js、および一部の共有スクリプト、合計 120KB)
  2. コントローラー固有のファイル (ページ + インタラクションに必要ないくつかのモジュール、合計 4KB)

JavaScript でマークアップをフォーマット/変換するビューにいくつかのスクリプトがあるため (jQuery とコントローラー固有の JS コードの両方に依存)、$(document).ready または head.ready のいずれかを待つ必要があり、それはスタイル設定されていないコンテンツのフラッシュを防ぐためにウェブサイトを非表示にします :(

ここで私の質問があります: head.js を使用する必要がありますか、それとも「前の」スクリプトに固執する必要がありますか? この場合、ページの読み込み時間を短縮するスマートな方法はありますか?

更新: コードの一部は次のとおりです (完全なコード、ランディング ページについては、vsio.com を参照してください)。

<html>
  <head>
    ... usual stuff
    <link (css stuff) />
    <script src="head.js"></script>
    <script>
      // Here some global variables are set like cache keys, actual locale code etc., not dependable on jQuery or any other JS code from the JS assets
    </script>
  </head>

  <body>
    ... page content

    <div id="search">!-- here some code with the "display: none" style to prevent flash of unstyled content</div>
    <script>
      // Here is code that positions and processes some styles and adds some interactions to the #search div
      Application.Position.In.Center($(#search), $(document));
    </script>

    ... more page content

    ... another "display: none" div and accompanying script

    ... rest of the page content

    <script type="text/javascript">head.js( { 'application': 'application.js' }, { 'landing': 'landing.js' } );</script>

  </body>
</html>
4

4 に答える 4

2

まず、次の質問を自問してください: ユーザーが自分のページにアクセスしたときに、この JavaScript をすべてロードする必要は本当にあるのでしょうか?

Web サイトを最初にロードするときは、実際にはオートコンプリート機能のみが必要であり、残りはロード時に必要ありません。したがって、別のアプローチに進むことができます。私のアドバイスは次のとおりです。

  • JavaScript 機能を使用せずにこのページを作成してから、JavaScript で拡張し、インライン スタイルとスクリプトを削除します。
  • これを行った後、実際に必要なスクリプトをロードします。これは、頭の中または本体の最後の直前で行うことができます
  • Jquery、jquery-ui、アンダースコア、その他のライブラリには CDN を使用します。ユーザーが別の Web サイトからこれらのライブラリを既に読み込んでいる場合は、パフォーマンスが向上します。
  • 最後に、後で必要な JavaScript を既に非同期でロードしているため、ユーザーは比較ボタンを押したときに既にスクリプトを取得しています。

小さな調整:

  • ySlow などのツールやお気に入りのブラウザーのネットワーク グラフを使用して、ボトルネックを探します。gzip が有効になっていないようです。試してみてください。
  • あなたは本当にfacebook/google/twitter/サードパーティのものを頭にロードする必要がありますか、それともページがロードされたときにそれを行うことができますか?
  • サーバーは可能な限り高速ですか?HTML を取得するのに約 0.5 秒かかるようです。

少しでもお役に立てれば幸いです。パフォーマンスの微調整を頑張ってください!

于 2013-02-11T14:03:27.237 に答える
0

ページのビューソースを見ました。

  1. レンダリングをブロックできるインラインスクリプトがいくつかあります。このような

Application.i18n = {"比較":{"off_ratio":

詳細はこちら。http://calendar.perfplanet.com/2012/deciphering-the-critical-rendering-path/

簡単な方法:ボディタグの最後に移動します。最善の方法:外部スクリプトとしてロードする必要があります-非常に優れたキャッシュヘッダーを使用します。おそらく、あなたはそれを次のように行っています-ユーザーロケールに基づいてそれらのメッセージをロードする必要があります-ビルドプロセス中にロケールごとに個別のJSファイルを作成できます-それらは適切なキャッシュヘッダーを持つ外部JSファイルとしてリンク/ロードできます

もう1つの理由は、インラインスクリプトが必要になる理由です。これは、初期読み込み時間を記録するためです。これは必要ありません-最近のブラウザはパフォーマンスのタイミングを提供してくれるからです。

http://www.html5rocks.com/en/tutorials/webperformance/basics/

CSPを試す場合は、外部スクリプトファイルとして移動することで(サイトのセキュリティにも役立ちます)。

http://updates.html5rocks.com/2012/11/Content-Security-Policy-1-0-is-officially-awesome

  1. 延期/非同期属性。

ga.jsは非同期属性で設定されていますが、他のJSファイルはdefer属性で試すことができます。また、一般的な経験則として、リソースの読み込みを可能な限り遅らせ、必要な場合にのみ読み込みます。

  1. window.onload-$ .ready $ .readyでスクリプトの実行を開始すると、常にwindow.onloadよりも優れたものになります。window.onloadはすべての画像の後でのみ起動するため、内部のiframeが読み込まれます。

次のリンクが役立つ場合があります。

https://developers.google.com/speed/

プログレッシブJPEGはhttp://calendar.perfplanet.com/2012/に投稿されてい ます

http://blog.chriszacharias.com/page-weight-matters

http://www.igvita.com/2013/01/15/faster-websites-crash-course-on-web-performance/

さらに多くの最適化が可能です。ではごきげんよう。

于 2013-02-17T14:24:13.543 に答える
0

固定スタイルですべてのページをカバーするマスク レイヤーを配置し、読み込みプロセスが終了したときにそれを非表示または破棄することができます。そうすれば、各コンテンツを非表示にする必要がなくなり、代わりに mask div でカバーされます

于 2013-02-11T10:36:13.453 に答える