本文分享自華為雲社群《Python壓縮JS檔案,PythonWeb程式員必看系列,重點是 slimit-雲社群-華為雲》,作者: 夢想橡皮擦 。
本篇部落格将學習壓縮 JS 代碼,首先要學習的子產品是 jsmin。
jsmin 庫
Python 中的 jsmin 庫來壓縮 JavaScript 檔案。這個庫可以通過删除不必要的空格和注釋來最小化 JavaScript 代碼。
庫的安裝
在控制台使用如下指令即可安裝,注意如果網絡不好,請切換國内源。
pip install jsmin
jsmin 庫代碼示例
在壓縮前,請提前準備一個未被壓縮的 JS 檔案,便于對口前後效果。
import jsmin
with open("jquery.tweetscroll.js", "r", encoding='utf-8') as input_file:
with open("output.js", "w", encoding='utf-8') as output_file:
output_file.write(jsmin.jsmin(input_file.read()))
下圖可直覺查閱壓縮前與壓縮後的效果。
壓縮 JS 檔案核心用到的函數是 jsmin.jsmin(input_file.read()),其 jsmin() 詳細說明如下。
這個函數接受一個字元串參數,表示要壓縮的 JavaScript 代碼。它會移除不必要的空格、注釋和換行符,并傳回壓縮後的 JavaScript 代碼。注意該方法不支援 ECMAScript 6 新特性。
jsmin.jsmin(javascript_code)
rjsmin 庫
rjsmin 是 Python 編寫的 JavaScript 代碼壓縮工具,該庫的使用與 jsmin 基本一緻,壓縮速度會快一些,所有的邏輯都使用正規表達式實作。
庫的安裝
使用下述指令進行安裝,該庫包含 rjsmin 庫。
pip install rjsmin
rjsmin 庫代碼示例
import rjsmin
with open("jquery.tweetscroll.js", "r", encoding='utf-8') as input_file:
with open("output.js", "w", encoding='utf-8') as output_file:
output_file.write(rjsmin.jsmin(input_file.read()))
slimit 庫
slimit 是一個 Python 庫,它可以用來壓縮 JavaScript 代碼。slimit 是一個純 Python 實作,它沒有依賴其它庫,可以在任何環境下使用。
slimit 使用了 LALR(1) 文法分析器來解析 JavaScript 代碼,并使用自己的算法來壓縮代碼。它支援壓縮 ECMAScript 5 代碼,包括使用了 ECMAScript 5 的嚴格模式。
庫的安裝
pip install slimit
slimit 庫的使用
slimit 的用法非常簡單,提供了一個名為 slimit() 的函數,可以将 JavaScript 代碼作為字元串傳入,并傳回壓縮後的 JavaScript 代碼。
from slimit import minify
text = """
var foo = function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
};
"""
js_cdoe = minify(text, mangle=True, mangle_toplevel=True)
print(js_cdoe)
首次運作忽略代碼警告即可。
slimit 庫的其他用途
周遊、修改 JavaScript AST
from slimit.parser import Parser
from slimit.visitors import nodevisitor
from slimit import ast
parser = Parser()
tree = parser.parse('for(var i=0; i<10; i++) {var x=5+i;}')
for node in nodevisitor.visit(tree):
if isinstance(node, ast.Identifier) and node.value == 'i':
node.value = 'hello'
print(tree.to_ecma())
關注#華為雲開發者聯盟# 點選下方,第一時間了解華為雲新鮮技術~
華為雲部落格_大資料部落格_AI部落格_雲計算部落格_開發者中心-華為雲