すべてのページにメインJavaScriptをロードしていますか?または、関連するページに分割しますか?


13

私が持っている700kbすべてのページにロードされて解凍JSファイルを。12各ページにjavascriptファイルを配置する前に、httpリクエストを減らすために、すべてを圧縮しました1 file

このファイルはに~130kb gzipped提供されgzipます。ただし、ローカルコンピューターでは、すべてのページに展開されて読み込まれます。これはパフォーマンスの問題ですか?

firebugプロファイラーでJavaScriptのプロファイルを作成しましたが、問題は見られませんでした。私が直面している問題/幻想は、そのファイルに圧縮されたjqueryライブラリがあり、現在のページでは使用されないことがあるということです。

たとえば、jquery datatablesは200kb圧縮されており、2つのWebサイトページにのみロードされます。もう1つはjqplot、もう1つです200kb

私は今持っている400kb上で実行されていない余分なコードの80%ページの。

すべてを1つのファイルに残す必要がありますか?

jqueryライブラリを取り出し、現在のページに関連するJSのみをロードする必要がありますか?


700kbのJSコードがある場合は、実際に再分割し、本当に必要なスクリプトのみを含める必要があります。また、jQueryを使用すると(「…書き込みを少なくして、もっと行う...」)、このような巨大なJSファイルがあると少し大きすぎるようです。このような大量のJSで何をしているのですか?
-Feeela

@feeelaはjquery-ui、jquery.datatablesを調べます。これらは単独で400kbです。jquery.validate、jquery.uniformなど、私が使用している他のプラグインもあります。xD-
カイル

その場合-以下で述べたように-本当にスクリプトを分割し、必要なものだけをロードする必要があります
...-feeela

回答:


6

requirejsを使用して、そのページでのみ必要なライブラリを動的にロードできます。次に、すべてのページにrequirejs(約14k)を読み込むだけで、約385kb節約できます。

統合も非常に簡単です。必要なものを含むコードを「ラップ」するだけです。

require(["jquery", "jquery.alpha", "jquery.beta"], function($) {
    //the jquery.alpha.js and jquery.beta.js plugins have been loaded.
    $(function() {
        $('body').alpha().beta();
    });
})

1
私はそのウェブサイトのデザインが本当に好きです。requirejsについて聞いたことがありません。これをhttpリクエストに対してどのように評価しますか?これにより、ページにさらにHTTPリクエストが追加されないでしょうか?(それは悪くないですか?)私の愚かな質問でごめんなさい。
カイル

もちろん、リクエストの数は少ない方が良いですが、350k以上の節約もそれほど悪くありません。はい、あなたのサイトが作成されます1つのあなたは、そのページ上の別のライブラリが含まれている場合はより多くの要求を。datatablesあるサイトとjqplot別のサイトにある場合、それは問題ありません。ページの50%にさらに5つのライブラリをロードすると、利点がなくなります、と私は同意します。しかし、あなたの場合、私はそれを非常に良い解決策と考えています(あなたの残りのjsは1つのgzipされたファイルのままであると仮定します)。
マイケル

マイケルに感謝します。このソリューションはかなり素晴らしいです。1ページですべてを分割する前に、これは...これは、私が考えていたものよりも優れています。この提案をありがとう。requirejsに精通しているので、requirejsで十分だと思いますか?一部のウェブサイトでは、Googleを使用してjqueryや他のライブラリをロードしていますgoogle.load('...')
カイル

1
Google(またはそれを提供する他のサイト)から共通ライブラリをロードすることを強くお勧めします。これには2つの利点があります。a libファイルは異なるサイト間でキャッシュされます。ユーザーが以前にサイトにアクセスした可能性があり、Googleからロードされたjqueryも使用します。このファイルは、サーバーからではなく、キャッシュからロードされます!b)は、それがあっても持ってロードされるように、それはあなた自身のウェブサーバからよりも、GoogleのCDNからそれをロードするためにはるかに高速になります。
マイケル

8

フレームワーク/ CMS /何でも適切な機能がある場合、@ Michaelが示唆するようにスクリプトを条件付きで含めることができますが、追加のライブラリはありません。

たとえば、データテーブルの場合、WordPressは次のような状況を処理します。

// For reference; this isn't functional code.
if (is_page('whatever')) {
    <script src="/path/to/datatables.js"><script>
    <script>
        [Your datatables setup here]
    </script>
}

RequireJSには何の問題もありません。追加する複雑さのレベル(さらに、そもそも使用することを学ぶこと)が、より簡単に入手できるツールでできることを相殺するかどうかを評価する必要があります。上記の2つのケースしかない場合、これはより良いオプションかもしれません。さらに多くのことが行われている場合は、RequireJSが全体的に優れたアプローチである可能性があります。


themeforestから購入したhtmlテンプレートから作成したカスタムWebサイトがあります。唯一の問題は、男が6個のJSファイルを散らばっていて、面倒だったことです。そのため、これらを1つのファイルに配置し、jqplot、datatables、jquery-uiといういくつかのライブラリを含めました。それらはすべて合計で約550〜600kbです。100kbは、これらのライブラリを使用する私のJSです。関係のないJSライブラリをすべてのページにロードする代わりに、これを修正する必要があると思います。提案ありがとう!=)
カイル

5

JavaScriptの700kbは、ページの読み込み後に解析する必要があるため、パフォーマンスの問題です。そのため、必要なスクリプトのみがロードされるように注意する必要があります。単一のページを離れることなくナビゲーションが内部的に処理される場合、GMailなどのフルAJAXサイトで1つの大きなJavaScriptで問題ない場合があります。ただし、完全なAJAXサイトでさえ、動的なJSロードを実行して、開始時に不要なJSをロードしないようにします(メモリと速度の両方の問題)。

HTTPトラフィックを減らしたいと言ってきました。HTTPキャッシングで遊ぶ必要があります。問題は、有効期限を高く設定した場合、キャッシュの有効期限が切れるまでJSへの変更が表示されない可能性があることです。

トリックは、あなたが参照していないこと、しかし、そこにあるmyscript.js、しかしmyscript.js?version={myversion}。アプリケーションの更新後にを変更し、{myversion}JavaScriptのリロードを強制します。


うん、JSのこのサイズで、ほとんどがかなり一般的なライブラリであるという事実と相まって、CDNの使用は大きな利点になります。
Zhaph -ベンDuguid

1

JavaScriptの〜700kbはパフォーマンスの問題であり、圧縮されている場合、コードを最適化する際に従うべきルールを確認する必要があります。

  1. Javascriptの最小化 -単に圧縮と解凍を行いますが、コードは削減されませんでした。まず、優れたMinify JSツールを使用して、コードを最小化します。あなたは12のファイルであり、各ファイルは最高のパフォーマンスを得るためにクラブする前に個別に縮小します。

  2. 非同期JavaScriptの読み込みを使用します。非同期読み込みを使用すると、ページの読み込み時間が非常に速くなり、レンダリングが行われます。優れた非同期読み込みはレンダリングプロセスをブロックせず、ページの読み込み時間を大幅に短縮できるため、ユーザーへの影響は非常に大きくなります。javascriptがロードされていないため、画像やその他の表示アイテムは定期的に表示されます。

  3. JQUERYにGOOGLE cdnを使用します。JQUERYを使用し、独自のWebサイトから読み込んでいると思いますが、これも追加のデメリットです。GOQUELECDN(無料)を使用してJQUERYを読み込んでください。ほぼすべての3番目のWebサイトで使用されているため、キャッシュ内のクライアントコンピューターで既に利用可能です。

  4. カスタムの長いExpiresヘッダー:読み込み時間の問題で Webサイトがどのように読み込まれるかについては、HTTP JSファイルのLong Expiresを指定する必要があります。私の調査によると、2ページ目にかかった読み込み時間は、1回目のページ訪問に比べて多くの離脱があります。

  5. ページ速度で確認する:他のリソースもページの読み込み速度に優しくクロスチェックし、他のリソースも最適化しようとする場合があります。すべてのリソースで少しずつステップを実行すると、JSのロードに余分な時間がかかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.