napisałem skrypt kompilacji, które powiela moje szablony do innego katalogu, a następnie użyć tej sztuczki, aby powiedzieć mój wniosek, aby wybrać odpowiedni szablon w trybie rozwoju lub produkcji:
DEV = os.environ['SERVER_SOFTWARE'].startswith('Development') and not PRODUCTION_MODE
TEMPLATE_DIR = 'templates/2012/head/' if DEV else 'templates/2012/output/'
Decyduje, czy jest zgaszony przez twój serwer sieciowy, tak naprawdę nie jest to kwestia, powinieneś zapisać każdy bajt, dla którego możesz przyczyny wydajności.
Jeśli spojrzeć na niektóre z największych stron tam, często robią rzeczy jak pisanie nieprawidłowy kod HTML, aby zapisać bajtów, na przykład, powszechne jest pominięcie cudzysłowów w atrybuty id w znacznikach HTML, na przykład:
<did id=mydiv> ... </div>
Zamiast:
<did id="mydiv"> ... </div>
i istnieje kilka przykładów, jak ten jeden, ale nie w tym zakresie wątku chyba.
Powróciłem do pytania, przygotowałem skrypt, który minimalizuje twój HTML, CSS i JS. Zastrzeżenie: Nie obejmuje przypadku znacznika PRE.
import os
import re
import sys
from subprocess import call
HEAD_DIR = 'templates/2012/head/'
OUT_DIR = 'templates/2012/output/'
REMOVE_WS = re.compile(r"\s{2,}").sub
YUI_COMPRESSOR = 'java -jar tools/yuicompressor-2.4.7.jar '
CLOSURE_COMPILER = 'java -jar tools/compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS '
def ensure_dir(f):
d = os.path.dirname(f)
if not os.path.exists(d):
os.makedirs(d)
def getTarget(fn):
return fn.replace(HEAD_DIR, OUT_DIR)
def processHtml(fn, tg):
f = open(fn, 'r')
content = f.read()
content = REMOVE_WS(" ", content)
ensure_dir(tg)
d = open(tg, 'w+')
d.write(content)
content
def processCSS(fn, tg):
cmd = YUI_COMPRESSOR + fn + ' -o ' + tg
call(cmd, shell=True)
return
def processJS(fn, tg):
cmd = CLOSURE_COMPILER + fn + ' --js_output_file ' + tg
call(cmd, shell=True)
return
# Script starts here.
ensure_dir(OUT_DIR)
for root, dirs, files in os.walk(os.getcwd()):
for dir in dirs:
print "Processing", os.path.join(root, dir)
for file in files:
fn = os.path.join(root) + '/' + file
if fn.find(OUT_DIR) > 0:
continue
tg = getTarget(fn)
if file.endswith('.html'):
processHtml(fn, tg)
if file.endswith('.css'):
processCSS(fn, tg)
if file.endswith('.js'):
processJS(fn, tg)
dzięki za wskazanie mi tego. W dziennikach widzę, że niektóre przeglądarki jeszcze nie obsługują gzip; ale patrząc ponownie na dzienniki, prośby, które otrzymuję w ten sposób, nie są aż takie. –
Usunięcie 65% oryginalnego HTML prawdopodobnie nie przyniesie 65% oszczędności po skompresowaniu, ale nadal będzie coś zapisywać. – geoffspear
Pamiętaj też, że czasami HTML jest przechowywany na memcache i zdecydowanie chcesz go skompresować przed –