如何從python壓縮(最小化)HTML;我知道我可以使用一些正則表達式去除空格和其他東西,但是我想要一個真正的使用純Python的編譯器(所以它可以在Google App Engine上使用)。壓縮(最小化)來自python的HTML
我做了一個在線html壓縮器的測試,它節省了65%的html大小。我想要那個,但是來自python。
如何從python壓縮(最小化)HTML;我知道我可以使用一些正則表達式去除空格和其他東西,但是我想要一個真正的使用純Python的編譯器(所以它可以在Google App Engine上使用)。壓縮(最小化)來自python的HTML
我做了一個在線html壓縮器的測試,它節省了65%的html大小。我想要那個,但是來自python。
您可以使用htmlmin來縮小你的HTML:
import htmlmin
html = """
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Case</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Well</h2>
<div class="well">Basic Well</div>
</div>
</body>
</html>
"""
minified = htmlmin.minify(html.decode("utf-8"), remove_empty_space=True)
print(minified)
我想在GAE沒有真的需要縮小你的HTML作爲GAE已經gzip壓縮它Caching & GZip on GAE (Community Wiki)
我沒有測試,但HTML的精縮版可能會獲勝只有1%的大小,因爲它只是刪除空間一旦兩個版本都被壓縮。
如果你想節省空間,例如通過memcached的話,你必須比在蟒蛇消除空間更感興趣gzip壓縮它(即使在壓縮的低電平)在C處理相反,它很可能是更小,更快純Python
的我寫的複製我的模板到另一個目錄中生成腳本,然後我用這種伎倆來告訴我的應用程序選擇,或在生產發展模式正確的模板:
DEV = os.environ['SERVER_SOFTWARE'].startswith('Development') and not PRODUCTION_MODE
TEMPLATE_DIR = 'templates/2012/head/' if DEV else 'templates/2012/output/'
無論它是由你的網絡服務器gzipped是不是真的重點,你應該保存每個字節,你可以爲性能的原因。
如果你在一些最大的網站看看在那裏,他們經常做這樣的事情寫無效的HTML保存字節,例如,常見的是省略雙引號ID在html標籤屬性,例如:
<did id=mydiv> ... </div>
相反的:
<did id="mydiv"> ... </div>
而且有像這樣的幾個例子,但是這線程我猜的範圍旁邊。
回到問題,我放了一個小的生成腳本,縮小您的HTML,CSS和JS。警告:它不包括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)
htmlmin和html_slimmer是Python的一些簡單的HTML縮小文件的工具。我有數百萬的html頁面存儲在我的數據庫中,並運行htmlmin,我可以將頁面大小縮小5%到50%。他們都沒有在完成html縮小時做出最佳工作(即字體顏色#00000可以減少到#000),但這是一個好的開始。我有一個try/except塊運行htmlmin,然後如果失敗,html_slimmer,因爲htmlmin似乎提供更好的壓縮,但它不支持非ascii字符。
示例代碼:
import htmlmin
from slimmer import html_slimmer # or xhtml_slimmer, css_slimmer
try:
html=htmlmin.minify(html, remove_comments=True, remove_empty_space=True)
except:
html=html_slimmer(html.strip().replace('\n',' ').replace('\t',' ').replace('\r',' ') )
祝您好運!
感謝您指出我出這一點。我在日誌中看到一些瀏覽器尚不支持gzip;但再次查看日誌,我得到的要求並不多。 – 2011-04-08 15:42:24
刪除65%的原始HTML可能不會在壓縮時保存65%,但它仍然可以節省一些東西。 – geoffspear 2011-04-09 14:10:31
另外不要忘記,有時候html會存儲在memcache上,你很難在之前壓縮它 – 2011-05-18 12:21:48