【问题标题】:Who Compresses their HTML?谁压缩了他们的 HTML?
【发布时间】:2011-01-26 08:47:43
【问题描述】:

即使堆栈溢出也不会compress their HTML。是否建议压缩 HTML?据我所见,looks like Google is the only one....(查看源代码)。为什么这不是标准做法?

【问题讨论】:

标签: html performance compression


【解决方案1】:

HTML 缩小对于 Stackoverflow 来说显然没有那么重要。我根据首页的 HTML 源代码做了一个小测试。

原始内容长度:207454 字节 压缩后的内容长度:30915 字节 修剪后的内容长度:176354 字节 修剪和压缩的内容长度:29658 字节

SO 已经使用 GZIP 压缩,因此修剪空白(实际上,HTML 缩小,或 所称的“HTML 压缩”)将“仅”节省每个响应大约 1KB 的带宽。对于每天浏览量超过 100 万的巨头来说,HTML 缩小每天已经可以节省超过 1GB 的带宽(实际上,SO 也会节省这么多)。 Google 每天处理数十亿次网页浏览,每一个字节的差异每天都会节省 GB。

FWIW,我用这个简单的 quick'n'dirty Java 应用程序来测试它:

package com.stackoverflow.q2424952;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.zip.GZIPOutputStream;

public class Test {

    public static void main(String... args) throws IOException {
        InputStream input = new URL("http://stackoverflow.com").openStream();
        byte[] raw = raw(input);
        System.out.println("Raw content length: " + raw.length + " bytes");
        byte[] gzipped = gzip(new ByteArrayInputStream(raw));
        System.out.println("Gzipped content length: " + gzipped.length + " bytes");
        byte[] trimmed = trim(new ByteArrayInputStream(raw));
        System.out.println("Trimmed content length: " + trimmed.length + " bytes");
        byte[] trimmedAndGzipped = gzip(new ByteArrayInputStream(trimmed));
        System.out.println("Trimmed and gzipped content length: " + trimmedAndGzipped.length + " bytes");
    }

    public static byte[] raw(InputStream input) throws IOException {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        for (int data; (data = input.read()) != -1; output.write(data));
        input.close(); output.close(); return output.toByteArray();
    }

    public static byte[] gzip(InputStream input) throws IOException {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        GZIPOutputStream gzip = new GZIPOutputStream(output);
        for (int data; (data = input.read()) != -1; gzip.write(data));
        input.close(); gzip.close(); return output.toByteArray();
    }

    public static byte[] trim(InputStream input) throws IOException {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        for (String line; (line = reader.readLine()) != null;) output.write(line.trim().getBytes());
        reader.close(); output.close(); return output.toByteArray();
    }

}

【讨论】:

    【解决方案2】:

    Gzip 压缩,每个现代 Web 服务器和 Web 服务器都使 HTML 压缩(缩小)无用或几乎微不足道。

    很少有人用这个。

    【讨论】:

    • -1:[需要引用]...即使 IE6 也支持 gzipped JavaScript...请给我一个不支持 gzipped JavaScript 的浏览器...(不支持的浏览器除外) gzip 根本:那些不会返回Accept-Encoding: gzip,所以它们很容易识别和处理)
    • @Andrew,我为你删除了这个。我确实没有这样的引用,即使你 JS 缩小比 HTML 更受欢迎
    【解决方案3】:

    另一个不缩小代码的好理由是学习。我喜欢查看人们的源代码以了解他们如何解决问题的能力,同样,我保留完整的源代码以便其他人可以查看我的源代码。在将代码发送到浏览器之前,我仍然通过 gzip 压缩了我的代码,但是当它到达时,它会被解压缩成完整的形式并完全可读。

    【讨论】:

      【解决方案4】:

      我认为您混淆了 HTML 的源代码 缩小 和 GZIP 压缩。后者很常见(例如在 Apache 上使用 mod_gzip,文章 here)并且在大多数情况下应该足够了。它完全在服务器和浏览器之间,你在源代码中是看不到的。

      HTML 的实际缩小并不值得做,除非网站节省的字节可以节省数万美元的流量(例如 Google。)

      【讨论】:

      • 小型化也使窃取或逆向工程变得更加困难。
      • @Konrad 不要将缩小与混淆混淆。任何可以格式化源代码的像样的 IDE 都可以毫不费力地将压缩后的代码重新格式化为干净的格式。
      • @Konrad 您的观点有效,但不适用于 HTML IMO。据我所知,不可能以无法使用简单的源代码格式化程序恢复的方式来缩小(或混淆)HTML。不过,CSS 和 JS 是不同的。
      • 对 HTML 代码进行逆向工程并没有什么好处。
      【解决方案5】:

      我认为很少有人这样做。工作量太大,收获太少,尤其是现在 HTTP 上的负载可以压缩压缩。

      【讨论】:

      • 缩小和 gzip 压缩不是相互排斥的。
      • 当然,但这意味着我并没有真正从缩小中获得太多好处 - 字节码方面。对于许多网站来说,这样做根本不值得。
      猜你喜欢
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2012-07-27
      • 2023-03-21
      • 1970-01-01
      • 2019-03-23
      相关资源
      最近更新 更多