即使Stack Overflow也没有compress their HTML。是否建议压缩HTML?据我所见,looks like Google is the only one ....(查看来源)。为什么不是这种标准做法?
答案 0 :(得分:12)
我认为你混淆了HTML的源代码 minification 和GZIP压缩。后者很常见(例如在Apache上使用mod_gzip
,文章here)并且在大多数情况下应该足够了。它完全是服务器和浏览器之间的内部,你无法在源代码中看到它。
HTML的实际缩小并不值得做,除了保存字节可以节省数万美元流量的网站(例如谷歌)。
答案 1 :(得分:2)
HTML缩小对于Stackoverflow来说显然无关紧要。我根据首页的HTML源代码进行了一些测试。
Raw content length: 207454 bytes Gzipped content length: 30915 bytes Trimmed content length: 176354 bytes Trimmed and gzipped content length: 29658 bytes
SO已经使用了GZIP压缩,因此修剪空格(实际上,HTML缩小或“HTML压缩”为你调用它)将“仅”保存每个响应大约1KB的带宽。对于每天浏览量超过100万的gigant,HTML缩小每天可以节省超过1GB的带宽(实际上,SO也可以节省很多)。 Google每天提供数十亿次综合浏览量,每个字节差异每天都会节省千兆字节。
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 :(得分:1)
不缩小代码的另一个好理由是学习。我喜欢去查看人们的源代码以了解他们如何解决问题的能力,同样我保持我的源代码完整形式,以便其他人可以看看我的。在发送到浏览器之前,我仍然通过gzip压缩我的代码,但是当它到达时,它将被解压缩为完整形式并且完全可读。
答案 3 :(得分:0)
我认为很少有人这样做。由于HTTP上的有效负载现在可以进行压缩压缩,因此工作量太大,收益太少。
答案 4 :(得分:0)
Gzip压缩,每个现代Web服务器和Web服务器都使HTML压缩(缩小)无用或几乎无关紧要。
所以很少使用它。