我正在运行Coldfusion8
并且jquery/jquery-mobile
在前端。
我正在使用 Ajax 驱动的搜索引擎,试图找到数据量和客户端处理时间之间的最佳折衷。
目前我的 AJAX 搜索返回 40k(JQM 增强标记),这避免了任何客户端增强。通过这种方式,我可以在没有页面停顿约 2-3 秒的情况下度过难关,而 JQM 增强了搜索结果中的所有元素。
我很好奇是否可以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
。
我在cfsavecontent
(称为compressedHTML)中生成AJAX响应并运行它以消除空格
<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 }
问题
如果我知道我正在HTML
通过 Ajax 发回我的数据对象,在返回它与发送之前有没有办法到gzip
响应服务器端chunked
?如果这完全有可能?如果是这样,我可以在我的响应对象中执行此操作,还是必须发回“纯”HTML?
谢谢!
编辑:
在为动态压缩设置“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
变量上尝试这个