インラインJavaScriptは良いですか、悪いですか?


16

現在、WordPressからYiiフレームワークに切り替えており、外部の開発者がサイトを再構築しています。

私が気づいたことの1つは、彼がYiiの方法でAJAX / jQueryを呼び出すたびに、WebページにインラインJavaScriptを挿入することです。JavaScriptコードはフッターの下に配置されているようですが、まだインラインです。

一般に、JavaScriptコードはWebページ内により頻繁に配置されるようです。JavaScriptスクリプトは、可能な限りJavaScriptファイルに配置する必要があると常に考えられてきました。これは今後の「新しい」トレンドですか?または、JavaScriptコードを別のファイルに保存することを試みるべきですか?


JavaScriptをWebページにインラインで挿入するはどういう意味ですか?
サルマンA

3
この質問を見つけて、のようなものを考えている他の人のために<a onClick="function(){/* do stuff */} ">Click Here</a>これは、私は理解して、非常に悪いとみなされ、1つは、そのHTMLを参照してくださいから自分のコードを区切る必要があります。この記事
TecBrat

1
@ user1066946 t.co/j1RpJgwoku :-)
コス

1
@ user1066946私は実際に角度を使用してのように、私は「セマンティックウェブ」は(DOMの隣にあるいくつかのグルーコードを維持するという点で)円を作ったことが観察
コス

1
「JavaScriptコードはフッターの下に配置されているように見えますが、まだインラインです。」- 「TecBrat が参照する」「インライン」JavaScriptではなく、埋め込み JavaScript を参照しているように聞こえます。
MrWhite

回答:


13

インラインJavaScriptはページのダウンロード時間を増やしますが、これは良くありません。.jsファイルへの呼び出しでは、少なくともこれらは並行呼び出しであり、コンテンツのダウンロード時間が短縮されます。はい、JavaScriptをHTMLコードに直接挿入しても問題ない場合がありますが、多くの場合、これを可能な限りオフロードする方が適切です。

ページのダウンロード時間(つまりHTML)は、すべてのリソース呼び出しがランキングに影響するメトリックに影響を与えるわけではないことに注意してください(PageRankまたはSERPでは関係ありません)。ポイントは、それがSEOのサイトのパフォーマンスに影響を与えるということです。


7
同じ量のデータをダウンロードするために、おそらく同じホストへの2番目の接続のネゴシエーションは、アクティブストリーム内よりも高速ですか?通常、ホストへのファイルでたとえば50Kbpsを取得した場合、2番目のセッションを開始すると、両方が25Kbpsになるようにカットされることがあります。ホストが何らかの理由で接続ごとに調整している場合を除きます。
EkriirkE

ただし、外部ファイルには欠点があります。適切に行われない場合、DOMblockingコードを作成します。つまり、doc.readyトリガーが遅くなり、認識される速度に影響します。適切に行われている場合でも、外部に移動するための方法である
マルタイン

4
.jsファイルはキャッシュに適していますが、同じホストへの2つの接続がダウンロード速度を魔法のように速くすることは意味がありません。

帯域幅を分割するという考えは、私はあなたのロジックを理解しており、完全に間違っているわけではありませんが、少し誤解を招く可能性があります。HTMLは小さく、時間がかかりません。後続の呼び出しは実際に待機できます。
closetnoc

3
時間を愛するなら、帯域幅を見るのは間違っています。ロード時にプロファイラーを見てください。通常、接続時間は実際のデータ交換時間よりも10〜100倍長くなります。これは、断片化が実際の問題であることを意味し、本当に小さなjsに外部の専用ファイルを使用することは、インラインでは最悪かもしれません。インラインは、より良い本物の並列化を行いませんブラウザ上で
Lesto

29

私の通貨換算サイトでは、セッションの大部分は単一ページビューです。これは、ユーザーがランディングページで通貨計算を直接実行できるためです(すべての計算はJavaScriptを使用してクライアント側で処理されます)。

私のページは、すべてのリソース(css、js、さらには画像)がページ内にインラインである場合、約半分の時間でダウンロードおよびレンダリングされます。複数のページを表示するユーザーは非常に少ないため、これらのリソースの一部がページビュー間でキャッシュされることによるメリットはあまりありません。

私のサイトは典型的ではありません。ほとんどのサイトには、セッションごとに複数のページがあり、画像が大きいために私の手法の適用性が低くなります。この質問に対する正しい解決策はありません。サイトによって異なります。ユーザーの典型的な行動に基づいて、自分で測定する必要があります。


12

HTMLファイル内にJavaScriptを含めることは必ずしも悪いことではありませんが、判断を下す必要があります。

複数のページで大量のJavaScriptが使用されている場合、それ悪いことです。その場合、JavaScriptは外部の圧縮されたキャッシュ可能なファイルである必要があり、サイトのトラフィックが非常に多い場合は、CDNを使用する必要があります。

ただし、JavaScriptの量が少ない場合、外部ファイルに保存することは、それを取得するために追加のHTTP要求を作成する必要があるという事実によって無効になる場合があります。この場合、ページにJavaScriptを保持する方が効率的です。

繰り返しになりますが、このJavaScriptの小さなスニペットを複数のページで使用する場合、キャッシングを利用するために外部ファイルに配置することが有益です。

最終的に、追加のHTTP要求を行うオーバーヘッドとJavaScriptのサイズを比較検討する必要があります。ほとんどの場合、「平均的な」サイトの場合、おそらく外部ファイルに配置するだけで大​​きな違いは生じません。


4

私はYii開発者であり、Yiiはこれとは何の関係もありません。それは、開発者側で完全に彼または彼女は別のファイルにJavaScriptコードを入れて、とHTML(ビュー)ページに登録するかどうか、CClientScript::registerScriptFileメソッドまたはビューに直接(HTML)コードを、それを入れて使用して登録CClientScript::registerScriptする方法を。

あなたの答えによると、ほとんどの(プロ?)Yii開発者は最初のアプローチに強く投票します。つまり、できるだけ多くのJavascriptコードを別々のファイルに保存します。したがって、これは間違いなくコーディングの新しいトレンドではなく、開発者の悪い習慣です。少なくとも、それはYiiコミュニティで見られる方法です。

編集:実際、私は最も重要な議論を忘れていました。Yii(および他のほとんどのプロフェッショナルなPHPフレームワーク)は、MVCデザインパターン(実際にはアーキテクチャパターン)に基づいて構築されています。また、同じパターンを正面で使用できます。HTMLコードはモデル(データ)、CSSはビュー(装飾)、Javascriptはコントローラーです。それらはすべて、個別のファイル.jsおよび.cssファイルに入れられます-最適化されたシナリオで縮小、難読化、およびgzip圧縮されています。

Yiiアプリケーションを構築するとき、MVCパターンを壊して、すべてを同じファイルに保存できます。問題は、そうする価値はありますか、何の利点がありますか(どれもありませんか?)、それはどこにあなたを導くでしょうか?JSコードをインラインに保持するかどうかを尋ねるときに、同じ引数を使用できますか?


OK。開発者はすべてにサードパーティのウィジェットを使用しているようです。オートコンプリート、ajax画像のアップロードなど。これらすべてがインラインjsを追加します。
スティーブン

いいえ、同意できません。私はYiiアプリケーション(おそらくYiiの最大の拡張機能と巨大なウィジェットのセット)でTwitter Bootstrapを使用していますが、他の多くのYiiの拡張機能もインラインJSを使用していません。開発者は、インラインJavascriptのみを使用するウィジェットと拡張機能を見つけるために本当に幸運である必要があります。独自の拡張機能の作成を開始するにはYiiを十分に経験する必要があります(ただし、非常に記述が不十分な少数の例外を除く)。
トレジェ

Yiiでサードパーティの拡張機能とウィジェットを使用するのは素晴らしいアイデアです(車輪を再度発明する必要はありません)。しかし、Yiiアプリケーションまたは拡張機能でインラインJSコードを使用することは、本当に悪い態度です。開発者に、より良いコードの記述/より良い拡張機能とウィジェットの使用を強制するか、...より良い開発者を獲得してください!:]
trejder

OK、フィードバックをありがとう。Stackoverflow以外に、良いYiiコミュニティはどこにありますか?
スティーブン

Yiiフォーラム。ほとんどのページは自由にアクセスできます。アカウントを登録してログインする必要がある人もいます。Stack OverflowのほとんどのYii開発者は、フォーラムに独自のアカウントを持っています。6年近く存在していたYiiフレームワークは、大規模な開発者コミュニティを獲得しているので、注意深く見てみると、ローカルコミュニティや近所のYii開発者をほとんど見つけることができないはずです。幸運を。
trejder

3

実際には、開発中のWebページの目的によって異なります。

少量のインラインJavaScriptを使用しますが、サイズが大きい場合は外部JavaScriptファイルを使用します。

いずれにせよ、ページがJavaScriptをロードするとき、最初に実行する必要があります。ベストプラクティスは、外部JavaScriptを使用してページコンテンツを長くしないことです。また、デバッグが容易になります。


2

答えは実際に何が行われているかによって異なります。

Webサイト全体で使用されているインラインJavaScript(Webサイトのすべてのページのヘッダー内に表示されるウィジェットなど)に気付いた場合は、「共通の」JavaScriptファイルに移動するのが適切です。

実際、単一のページで使用されている場合でも、できるだけ多くのJavaScriptを共通のJavaScriptファイルに移動します。JavaScriptファイルの強力なキャッシュと圧縮ヘッダーを送信するようにサーバーを構成します。ページのサイズは小さくなりますが、JavaScriptファイルのサイズはそれほど大きくなりません。

一方、JavaScriptが単なる設定オプション/初期化の束である場合、たとえば:

$(function () {
    myplugin({
        images: ["img1", "img2", "img3"]
    });
});

何らかの理由でコードを外部JavaScriptファイルに移動することができなかった場合(たとえば、画像パラメーターがデータベースから取得されている場合)、インラインで保持します。そうは言っても、「邪魔にならない」サードパーティのプラグインを選択します(またはそれらをプラグインとして変換します)。


2

これらの答えはマークを逃しています。見ていインラインキャッシングを

YiiはPHPでコーディングされているため、一般的な(または珍しい)PHPパターンは、開発者がサーバーで既知の状態、条件、または値に基づいてJavaScriptコードを動的に生成するPHPコードを記述する場合があることです-そして、それをすべて1つのバッチでクライアントに送信します。これにより、クライアントは関数を実行し、サーバーによって既に実行された計算の一部をスキップできます。

データ(サーバー上にあり、往復を必要とするデータ)が提供されるまでコンテキストを持たない.jsファイルの汎用Javascript関数の全束をクライアントに送信する代わりに、 Javascript関数の一部としてのコンテキスト/データ。これは、最初のページの読み込み時にアプリ全体を送信するのではなく、機能/データを一緒に送信し、クライアントがその時点で必要とする可能性がある機能/データのみを送信することを意味するため、th約です。また、個々のクライアントが必要とする可能性のある機能のごく一部を注入するだけなので、アプリ全体を最初のページの読み込み時に簡単にダウンロードしてリバースエンジニアリングする必要はありません。それがSEOの前兆であるかはわかりませんが、それに応じて最適化できると確信しています。

エンドユーザーがWYSIWYGエディターを使用してCMSソフトウェアでページを作成する場合を考えてください。このユーザーは、サーバー上のソース.jsファイルにアクセスできない場合、どのようにしてページに新しい機能を追加しますか?HTMLタブに切り替えて、インラインJavaScriptを使用します。

すべてのインラインJavascriptが悪いわけではありません。時々、onclickでも問題ありません。一般的な推奨事項として、インラインJavascriptを書くことは避けてください。そうすれば、良い習慣を身に付けることができます。

参照:


0

私が前に言ったように、通常、インラインJSコードは悪いです。

しかし、インラインJSが優れているユースケースを考えます。

JS駆動のギャラリーを挿入するCMSを考えてください。ギャラリーは、おそらくjQueryで行われます。id属性によって識別されます。id属性は、ページ上で一意であるだけでなく、サイト全体で一意です。この場合、JSコードは1ページでのみ使用され、HTTPオーバーヘッドがないため、インラインJSの方が良いと思います

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