tôi đã viết một kịch bản build rằng bản sao mẫu của tôi vào một thư mục khác và sau đó tôi sử dụng thủ thuật này để nói với ứng dụng của tôi để chọn mẫu đúng trong chế độ phát triển, hoặc trong sản xuất:
DEV = os.environ['SERVER_SOFTWARE'].startswith('Development') and not PRODUCTION_MODE
TEMPLATE_DIR = 'templates/2012/head/' if DEV else 'templates/2012/output/'
dù nó được gzipped bởi máy chủ web của bạn không thực sự là điểm, bạn nên lưu mọi byte mà bạn có thể lý do hiệu suất.
Nếu bạn xem một số trang web lớn nhất, chúng thường làm những việc như viết html không hợp lệ để lưu byte, ví dụ: thường bỏ qua dấu ngoặc kép trong thuộc tính id trong thẻ html, ví dụ:
<did id=mydiv> ... </div>
Thay vì:
<did id="mydiv"> ... </div>
Và có rất nhiều ví dụ như thế này, nhưng đó là bên cạnh phạm vi các chủ đề tôi đoán.
Quay lại câu hỏi, tôi đặt cùng một tập lệnh xây dựng nhỏ giúp rút gọn HTML, CSS và JS của bạn. Caveat: Nó không bao gồm trường hợp của thẻ 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)
nhờ chỉ cho tôi ra khỏi đây. Tôi thấy trong nhật ký rằng một số trình duyệt chưa hỗ trợ gzip; nhưng nhìn vào nhật ký một lần nữa, các yêu cầu tôi nhận được như thế này không nhiều lắm. –
Xóa 65% của HTML gốc có thể sẽ không tiết kiệm 65% khi được nén, nhưng nó vẫn sẽ lưu một số thứ. – geoffspear
Cũng đừng quên rằng đôi khi html được lưu trữ trên memcache và bạn defiantly muốn nén nó trước –