- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Web高性能開发之疯狂的HTML压缩
Web高性能开发之疯狂的HTML压缩
前言:
上一篇随笔中网友skyaspnet问我如何压缩HTML,当时回答是推荐他使用gzip,后来想想,要是能把所有的html,jsp(aspx)在运行前都压缩成1行未免不是一件好事啊。一般我们启动gzip都比较少对html启动gzip,因为现在的html都是动态的,不会使用浏览器缓存,而启用gzip的话每次请求都需要压缩,会比较消耗服务器资源,对js,css启动gzip比较好是因为js,css都会使用缓存。我个人觉得的压缩html的最大好处就是一本万利,只要写好了一次,以后所有程序都可以使用,不会增加任何额外的开发工作。
在JS、CSS的合并、压缩、缓存管理一文中说到自己写过的1个自动合并、压缩JS,CSS,并添加版本号的组件。这次把压缩html的功能也加入到该组件中,流程很简单,就是在程序启动(contextInitialized or Application_Start)的时候扫描所有html,jsp(aspx)进行压缩。
压缩的注意事项:
实现的方式主要是用正则表达式去查找,替换。在html压缩的时候,主要要注意下面几点:
1. pre,textarea标签里面的内容格式需要保留,不能压缩。
2. 去掉html注释的时候,有些注释是不能去掉的,比如:!--[if IE 6] ..... ![endif]--
3. 压缩嵌入式js中的注释要注意,因为可能注释符号会出现在字符串中,比如: var url = ; // 前面的//不是注释
去掉JS换行符的时候,不能直接跟一下行动内容,需要有空格,考虑下面的代码:
else return;
如果不带空格,则变成elsereturn。
4. jsp(aspx) 中很有可能会使用% %嵌入一些服务器代码,这个时候也需要单独处理,里面注释的处理方法跟js的一样。
源代码:
下面是java实现的源代码,也可以 猛击此处 下载该代码,相信大家都看的懂,也很容易改成net代码:
import java.io.StringReader;import java.io.StringWriter;import java.util.*;import java.util.regex.*;/******************************************* * 压缩jsp,html中的代码,去掉所有空白符、换行符 * @author bearrui(ak-47) * @version 0.1 * @date 2010-5-13 *******************************************/public class HtmlCompressor { private static String tempPreBlock = %%%HTMLCOMPRESS~PRE; private static String tempTextAreaBlock = %%%HTMLCOMPRESS~TEXTAREA; private static String tempScriptBlock = %%%HTMLCOMPRESS~SCRIPT; private static String tempStyleBlock = %%%HTMLCOMPRESS~STYLE; private static String tempJspBlock = %%%HTMLCOMPRESS~JSP; private static Pattern commentPattern = Ppile(!--\\s*[^\\[].*?--, Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private static Pattern itsPattern = Ppile(\\s+?, Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private static Pattern prePattern = Ppile(pre[^]*?.*?/pre, Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private static Pattern taPattern = Ppile(textarea[^]*?.*?/textarea, Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILIN
您可能关注的文档
最近下载
- 泉州交发集团国企招聘真题.pdf
- 桂美版美术一年级上册课件-第18课 过节啦.pptx VIP
- Minmetals_B2B_运营模式设计报告(完整版)_v2.3_20121227_Max.pptx VIP
- GA 1808-2022 军工单位反恐怖防范要求.docx
- (2023秋)北师大版五年级数学上册《 图形中的规律》PPT课件.pptx VIP
- 2024年天津市专业技术人员继续教育公需课考试题+答案(四套全).pdf VIP
- 送气工练习试题及答案.doc
- 在线网课学习课堂《学术英语(华理 )》单元测试考核答案.pdf
- 大一生涯发展展示.pptx VIP
- 乘数中间有0的三位数乘一位数(教学设计)-2024-2025学年三年级上册数学苏教版.docx
文档评论(0)