1

機能は完全に機能します。ソースコードを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

問題は、ソースが1行になることだと思います。

まず、重要な空白を削除できます。ブロック要素内のスペースは重要ですが、折りたたむことができるため、すべてを単一の空白文字に置き換えることはできますが、削除することはできません。

第二に、ブラウザのバグが原因で、意味のない空白が意味のあるものとして扱われることがあります (ただし、これらは以前よりもはるかに少なくなっています)。

2 番目のケースがなくても、1 番目のケースだけで十分です。ここで示したような極端な削減を行った後でも、コードが正しく機能することを期待する十分な理由はありません。

最後に、とにかくあまり意味がありません。ファイルが大きい場合でも、レンダリング時間にはあまり影響しないため、実際にはダウンロード時間が改善されるだけですが、ソース内のほとんどの空白はdeflateアルゴリズムに非常に適しているため、gzip した後はほとんど効果がありません。とにかく、送信のためにそれを収縮させます(圧縮にコンテンツエンコーディングを使用していると仮定します。そうでない場合、それで試行錯誤した改善がはるかに優れているのに、ソースをマングリングする時間を無駄にするのはなぜですか?)

于 2010-10-27T23:41:28.577 に答える
2

すべての <script> タグを本文の最後に移動するため、アドセンスの場所が台無しになる可能性があります。

于 2010-10-27T23:49:18.003 に答える