2013-08-12 9 views
5

私はlazyload.jsを使用していくつかのスクリプトを遅延読み込みしています。今ではlazyload.jsにすべてのスクリプトをロードするように指示するサイト全体のインクルードを使用することを考えていました。次に、これらのスクリプトのいずれかがすでにキャッシュに入っているかどうかをブラウザに判断させてもらいます(必要に応じてロードする)。ブラウザがまだブラウザのキャッシュにある場合、ブラウザはまだスクリプトを読み込みませんか?

これは、何かが既にロードされているかどうかをjsでテストしなくて済むようにします(そして、いくつかの追加リクエストのオーバーヘッドを受け入れる意思があります)。 それはうまくいくのでしょうか、何か見落としていますか?

答えて

3

を要求するために、ブラウザの裁量件まで私はハードの数字でこれを基づかないよさが、私はそれが安全の約75〜80%と言うことだと思います今日使用されているブラウザはスクリプトをキャッシュするのにかなり良い仕事をしています。 AFAIK、にはにはキャッシュされたスクリプトを使用させるようにブラウザを強制する方法がありますが、それはあなたが望むものではないので、それは問題ではありません。

はい、ほとんどのブラウザは、実際には、cahcedスクリプトを参照し、何度も何度もファイルを要求しません。もちろん、some people are concerned about their privacy、匿名/シークレットモード(別名ポルノモード)でのみウェブを閲覧します。
これにより、ブラウザのウィンドウが閉じるときに、ブラウザがキャッシュをクリアします。
なぜ気になりますか?まあ、私は、私はJSスクリプトを開発するときにこれを非常に便利見つける1つは、私は。
ハードリフレッシングは、ctrl + cのようなものです。私たちはすべて、その2つのキーを4〜5回押すことのうぬぼれを確かめるために成長させました。私は私の同僚がCTRL + F5と同じことが、あまりにも...

+0

スクリプトを怠惰に読み込む前に、大多数のブラウザがキャッシュをチェックすることは確かですか?私はまた、キャッシュに関係なく常にすべてがロードされると言う人からの回答を受け取ったので、今私は何を信じるべきか分からない。 –

+0

@ Samuel:私はlazyload.jsのソースを見てきました。実際には、新しいDOM要素(スクリプトタグ、github上の230行目のチェック)を作成し、それをDOMツリーに追加します。ブラウザは、そのドメインのキャッシュにスクリプトが含まれているかどうかをチェックし、そうであれば、ファイルを再度要求せず、キャッシュされたバージョンをロードします。そうでなければ、ファイルを要求します。私は他の回答をすばやく見てきましたが、あなたが答えを出して、いつも要求を実行すると言っているときに、あなたがどれを参照しているのかはよくわかりません。 –

+0

私はドミトリーの答えを(底部に)意味しました。しかしあなたの答えは、私が確信していたことを正確に説明しています。ありがとうございました! –

1

私はそれがあなたが説明したように機能しているのを見て、私はそれが動作していないのを見ました。しかし、二重負荷の発生も稀であり、オーバーヘッドがさらに大きくなります。要するに

+0

あなたの答えをありがとうが、私はあなたの最後の文を理解していません。正確にはどういう意味ですか? –

+0

真剣に、もしあなたが賞金を欲しがっているなら、少なくとも半分まともな答えを私に与えてください。あなたの答えがこのようにとどまるならば、私はあなたに恩恵を与えません。 –

+0

私は賞金について気にしません。第二に、私はそれが二重負荷と言うとき、キャッシュされたバージョンは、lazyloadの上にロードされます。それはJavaScriptの動作に影響を与えませんが、時にはそれがどれくらいの時間に基づいてそれを遅くすることができます。 – spriore

1

それは

ブラウザが明示的に指定しない限り、それがキャッシュに存在する場合、スクリプトのために要求しない可能性が最も高いですが依存しています。

しかし、それは完全にスクリプトやない...

+0

あなたの質問は私の注意を受けた:) @サムエル –

+0

答え、ありがとう、ありがとう。だから私はそれが思うほど簡単ではないと思う。基本的に答えは、場合によります。 –

+0

@Samuelまったく... –

1

レイジーローディングは、帯域幅の保全については、常にではないか、それはまた、CPU /バッテリーでやるべきことがたくさん持っていることに気付きました保存。ブラウザのキャッシュ内であろうとなかろうと、何かを遅延ロードすると、必要に応じてロードして、決して使用されないコードを無駄に実行することはありません。前もってすべてをロードすると、モジュールの80%が使用されているかどうかに関わらず、ページを訪れるたびにCPUとバッテリーに一定のコストがかかります。

モバイルデバイスのバッテリー寿命を節約するには、適切な遅延ロードアプローチを採用する方がよいでしょう。しかし、デスクトップの場合は、プリロードのコストが比較的少ないため、すべてをプリロードする方がよいです。

1

キャッシュ制御はどうですか?

<pre><code><meta http-equiv="cache-control" content="no-cache"></code></pre> 

多分、これはあなたにとって正しいことです。 詳細についてはhereをご覧ください。

+0

しかし、なぜ "no-cache"ですか?可能であれば、ブラウザにキャッシュされたバージョンを参照させたいからです。それは "公的"であるべきではありませんか?そして、すでに「パブリック」がデフォルトになっていないのでしょうか? –

+0

[はい]がデフォルトです。しかし、ブラウザが自動的にキャッシュされたバージョンを取得することがわかります。 – Lithilion

+0

なぜw3foolsはリンクしますか? –

0

いいえ、動作しません。

lazyloadにスクリプトをロードするように指示すると、スクリプトがロードされます。 Lazyloadはブラウザのキャッシュにアクセスできないため、一部のリソースがキャッシュにあるかどうかを判断できませんでした。 また、スクリプトの読み込み順序が重要であるため、以前のjavascriptファイルがロードされていない場合、ブラウザはjavascriptファイルを使用できません。ブラウザは、javascriptファイルが互いに依存しているかどうかを判断できます。

lazyload経由で「すべてロード」を作成することを検討している場合: JavaScriptファイルを1つ作成してページの最後にロードする方がよいでしょう。

+0

lazyloadはキャッシュにアクセスできませんが、lazyloadjsは実際にスクリプトを_load_しません。新しいDOMノードを作成し、それを現在のDOMツリーに追加します。 JSはDOMとは何の関係もないので、src属性が設定されると、スクリプトがどのように要求されるかはブラウザによって異なります。現代のブラウザーのほとんどは、まずキャッシュを参照します。 –

+0

あなたが正しいです、ブラウザは、要求されたリソース(jsファイル)がキャッシュにあるかどうかをチェックします。しかし、ブラウザはサーバーからキャッシュにないリソースをロードします。また、ブラウザに「ファイルがキャッシュにある場合はファイルをロードする」とは言えません。あなたは "load file"と言うだけです。また、キャッシュまたはサーバーからのブラウザーのロード。 'lazyload.js'は同じです:jsファイルをロードするだけです。 –

+0

はい、これは私の答えでも言いました...ファイル/リソースの読み込み方法はブラウザによって異なり、ほとんどのブラウザはスクリプトをキャッシュします...キャッシュになければHTTPリクエストごとに要求されます...しかし、あなたの答えには毎回_すべてのスクリプトが要求されると書かれています。少なくとも、OPがあなたの答えをどのように理解したのか –

関連する問題