如何对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);
});

  

如何对Javascript代码进行二次压缩(混淆)的更多相关文章

  1. 【JavaScript代码实现二】通用的事件侦听器函数

    // event(事件)工具集,来源:github.com/markyun markyun.Event = { // 页面加载完成后 readyEvent : function(fn) { if (f ...

  2. Google Closure Compiler高级压缩混淆Javascript代码

    一.背景 前端开发中,特别是移动端,Javascript代码压缩已经成为上线必备条件. 如今主流的Js代码压缩工具主要有: 1)Uglify http://lisperator.net/uglifyj ...

  3. 使用Google Closure Compiler高级压缩Javascript代码

    背景 前端开发中,特别是移动端,Javascript代码压缩已经成为上线必备条件. 如今主流的Js代码压缩工具主要有: 1)Uglify http://lisperator.net/uglifyjs/ ...

  4. JavaScript代码段整理笔记系列(二)

    上篇介绍了15个常用代码段,本篇将把剩余的15个补齐,希望对大家有所帮助!!! 16.检测Shift.Alt.Ctrl键: event.shiftKey; //检测Shift event.altKey ...

  5. How Javascript works (Javascript工作原理) (二) 引擎,运行时,如何在 V8 引擎中书写最优代码的 5 条小技巧

    个人总结: 一个Javascript引擎由一个标准解释程序,或者即时编译器来实现. 解释器(Interpreter): 解释一行,执行一行. 编译器(Compiler): 全部编译成机器码,统一执行. ...

  6. 林大妈的JavaScript基础知识(二):编写JavaScript代码前的一些简单工作

    在介绍JavaScript语法前,我们需要知道,学习语法必须要多利用手敲代码来巩固记忆.因此,由于JavaScript的特性,它不能像C++和Java一样独立地编译及运行,我们需要在调试运行JavaS ...

  7. JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  8. JavaScript学习总结(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  9. JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法

    网上搜索了,目前主流的Js代码压缩工具主要有Uglify.YUI Compressor.Google Closure Compiler,简单试用了UglifyJS 和Google Closure Co ...

随机推荐

  1. jQuery在线选座订座(影院篇)

    原文:jQuery在线选座订座(影院篇) 我们在线购票时(如电影票.车票等)可以自己选座.开发者会在页面上列出座次席位,用户可以一目了然的看到可以选择的座位及支付.本文以电影院购票为例,为您展示如何选 ...

  2. apache 提示You don't have permission to access /test.php on this server.怎样解决

    把denty改成allow httpd.conf文件中. <Directory "cgi-bin"> AllowOverride None Options None O ...

  3. Smarty数学运算

    数学运算可以直接应用到变量 Example 3-5. math examples 例 3-5.数学运算的例子   {$foo+1} {$foo*$bar} {* some more complicat ...

  4. RabbitMq install on Centos6.3

    安装服务(root) step 1:  启用EPEL:EPEL是一个Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux),EPEL是 ...

  5. C#动态表达式计算(续2)

    上两篇废话太多,这一次我就不多说了,由于代码比较简单,可以直接从https://github.com/scottshare/DynamicExpress.git地址下载. 以下说明一下使用方法: Dy ...

  6. Operating System 概述和学习图

    Operating System 概述和学习图 大神绕道,鄙人初入 OS . 一.想知OS,先知计算机系统概述 #图解 #基本指令和中断周期 #直接内存存取(Direct Memory Access, ...

  7. Windows服务、批处理项目实战

    一周一话题之三(Windows服务.批处理项目实战)   -->目录导航 一. Windows服务 1. windows service介绍 2. 使用步骤 3. 项目实例--数据上传下载服务 ...

  8. DNN简介以及安装

    开源框架DNN简介以及安装 donetnuke 是一款免费的开源cms框架,目前也有收费版,不过免费版也可以适应大家大部分的需求.我前些阵子是老板让我在20天内,做好一个官网并且发布,并且指定使用dn ...

  9. linux内核数据结构之链表

    linux内核数据结构之链表 1.前言 最近写代码需用到链表结构,正好公共库有关于链表的.第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域.后来看代码注释发现该 ...

  10. worker进程中线程的分类及用途

    worker进程中线程的分类及用途 欢迎转载,转载请注明出版,徽沪一郎. 本文重点分析storm的worker进程在正常启动之后有哪些类型的线程,针对每种类型的线程,剖析其用途及消息的接收与发送流程. ...