Сокращение 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», как вы называете это) сэкономит «только» около 1 КБ полосы пропускания на ответ. Для гигантов с более чем 1 миллионом просмотров страниц в день минимизация HTML уже сэкономила бы более 1 ГБ пропускной способности в день (на самом деле, SO также сэкономит столько же). Google обслуживает миллиарды просмотров страниц в день, и каждый байт будет экономить гигабайты в день.
FWIW, я использовал это простое быстрое и грязное 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();
}
}