我们知道,如果要对JS代码进行保护,最普遍的做法是进行混淆加密。

很多人会有担忧:混淆加密后,会不会造成性能影响?JS混淆会带来多少性能损失?

理论而言,混淆加密会使JS 代码量增加,那么执行时理应有性能影响。

重点是:会带来多少性能损失,是否会严重影响执行效率?

为了验证这一问题,本文通过实测的方式寻求真相,揭示JS混淆加密究竟会带来多少性能影响。

准备

1、JS代码混淆加密,使用JShaman代码保护平台,这是国内知名的商业JS代码混淆服务平台。

实验使用JShaman的通用版保护。

2、验证性能影响,我们使用console.time()和console.endtime()方法,在node环境下执行,通过打印出代码执行时间,比较混淆前后的执行时间差,得出具体的影响结果。

为了分别验证不同代码量下的影响情况,实验将分三次进行,分别使用少量代码、中等代码量、大量代码。

实验一、小量代码测试

准备一小段代码,并运行,如下:

把上述代码,提交到JShaman平台进行混淆。

注:使用默认的混淆选项,后面的测试也都使用此相同配置:

混淆后,代码量增加了不少:

再次运行,如下:

混淆后代码执行时间慢了约0.2毫秒。带来的性能影响基本可忽略。

实验二、中量代码测试

写一个功能代码,用于获取CPU使用率:

用同样的方式,经JShaman对代码进行混淆,再次运行测试:

惊人的一幕发生了:混淆后的代码执行效率竟然更高?!真是令人难以置信,所以不敢相信的连续运行了三次,然而三次运行结果都比混淆前更快。

注:如上图,混淆前,代码执行时长:1045.935毫秒。混淆后,三次运行时长都小此此值。

为什么会发生这种情况?混淆后代码量增大了,执行效率反而提升了?

粗略的猜想:是由于混淆的过程,对数据进行了优化,将数据统一命名,又对执行顺序(AST树)进行了优化?

带着疑惑,继续进行测试。

实验三、大量代码测试

由于是测试,虽说要大量代码,但不会真太多,是相对上面两组代码而言。

这里使用base64算法进行测试,代码量160多行。

还是用相同的方式,通过JShaman对其混淆:

混淆后运行:

可以看到,运行时长在16.8毫秒到21.1毫秒之间。比之前的13.7毫秒慢了2.9到8.4毫秒之间。

感觉慢一些才是合理的,不惊慌、也不奇怪。这组的性能损失完全能接受。

到此,感觉测试结果跟想像的很不同,本以为混淆会带来很大的性能影响才对。疑惑感更重了,为此,再加一组测试,将JShaman的混淆强度提高:

这个混淆强度已很高,已经达到了商用级,可以满足绝大多数的保护要求。

再次混淆,可以看到这个强度的混淆后,文件已经由6K增大到了24K,体积的增加,说明代码量增大了,代码量增大后,运行速度应该会很受影响吧?

运行,看结果:

代码执行时长仅在约18毫秒到23秒之间。又一次令人意外!这个效能是完全可以接受的。

总结:

说实话,这个测试结果着实令人意外。本以为混淆会严重影响执行性能。而实验结果证明:少量的代码混淆,几乎是不会带来执行性能损失。大量的代码混淆,确实带来一定的性能影响,但其影响很小,是完全可以接受的。

那么,当我们有比较重要的JS代码在公开发布、或提供给他人时,使用混淆加密是种很好的代码保护方案,可以有效的防止分析、复制、盗用等,而且不必太担心性能影响问题。

前端JS、app、h5、后端nodejs代码,都是可以用的噢。

万万没想到:对JS代码混淆,竟造成这样的性能损失?相关推荐

  1. 6月Top 20榜单出炉啦! 万万没想到区块链大佬竟在忙这个...

    6月Top 20榜单出炉啦! 万万没想到区块链大佬竟在忙这个... 一个项目在 GitHub 上的活跃指数,在一定程度上代表了这个项目的开发状态. 频繁更新代码的项目有可能正处于构建和完善中,而停止更 ...

  2. 科学家们竟用乐高观察细胞,网友:万万没想到啊

    杨净 子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 玩乐高还能玩出个显微镜?! 原本以为是一个普普通通的玩具. 没想到,还真能当成显微镜来用,是能看到细胞的那种. 真·高端新玩法! 比如 ...

  3. python这个软件学会能做什么工作-万万没想到,学会Python即使不做程序员都能月入过万!...

    昨天,我公司面试了1个同学,应聘新媒体运营,专业能力还不错.他简历上技能栏还写着会Python,我问了他一个通过爬虫采集数据的问题,他都顺畅的答出来了. 最后聊薪资时,他说期待7000,我直接给他开了 ...

  4. 字节跳动---万万没想到之抓捕孔连顺

    字节跳动-万万没想到之抓捕孔连顺 文章目录 字节跳动---万万没想到之抓捕孔连顺 一.题目描述 二.分析 三.代码 一.题目描述 我叫王大锤,是一名特工.我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐 ...

  5. 字节跳动---万万没想到之聪明的编辑

    字节跳动-万万没想到之聪明的编辑 文章目录 字节跳动---万万没想到之聪明的编辑 一.题目描述 二.分析 三.代码 一.题目描述 我叫王大锤,是一家出版社的编辑.我负责校对投稿来的英文稿件,这份工作非 ...

  6. 牛客网-数据结构笔试题目(二)-万万没想到之抓捕孔连顺思路解析(附源码)

    题意 我叫王大锤,是一名特工.我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐怖分子孔连顺.和我一起行动的还有另外两名特工,我提议 我们在字节跳动大街的N个建筑中选定3个埋伏地点. 为了相互照应,我们决 ...

  7. 万万没想到,我的炼丹炉玩坏了

    一只小狐狸带你解锁NLP/ML/DL秘籍 作者:夕小瑶 前记 众所周知,夕小瑶是个做NLP的小可爱. 虽然懂点DL框架层知识,懂点CUDA和底层,但是我是做算法的哎,平时debug很少会遇到深度学习框 ...

  8. ora 00900 已编译但有错误_技术分享|万万没想到!编译错误竟然还没灭绝???

    CodeWisdom-技术分享 万万没想到!编译错误竟然还没灭绝??? 复旦大学CodeWisdom团队的代码分析和挖掘小组针对开源软件项目持续集成过程中出现的编译错误,进行了大规模的经验研究.该研究 ...

  9. 万万没想到之抓捕孔连顺问题的一些思考

    我叫王大锤,是一名特工.我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐怖分子孔连顺.和我一起行动的还有另外两名特工,我提议我们在字节跳动大街的N个建筑中选定3个埋伏地点.为了相互照应,我们决定相距最远 ...

最新文章

  1. vmware中的网络(bridge,nat)(转载)
  2. c++字符串输入_【pwn】什么是格式化字符串漏洞?
  3. 绥化a货翡翠,拉萨a货翡翠
  4. 被文献坑是一种什么样的体验?
  5. VIPKID上云 解决多云Web统一安全防护问题
  6. Spark源码分析之SparkContext
  7. 手把手,快速搭建 Cocos2d-HTML5 开发调试环境
  8. 递归处理二叉树总结(附leetcode题)
  9. GBK 与GB2312 互查 区位码
  10. 那些惊艳到你了的古诗词?
  11. 实验室设备管理系统C语言——课程设计实习
  12. presto字符串转日期
  13. 利用python提取企查查企业的工商基本信息
  14. EAUML日拱一卒--序列图(Sequence Diagram)::交互和交互使用
  15. matlab计算矩阵中非零元素个数
  16. C# 处理PPT水印(二)——去除水印效果(文本水印、图片水印)
  17. 信用卡如何使用?广发卡自动分期教你这样养卡技巧
  18. 使用IBM SPSS快速对数据进行分组
  19. Python 元组() (元素不能修改),元组的定义,元组与列表的转换,元组的应用场景
  20. 拼多多百亿补贴石锤了!

热门文章

  1. MarkDown超级教程 Obsidian版 2022.1.12
  2. python中获取文件扩展名
  3. 图书管理系统之读者信息管理实现
  4. `泷泽萝拉.png .exe`
  5. 未能写入输出文件..”--“拒绝访问。”的解决办法 [转]
  6. 【五校联考1day1】我才不是萝莉控呢
  7. 机器学习从零到一的基础知识总集篇
  8. 20155305乔磊2016-2017-2《Java程序设计》第十周学习总结
  9. (Java实现) 最大团问题 部落卫队
  10. 中国人,怎样毁了 祖传中医