Python壓縮JS文件,重點是 slimit

摘要:Python Web程序員必看系列,學習如何壓縮 JS 代碼。

本文分享自華爲雲社區《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())

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章