如何对Javascript代码进行二次压缩(混淆)
如何對Javascript代碼進行二次壓縮(混淆)
對Javascript代碼進行壓縮(混淆),可以有效減少傳輸和加載時間。但是,不是所有的變量(方法)都能被混淆的,一般來說,只有非屬性的變量(方法)可以被混淆,而屬性的變量(方法)就不行了。我們自己是知道這些屬性(方法)是不會被外部訪問和修改的,所以可以很放心地對其進行二次混淆。那么,如何自己定義混淆規則并進行二次混淆呢?
首先,頁面上至少要用一個輸入框和一個按鈕。我這里設置有2個輸入框,分別加上“uncompress”和“compress”兩個類,表示為壓縮和已壓縮的。點擊按鈕,就開始壓縮。
然后,自定義混淆規則,把壓縮前和壓縮后的字符串分別存在兩個數組里面,然后,使用replace方法進行替換就可以了。代碼如下:
var beforeArr = ['addUniqueClass', 'longValue', 'IDontKnowWhatIsIt'],afterArr = ['au', 'lv', 'idk']; $("button").on('click', function() {var value = $(".uncompressed").val();var length = beforeArr.length;for(var i = 0; i< length; i ++) {value = value.replace(beforeArr[i], afterArr[i]);}$(".compressed").val(value); });?
好了,當我們用這個方法去壓縮代碼后,覺得不放心,看看是不是確實都替換了。在代碼里面搜一搜有沒有壓縮前的字符串,發現還真有,這是怎么回事?原來,當我們只是用字符串替換字符串時,是只能替換一次的,如果后面還有就無法繼續替換了。不過正則表達式里面有全局替換的功能,所以把字符串轉換成全局的正則表達式就可以了。
$("button").on('click', function() {var value = $(".uncompressed").val();var length = beforeArr.length;for(var i = 0; i< length; i ++) {var exg = new RegExp(beforeArr[i], 'g');value = value.replace(exg, afterArr[i]);}$(".compressed").val(value); });
這下,代碼里面就搜不到壓縮前的字符串了。
但還有一點不滿意,就是維護性差了些,如果添加新的規則還好辦,如果要修改或刪除原有規則,那就沒那么容易一一對應了。所以要做成映射關系比較直觀的數組,像這樣:
var Arr = ['addUniqueClass → au','longValue → lv', 'IDontKnowWhatIsIt → idk' ];
?
這樣,看起來就直觀多了,剩下的只是把箭頭兩側的字符串分別存在兩個數組里面就可以了。
另外,為了避免像$這樣的符號無法被識別出來,可以在正則表達式前面加上'\\'。
完整代碼如下:
var Arr = ['addUniqueClass → au','longValue → lv', 'IDontKnowWhatIsIt → idk' ],beforeArr = [],afterArr = [],arrLength = Arr.length; for(var i = 0; i < ArrLength; i ++){var value = arr[i].split('→')[0].trim();beforeArr.push(value);value = arr[i].split('→')[1].trim();afterArr.push(value); }$("button").on('click', function() {var value = $(".uncompressed").val();var length = beforeArr.length;for(var i = 0; i< length; i ++) {var exg = new RegExp('\\' + beforeArr[i], 'g');value = value.replace(exg, afterArr[i]);}$(".compressed").val(value); });
轉載于:https://www.cnblogs.com/linzb1993/p/5949281.html
總結
以上是生活随笔為你收集整理的如何对Javascript代码进行二次压缩(混淆)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女人梦到左手流血好不好
- 下一篇: 梦到被两条蛇咬了是什么意思