真有必要去除HTML中的空白字符吗?

本文通过实验证明,在使用GZip压缩的情况下,去除HTML中的空白字符虽能减少页面体积,但压缩后的节省仅约1-2K,即1-2个数据包。考虑到额外的处理开销,这种做法的实际效益值得商榷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚才有朋友在MSN上问我说,他的页面中有许多空白字符,打开源文件一看发现这代码稀疏得很。他觉得很浪费,他说有什么办法可以去除它们。我问他“你的页面使用GZip压缩了吗?”他说用了,于是我回答说“那么就不用去除空白字符了,连续空白字符压缩得很好,去掉后效果不大的”。这时我又不禁想到早上那篇《博客园首页优化心得》中也有一条是“去除HTML中的空格、空行”,于是我便打算尝试一下,去除空白字符到底有多少效果。

我的实验目标是我博客的前40篇文章的详细页,未压缩前的体积从98K到277K不等,我想也应该算是博客园中比较典型的页面大小吧。我使用这样的测试代码:

static void Main()
{
    var files = Directory.GetFiles(@"d:\pages");
    foreach (var f in files) Compare(File.ReadAllText(f));

    Console.WriteLine("Press enter to exit...");
    Console.ReadLine();
}

private static readonly Regex REGEX_LINE_BREAKS = new Regex(@"\n\s*", RegexOptions.Compiled);
private static readonly Regex REGEX_LINE_SPACE = new Regex(@"\n\s*\r", RegexOptions.Compiled);
private static readonly Regex REGEX_SPACE = new Regex(@"( )+", RegexOptions.Compiled);

private static void Compare(string html)
{
    long original, compressedOriginal;
    GetLength(html, out original, out compressedOriginal);

    long stripped, compressedStripped;
    html = REGEX_LINE_BREAKS.Replace(html, "");
    html = REGEX_LINE_SPACE.Replace(html, "");
    html = REGEX_SPACE.Replace(html, " ");
    GetLength(html, out stripped, out compressedStripped);

    Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
        original, compressedOriginal,
        stripped, compressedStripped,
        original - stripped, compressedOriginal - compressedStripped);
}

private static void GetLength(string html, out long original, out long compressed)
{
    var bytes = Encoding.UTF8.GetBytes(html);
    var stream = new MemoryStream();
    var gzipStream = new GZipStream(stream, CompressionMode.Compress);
    gzipStream.Write(bytes, 0, bytes.Length);
    gzipStream.Flush();

    original = bytes.LongLength;
    compressed = stream.Length;
}

在上面这段代码里我使用的是博客园去空白字符的方法,结果如下:

原页面原页面(压缩)去空白后去空白后(压缩)去空白前后去空白前后(压缩)
1307603601811735434702134061316
2559356340624043361870155021536
2788718679426370485298151671496
2212485314820544051548158081600
1516124026013793938940136731320
1350193600012159334750134261250
1282393623011465834878135811352
1615304277614718941392143411384
99884283728704727084128371288
1735344372415844642272150881452
1915195039817695848888145611510
1769964027416270638978142901296
2063484736219140045964149481398
1370143860812285537076141591532
1447153726013109735748136181512
1465313670413261935302139121402
1999154922418222747452176881772
106929298509369028518132391332
1362643666412154834990147161674
1487503799013456736578141831412
2828867192426633670306165501618
1760994146816132240126147771342
108394304569542829216129661240
1525784018613854338866140351320
2302435997021538958554148541416
2511835715623486255694163211462
1969574817618160846776153491400
1722674134015810540056141621284
2658776365024897462142169031508
1474033889413375137492136521402
1490913646013499835190140931270
1677414320015361441856141271344
1715644089815733339648142311250
1258123457011104733200147651370
1906494652417519745040154521484
1538073946213940138054144061408
1207883222810753430930132541298
1633274111014876339710145641400
103101294769028428222128171254
1413843978412664138350147431434

值得关注的是最后两列,从中我们可以发现,虽然去除空白前后可以让页面体积减小十几K,但是经过压缩后其实只相差1-2K了——大约1-2个数据包。这些节省是否值得我们去这么做?再者,博客园的做法是为每个页面的内容使用正则表达式进行替换,那么它所带来开销又是否值得呢?这就要博客园自己进行profiling了……

最后一提,其实去空白字符并非如此简单一件事情。最简单的例子是:您是否遇到某些HTML编辑器或RSS阅读器,它们会让文章中原本工整的代码变成一行?这就是因为它们武断地去除了所有的空白字符,但是忘了有个HTML标记叫做<pre />……

转载于:https://www.cnblogs.com/JeffreyZhao/archive/2009/12/07/is-it-really-necessary-to-strip-white-space-in-html.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值