6

I have a page which looks like this:

<!doctype html>
<head></head>
<body>
    <div>Content 1000 chars</div>
    <div>Content 1000 chars</div>
    <div>Content 1000 chars</div>
</body>
</html>

When a client downloads the page, basically he's downloading 3100 characters. If he visits the page again and the contents of the first div changes, he will have to redownload the entire page again (3100 characters).

Now basically I was wondering are we able to cache HTML fragments like the way we do with images?

So I was thinking is there somewhere to get this effect:

 <!doctype html>
<head></head>
<body>
    <div src="page1.html"></div>
    <div src="page2.html"></div>
    <div src="page3.html"></div>
</body>
</html>

So if I were to change the contents of page1.html, the browser would be able to know that only page1.html was changed since the last visit, and downloads 1000 characters instead of the entire page (3100) characters. Essentially this behavior is identical to what is happening now with images:

 <!doctype html>
<head></head>
<body>
    <img src="img1.gif">
    <img src="img2.gif">
    <img src="img3.gif">
</body>
</html>

whereby changing img1.gif will invoke the browser to redownload only img1.gif (assuming all the other files have not been edited)

To be clear, I'm not looking for an AJAX solution. I need a solution that works without javascript (as with all the above examples). I'm also not particularly in favor of the frames solution, However I would accept that as answer if there are simply no other alternatives / quirks / hacks

4

4 に答える 4

4

IFrame について考えたことはありますか?

ただし、これは非常にマイクロな最適化であり、何の利点もないと思います (完全に別のワームであるサーバー アプリケーション内のキャッシングを除く)。

(または、ここで 3000 文字を超える方法について話している。)

編集:別の解決策があります、AJAX を使用しない HTML ドキュメントブラウザーではサポートされておらず、一部のサーバー シナリオでのみサポートされています: HTTP Range requests。ドキュメントの特定の範囲のみを返すように、追加のヘッダーでサーバーに指示できます。

GET /large-document.html HTTP/1.1
Accept-Range: bytes
Range: bytes=0-500

応答には最初の 500 バイトのみが含まれます。この手法は、たとえば、中止されたダウンロードを再開するために使用されます。

しかし、私が言ったように、これはあなたのシナリオでは役に立ちません。1 つには、AJAX なしで (またはダウンロード マネージャーの外部で) これをサポートするブラウザーはありません。もう 1 つは、クライアントは、どの範囲を要求するのか、また、古い部分を置き換えるために既にフェッチされたドキュメントのどこにそれを配置するのかがわかりません。

IE3 や Netscape 2 までのレガシー ブラウザ、さらにはレガシー Lynx バージョンのような古いテキスト ブラウザを本当にサポートする必要がある場合は、.<frameset>ではなくクラシックを使用して<iframe>ください。Mosaic の昔から基本的にすべてでサポートされており、当時はこのタスク用に特別に設計されていました。(そのため、サポートを求めているブラウザーが登場した当時は、これが選択されたツールでした。)

于 2011-09-14T14:54:24.617 に答える
1

FirefoxとChromeの最新バージョンは、これをネイティブに実行します。可能な場合はいつでも、画像とコードをキャッシュします。実際、リロードを取得する唯一の方法は、ブラウザレベルでキャッシュをクリアすることです。

また、リバースプロキシキャッシングを検討することもできます。これは、DBトラフィックを回避するために、基本的にサイト全体で実行していることを実行します。 ワニスは、ページをキャッシュする優れたオプションであり、高度にカスタマイズ可能です。

于 2011-09-14T18:45:43.490 に答える
1

JavaScript を使用せずに目的を達成するために考えられる唯一の方法は、framesを使用することです。ただし、フレームには多くの欠点があるため、Web サイトでフレームを使用する前に知っておく必要があります。

于 2011-09-14T14:55:09.863 に答える
0

そのような最適化を行うことが合理的かどうかはわかりません。最新のブラウザはデータ圧縮を受け入れ(そして最新のサーバーはそれを行います)、テキストは非常によく圧縮されます。出力バッファリングを使用する必要があります(たとえば、PHPのob_startを参照)。これにより、ページはサーバーによってチャンクごとに送信されませんが、出力の準備ができるまでしばらく待機してから、圧縮して送信します。クライアントに送信し、クライアントはそれを解凍します。

レイアウト手法としてフレームを使用することは、最近では非常に推奨されていません(iframeが優れたソリューションである場合もありますが、状況によって異なります)。

于 2011-09-14T19:08:49.447 に答える