如何对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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目添加百度统计

vue项目添加百度统计

如何在网页标题栏title加入logo(icon)图标?

From: https://www.cnblogs.com/lyp123/articles/5661661.html 打开某一个网页会在浏览器的标签栏处显示该网页的标题和图标&#xff0c;当网页被添加到收藏夹或者书签中时也会出现网页的图标&#xff0c;怎么在网页title左边显示网页的logo图标呢&#xff1f; 方法一&#xf…

教你如何在linux 下批量卸载

教你如何在linux 下批量卸载 最 近本来想在linux 下配置 JDK 6.0 用来开发java&#xff0c;然后遇到很多麻烦&#xff0c;一开始的时候屁颠屁颠的到SUN的网站去下载个 JRE 的bin 文件&#xff0c;这个文件比较小&#xff0c;几十MB而已&#xff0c;安装的时候它自动安装在 /usr…

Unity AssetBundles and Resources指引 (三) AssetBundle基础

本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and-resources?playlist30089 A guide to AssetBundles and Resources 第三部分 AssetBundle基础 3.1概览 AssetBundles系统提供一种手段把一个或多个Asse…

vue项目启动成功浏览器不显示

场景&#xff1a;vue项目启动成功&#xff0c;无任何报错&#xff0c;但是浏览器却一直加载&#xff0c;页面始终是空白。 如果你的项目用到了element-ui的标签页组件el-tabs组件&#xff0c;那么大概率是此组件引起的浏览器卡死问题。 可以现将el-tabs的代码注释掉&#xff0c…

几种常用的清除浮动方法(一)

From: https://www.cnblogs.com/nxl0908/p/7245460.html 1、父级div定义伪类&#xff1a;after和zoom <style type"text/css"> .div1{background:#000080;border:1px solid red;}.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px…

vi and vim 用法

a 在当前光标后面插入字符 i 在当前光标前面插入字符 I 在当前行首插入字符 A 在当前行尾插入字符 o(字母)在当前光标下一行插入字符 O(字母)在当前光标上一行插入字符 b移动光标到当前字符串的第一个字符 B移动光标到当前行的第一个字符(以空格分隔) cc 删除光标所在行并编辑 …

CentOS 7 yum 安装php5.6

配置yum源 追加CentOS 6.5的epel及remi源。 # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm以下是CentOS 7.0的源。 # yum install epel-release # rp…

h5下载静态文件

1.需要将文件放src的下面的static的文件夹内 2.如果下载的是浏览器不能识别的&#xff08;例如&#xff1a;.exe,.zip,.doc等&#xff09;内容&#xff0c;浏览器会直接进行下载&#xff0c;但是如果下载的是浏览器可以识别的&#xff08;例如&#xff1a;.png,.jpg等&#xff…

浮动的清除 -- 四种方法

From: https://www.cnblogs.com/gchlcc/p/5824200.html 前言 -- 一个父亲不能被自己浮动的儿子&#xff0c;撑出高度。 开胃小菜 来看一个实验&#xff1a;现在有两个div&#xff0c;div身上没有任何属性。每个div中都有li&#xff0c;这些li都是浮动的。我们本以为这些li&a…

vue引入本地图片不显示;vue引入本地图片;

data () {return {imgUrl: require(/static/平安团意险.jpg), // 动态引入图片}},

目录索引

〇、接口、泛型、委托、事件 1.泛型和协变逆变2.委托和事件3.c#基础4.c#4.0协变逆变的理解一、linq等数据处理 1.数据查询2.数组3.linq 总结二、并行程序 1.并行性能简单分析三、编码技巧 1.考虑用类型代替参数检查2.c#没有指针导致的性能问题研究一二3.匿名函数递归4.代码设计…

equals和=,==的区别

一. 和equals的区别 1. 是运算符 2. equals是String对象的方法 一般有两种类型的比较 1. 基本数据类型的比较 2. 引用对象的比较 1. 基本数据类型的比较 和equals都比较的是值是否相等&#xff0c;相等则为true&#xff0c;否则为false 2. 引用对象的比较 和equals都是比较是栈…

eq相等,smarty 比较操作符!时间戳

2019独角兽企业重金招聘Python工程师标准>>> eq相等&#xff0c; ne、neq不相等&#xff0c; gt大于&#xff0c; lt小于&#xff0c; gte、ge大于等于&#xff0c; lte、le 小于等于&#xff0c; not非&#xff0c; mod求模。 is [not] div by是否能被某数整除&am…

阅读笔记四

学以致用 战国末期的思想家荀子曾经说过&#xff1a;“知之而不行&#xff0c;虽敦必困”。看到这句话&#xff0c;我想大家都知道它的意思&#xff0c;懂得许多道理却不付诸实践&#xff0c;虽然知识很丰厚&#xff0c;也必将遇到困厄。 没错&#xff0c;在这半个多月当中&…

推荐!!!【大杂烩】url、file、blob、base64互相转换

url地址或file文件获取base64 base64转blob blob或file转url&#xff1a; 使用URL.createObjectURL()方法读取出url js读取图片不同信息流

html页面通过特殊链接:打电话,发短信,发邮件详细教程

From: http://www.cnblogs.com/liuhongfeng/p/4976599.html 采用url href链接的方式&#xff0c;实现在Safari ios&#xff0c;Android 浏览器&#xff0c;webos浏览器&#xff0c;塞班浏览器&#xff0c;IE&#xff0c;Operamini等主流浏览器&#xff0c;进行拨打电话功能。…

Photoshop切图学习

前端开发中&#xff0c;之前都是Designer给我们切好图&#xff0c;给出readline&#xff0c;所以我们前端工程师基本不自己动手切图&#xff0c;现在换了新的公司&#xff0c;需要我们自己手动切一些图。Designer制作好的psd的图片如下&#xff1a; 自己想达到以下要求&#xf…

【vant】van-list的滚动加载onload事件

1.van-list的滚动加载onload事件&#xff1a;onload莫名执行多次或者一直加载到所有数据。 2.官方说了&#xff0c;不能使用float和overflow。包括父级元素和html和body都不要用这些触发BFC的属性 3.滑动到底部会触发该事件&#xff08;一定要注意父级标签&#xff0c;甚至 htm…

C#操作XmlDocument对象 报缺少根节点 一一道来

C# 操作XmlDocument文档 1.第一步选择文件目录string FileNamestring.Empty;SaveFileDialog sfdnew SaveFileDialog();if(sfd.ShowDialog() DialogResult.OK){ FileName sfd.FileName; }FileStream fs;//判断文件是否存在if(!File.Exists(FileName)){ fs File.Create(…