1

功能完美。它使源代码单行。但问题在于 Google Adsense 广告。他们的位置搞砸了。可能是什么原因?

编程语言是 c# asp.net 4.0

这里的功能

    protected override void Render(HtmlTextWriter writer)
{
    if (this.Request.Headers["X-MicrosoftAjax"] != "Delta=true")
    {
        System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"<script[^>]*>[\w|\t|\r|\W]*?</script>");
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        System.IO.StringWriter sw = new System.IO.StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        base.Render(hw);
        string html = sb.ToString();
        System.Text.RegularExpressions.MatchCollection mymatch = reg.Matches(html);
        html = reg.Replace(html, string.Empty);
        reg = new System.Text.RegularExpressions.Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}|(?=[\r])\s{2,}");
        html = reg.Replace(html, string.Empty);
        reg = new System.Text.RegularExpressions.Regex(@"</body>");
        string str = string.Empty;
        foreach (System.Text.RegularExpressions.Match match in mymatch)
        {
            str += match.ToString();
        }
        html = reg.Replace(html, str + "</body>");
        writer.Write(html);
    }
    else
        base.Render(writer);
}
4

2 回答 2

2

我认为问题可能在于它使源成为单行。

首先,它可以删除重要的空格 - 块元素中的空格很重要但可折叠,因此虽然您可以将它们全部替换为单个空格字符,但不能删除它们。

其次,有时由于浏览器错误,微不足道的空白被视为重要(尽管这些错误比以前少得多)。

即使没有第二种情况,第一种情况就足够了,没有充分的理由期望代码在像您在这里那样极端减少之后仍然可以正常工作。

最后,无论如何,它没有多大意义。即使是大文件,它也不会对渲染时间产生太大影响,因此它只会真正提高下载时间,但由于源代码中的大多数空白都非常适合deflate算法,所以在 gzip 之后它几乎没有影响或将其放气以进行传输(假设您正在使用内容编码进行压缩;如果没有,当您将获得更好的、经过验证的改进时,为什么还要浪费时间修改源?)

于 2010-10-27T23:41:28.577 回答
2

也许它会弄乱 AdSense 位置,因为它会将所有 <script> 标签移动到正文的末尾。

于 2010-10-27T23:49:18.003 回答