私は走っColdfusion8
ていjquery/jquery-mobile
て、フロントエンドにいます。
データ量とクライアント側の処理時間の間の最適なトレードオフを見つけようとして、Ajax を利用した検索エンジンをいじっています。
現在、私の AJAX 検索は 40k の (JQM 拡張マークアップ) を返します。これにより、クライアント側の拡張が回避されます。このようにして、JQM が検索結果のすべての要素を拡張している間、ページが約 2 ~ 3 秒間停止することなく、うまくやっています。
gzip Ajax responses
気になるのは、Coldfusion から送信できるかどうかです。今すぐ検索のヘッダーを確認すると、次のようになります。
RESPONSE-header
Connection Keep-Alive
Content-Type text/html; charset=UTF-8
Date Sat, 01 Sep 2012 08:47:07 GMT
Keep-Alive timeout=5, max=95
Server Apache/2.2.21 (Win32) mod_ssl/2.2.21 ...
Transfer-Encoding chunked
REQUEST-header
Accept */*
Accept-Encoding gzip, deflate
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
Cookie CFID= ; CFTOKEN= ; resolution=1143
Host www.host.com
Referer http://www.host.com/dev/users/index.cfm
したがって、私の要求は受け入れられますgzip, deflate
が、戻ってきますchunked
。
(圧縮HTMLと呼ばれる)でAJAX応答を生成し、cfsavecontent
これを実行して空白を削除します
<cfrscipt>
compressedHTML = reReplace(renderedResults, "\>\s+\<", "> <", "ALL");
compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(13), "ALL");
compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(09), "ALL");
</cfscript>
次のような応答オブジェクトで圧縮されたHTMLを送信する前に:
{"SUCCESS":true,"DATA": compressedHTML }
質問Ajax 経由でデータ オブジェクトを
送り返していることがわかっている場合、データ オブジェクトを返す前にサーバー側で応答する方法はありますか? これが可能な場合は?もしそうなら、応答オブジェクト内でこれを行うことができますか、それとも「純粋な」HTML を送り返す必要がありますか?HTML
gzip
chunked
ありがとう!
編集:動的圧縮の「web.config」の設定でこれ
が
見つかりました-動作していないようです
EDIT2 :これがうまくいくかどうかはわかりませんが、このスニペットを見つけて遊んでいます。
<cfscript>
compressedHTML = reReplace(renderedResults, "\>\s+\<", "> <", "ALL");
compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(13), "ALL");
compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(09), "ALL");
if ( cgi.HTTP_ACCEPT_ENCODING contains "gzip" AND not showRaw ){
cfheader name="Content-Encoding" value="gzip";
bos = createObject("java","java.io.ByteArrayOutputStream").init();
gzipStream = createObject("java","java.util.zip.GZIPOutputStream");
gzipStream.init(bos);
gzipStream.write(compressedHTML.getBytes("utf-8"));
gzipStream.close();
bos.flush();
bos.close();
encoder = createObject("java","sun.misc.
outStr= encoder.encode(bos.toByteArray());
compressedHTML = toString(bos.toByteArray());
}
</cfscript>
おそらく、変数response object
ではなくでこれを試す必要がありますcompressedTHML