Потрясающая функция минимизации HTML, но вызывает проблемы у объявлений Google Adsense - Очень важно! - PullRequest
1 голос
/ 28 октября 2010

функция работает отлично. это делает исходный код одной строкой. но проблема в рекламе 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);
}

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Может быть, он портит местоположение AdSense, потому что он перемещает все теги в конец тела.

2 голосов
/ 28 октября 2010

Я думаю, что проблема может заключаться в том, что он делает источник одной строкой.

Во-первых, он может удалить существенные пробелы - пробелы внутри элементов блока значительны, но сворачиваемы, поэтому, пока вы можете заменить их все наодин символ пробела, вы не можете удалить их.

Во-вторых, иногда незначительные пробелы рассматриваются как существенные из-за ошибок браузера (хотя их гораздо меньше, чем раньше).

Дажебез второго случая достаточно первого, что нет веских оснований ожидать, что код будет по-прежнему работать правильно после столь же значительного сокращения, как здесь.

Наконец, в любом случае, в этом нет особого смысла.Даже с большим файлом это не окажет большого влияния на время рендеринга, поэтому оно действительно только улучшит время загрузки, но, поскольку большая часть пробела в источнике вполне поддается алгоритму deflate , он будетнезначительного эффекта после того, как вы gzip или дефлятируете его для передачи в любом случае (если вы используете сжатие с кодировкой содержимого; если нет, зачем тратить время на искажение источника, когда вы получите гораздо более проверенные и проверенные улучшения с этим?)

...