Web页面减肥,慎用VS的自动格式化功能!

最近在做一个OA项目,其中有块协同的功能,类似于BBS,具体需求是什么样的我就不细讲了,我们这里就认为是一个BBS吧。一个帖子会有多个回帖,在帖子的展示页面上将帖子和所有回帖一起展示出来。当一个帖子的回复数达到上百时打开帖子就会特别慢,而且CPU和内存也会占用很高。打开页面的HTML源文件,可以看到有些回复数很高的帖子的页面大小也十分巨大,可能一个HTML页面就有1M大小。对于企业内部用户来说,1M其实也没有什么,毕竟是在局域网中,几秒钟就可以下载完成打开了,但是对于外网用户来说这就比较痛苦了。所以需要对这个页面进行减肥,将页面大小降下来。

首页来分析一下这个帖子的展示页面,上面是帖子的相关信息和帖子内容,都是一些Table元素和Label控件,下面是回复列表,每个回复里面可能会有附件,所以我们使用Repeater控件来做回复列表,一个回复中可能有多个附件,所以是在Repeater中嵌套绑定Repeater。使用Repeater而没有使用DataGrid或者DataList就是为了防止产生垃圾代码,所以其中产生垃圾代码是比较少的。但是为什么页面会那么大呢?分析HTML,可以看到生成的HTML还比较漂亮,层次缩进分明。

但是偏偏就是这个层次缩进分明造成了如此大的页面。我取出其中的一个回复的HTML如下:

 


<tr> 
    <td class="bbs_banner" style="text-align: right; padding-right: 10px"> 
        #19&nbsp; 发表于:2009-4-20 13:03:04 
    </td> 
</tr> 
<tr> 
    <td> 
        <table width="100%" border="0" cellspacing="8" cellpadding="0"> 
            <tr> 
                <td width="140" valign="top"> 
                    <div style="text-align: center" class="userName" id='wusihong'> 
                        <img src='images/pic_head.jpg' width="52" 
                            height="51"><br /> 
                        <div class="font12" style="padding-top: 5px"> 
                            吴偲宏 
                        </div> 
                    </div> 
                </td> 
                <td width="1" bgcolor="#add1ff"> 
                </td> 
                <td class="font14"> 
                    已处理<br /> 
                </td> 
            </tr> 
        </table> 
    </td> 
</tr>

结构虽然很清晰,但是大家可以看出来,为了HTML的层次,生成的代码前面添加了无数的空格。这些空格是怎么来的,我们看看Repeater中的定义:

 


<asp:Repeater ID="rptFeedbacks" runat="server"> 
    <ItemTemplate> 
        <tr> 
            <td class="bbs_banner" style="text-align: right; padding-right: 10px"> 
                #<%# ((IDataItemContainer)Container).DataItemIndex+1 %>&nbsp; 发表于:<%# Eval("FeedbackDate")%> 
            </td> 
        </tr> 
        <tr> 
            <td> 
                <table width="100%" border="0" cellspacing="8" cellpadding="0"> 
                    <tr> 
                        <td width="140" valign="top"> 
                            <div style="text-align: center" class="userName" id='<%#Eval("FeedbackUserLoginName") %>'> 
                                <img src='<%# GetUserHeadUrl(Eval("FeedbackUserLoginName").ToString()) %>' width="52" 
                                    height="51"><br /> 
                                <div class="font12" style="padding-top: 5px"> 
                                    <%# Eval("FeedbackUserName")%> 
                                </div> 
                            </div> 
                        </td> 
                        <td width="1" bgcolor="#add1ff"> 
                        </td> 
                        <td class="font14"> 
                            <%# Eval("FeedbackBody")%><br /> 
                            <asp:Repeater ID="rptFeedbackAttachment" runat="server" DataSource='<%# Eval("FeedbackAttachment") %>'> 
                                <ItemTemplate> 
                                    <a href='<%#Eval("fbAttachmentUrl") %>'> 
                                        <%#Eval("fbAttachmentName")%></a>                                                                                                                                 
                                </ItemTemplate>                                                                
                            </asp:Repeater>                                                            
                        </td> 
                    </tr> 
                </table> 
            </td> 
        </tr> 
    </ItemTemplate> 
</asp:Repeater>

这里可以看到,就是VS为了格式好看,在前面添加了很多的空格,格式化的操作就是在aspx页面上选择需要格式化的代码,然后右键选择“设置选定内容的格式”即可,如图:

这里VS是帮我们添加了一大串的空格,这些空格在Repeater中也会当作需要被重复输出的内容而不断重复输出。在Repeater中的数据量不是很大的时候还不明显,但是在Repeater中绑定上百个元素时,这些空格将会占据大量的空间。

解决办法也很简单,将Repeater中的代码进行减肥,去掉这些没有用的空格。这样下来,我们的代码被精简为:

 


<asp:Repeater ID="rptFeedbacks" runat="server"> 
<ItemTemplate> 
<tr><td class="bbs_banner" style="text-align: right; padding-right: 10px">#<%# ((IDataItemContainer)Container).DataItemIndex+1 %>&nbsp; 发表于:<%# Eval("FeedbackDate")%></td></tr> 
<tr><td><table width="100%" border="0" cellspacing="8" cellpadding="0"> 
<tr><td width="140" valign="top"><div style="text-align: center" class="userName" id='<%#Eval("FeedbackUserLoginName") %>'> 
<img src='<%# GetUserHeadUrl(Eval("FeedbackUserLoginName").ToString()) %>' width="52" height="51"><br /> 
<div class="font12" style="padding-top: 5px"><%# Eval("FeedbackUserName")%></div></div></td> 
<td width="1" bgcolor="#add1ff"></td> 
<td class="font14"><%# Eval("FeedbackBody")%><br /> 
<asp:Repeater ID="rptFeedbackAttachment" runat="server" DataSource='<%# Eval("FeedbackAttachment") %>'> 
<ItemTemplate> 
<a href='<%#Eval("fbAttachmentUrl") %>'><%#Eval("fbAttachmentName")%></a> 
</ItemTemplate> 
</asp:Repeater> 
</td></tr></table></td></tr></ItemTemplate> 
</asp:Repeater>

这样下来,虽然代码看起来好像是丑了一些,但是去掉了无用的空格后页面大小明显减小,原来1M的一个帖子,现在减肥后就只有350K了,这个空格所占的空间是相当惊人的。以下是减肥后的一条回复的HTML:

 

 


<tr><td class="bbs_banner" style="text-align: right; padding-right: 10px">#34&nbsp; 发表于:2009-4-20 13:04:56</td></tr> 
<tr><td><table width="100%" border="0" cellspacing="8" cellpadding="0"> 
<tr><td width="140" valign="top"><div style="text-align: center" class="userName" id='shiyingchun'> 
<img src='images/pic_head.jpg' width="52" height="51"><br /> 
<div class="font12" style="padding-top: 5px">AAA</div></div></td> 
<td width="1" bgcolor="#add1ff"></td> 
<td class="font14">已处理<br /> </td></tr></table></td></tr>

除了这一点以外,我们还可以进一步对该页面进行减肥。比如禁用页面的视图状态,禁用后页面大小从350K进一步减小到278K,如果完全为了减肥的需要,我们可以将整个HTML中的空格去掉,不仅仅是去掉Repeater中的,这样又可以减小10K左右。

另外,规范css也是一个减肥的好办法,不要将css样式写在HTML元素中,HTML中只想要设置class,然后我们统一在页面的Head或者css文件中写css即可。

从一个1M大小的HTML文件,经过我们这样减肥,能够减小到250K左右,只有原来的四分之一,相当惊人的成功!这里最重要的就是在Repeater中的大量没用的空格,这个是VS自动添加进去的,所以大家如果需要对页面进行减肥的时候也需要注意。

时间: 2024-08-31 02:43:37

Web页面减肥,慎用VS的自动格式化功能!的相关文章

redis-WEB项目登录模块中的自动登录功能如何实现检查cookies是否过期

问题描述 WEB项目登录模块中的自动登录功能如何实现检查cookies是否过期 private void setLoginRedis(HashCommands commands,Object key, Object hashKey, Object value) { commands.put(RedisBusinessCode.WEB_LOGIN_LIM.getCode(), key, hashKey, value); //保存到redise commands.expire(RedisBusine

用PHP实现自动把纯文本转换成Web页面

最近,我的一个老朋友向我打电话求助.他从事记者的职业有多年了,最近获得了重新出版他的很多早期专栏的权利.他希望把他的作品贴在Web上;但是他的专栏都是以纯文本文件的形式保存的,而且他既没有时间也不想去为了把它们转换成为Web页面而学习HTML的知识.由于我是他电话本里唯一一个精通计算机的人,所以他打电话给我看我是否能够帮帮他. "让我来处理吧,"我说:"一个小时以后再给我打电话."当然了,当他几个小时以后打电话过来,我已经为他准备好了解决的方法.这需要用到一点点PH

用动态元素自动更新Web页面

您可能知道如何在标准 JSF 组件内使用 JavaScript 和 Cascading Style Sheets (CSS) 来隐藏和显示可选的 JavaServer Faces (JSF) 组件.为了实现 这个目的,您需要首先识别所有的 JSF 组件并将它们写入到 JSF 页面.但是, 如果开发的是包含动态元素的 Web 页面并且这些动态元素直到运行时才知道, 那么就不可能这么做.在本文中,了解如何在自动更新 Web 页面的动态元素的 同时,清除旧的 UI 元素,以及如何使用 Java 代码来

用PHP自动把纯文本转换成Web页面

  最近,我的一个老朋友向我打电话求助.他从事记者的职业有多年了,最近获得了重新出版他的很多早期专栏的权利.他希望把他的作品贴在Web上;但是他的专栏都是以纯文本文件的形式保存的,而且他既没有时间也不想去为了把它们转换成为Web页面而学习HTML的知识.由于我是他电话本里唯一一个精通计算机的人,所以他打电话给我看我是否能够帮帮他. "让我来处理吧,"我说:"一个小时以后再给我打电话."当然了,当他几个小时以后打电话过来,我已经为他准备好了解决的方法.这需要用到一点点

账号-有没有什么办法能让web页面利用ad用户帐户自动登录,并且输出帐户名

问题描述 有没有什么办法能让web页面利用ad用户帐户自动登录,并且输出帐户名 公司办公用的是AD域环境,每个人用域帐号登录到PC上. 不知道PHP有什么方法能实现: 域用户登录到自己的机器后,打开web页面,不用再输入帐号密码就已经实现登录了,并且在web页面上输出该域名账号. 非域用户打开web登陆页面需要再输入一次帐号密码才行. 解决方案 http://www.07net01.com/linux/yuyonghuzizhuxiugaiADshuxingWebyingyong___ADCus

接口-WEB页面窗口自动填报问题

问题描述 WEB页面窗口自动填报问题 情况实现如下: 1,已有上报网站A,有WEB页面,为第三方公司开发,无法提供接口.页面上有若干字段,目前上报方式为手工填报.' 2,填报的内容,目前已经自动提取到另一套系统B中,并且该系统的页面,字段,布局与上报网站页面完全一致. 需实现: 打开A的页面,打开B系统对应页面,自动取B系统的内容填报到A系统. 说明:B系统可以进行任意修改,开发. 解决方案 可以参考以下链接 WEB网页自动填表http://blog.sina.com.cn/s/blog_4ad

html+css-怎么让web页面自动适应手机屏幕大小 好心人求解啊!我都被折磨疯了

问题描述 怎么让web页面自动适应手机屏幕大小 好心人求解啊!我都被折磨疯了 body bgcolor="#00BFFF"> 联通用户年底专享好福利! 沱沱公社鲜果杂粮大派送! 免费开通${scope.pageOptionText }服务,好礼相送不错过!(仅限联通用户)! 解决方案 这个是自动放大到一倍.不知道是不是你想要的想过. 解决方案二: LZ别逗了..如果能自动适应的话 那人家开发JqueryMobile干啥啊? 解决方案三: 不要定宽,用百分比来设置宽度,具体看:响应

Firefox 的页面缩放选项在这里 - Http Tool 插件查看自动格式化后的 json

Firefox 的页面缩放选项在这里 -  Http Tool 插件查看自动格式化后的 json 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Firefox 插件安装,这个估计大家都会,只要

用PHP脚本自动把纯文本文件转换成Web页面

最近,我的一个老朋友向我打电话求助.他从事记者的职业有多年了,最近获得了重新出版他的很多早期专栏的权利.他希望把他的作品贴在Web上:但是他的专栏都是以纯文本文件的形式保存的,而且他既没有时间也不想去为了把它们转换成为Web页面而学习HTML的知识.由于我是他电话本里唯一一个精通计算机的人,所以他打电话给我看我是否能够帮帮他. "让我来处理吧,"我说:"一个小时以后再给我打电话."当然了,当他几个小时以后打电话过来,我已经为他预备好了解决的方法.这需要用到一点点PH