首页 > 其他分享 >如何修改min.js或者压缩后的js,以便提高代码的可读性。

如何修改min.js或者压缩后的js,以便提高代码的可读性。

时间:2023-08-28 09:45:29浏览次数:35  
标签:activeIndex set 可读性 min 代码 js length data

前端的js上线的时候一般会使用打包工具处理(webpack,gulp,ugly.js 等)。这样做有几点作用。

  1. 可以压缩空间,提高页面响应速度
  2. 一定程度上可以保护自己的代码安全,防止别人清晰看懂逻辑或者拷贝代码。
  3. 提高别人阅读自己代码的门槛

可前端开发工作中多多少少,会需要看别人的js代码。可随之而来的就是各种噩梦。eval,jsfuck,obfuscator等各种混淆方案就出来了。当然这种也在一定程度上保护了自己的代码。可是对于阅读者来说,简直是天书。关于混淆,以及反混淆等空了再写博客讲解。不过最常见的还是简化,简化后的代码,往往第一步处理起来是进行格式化,然后边看边修改。其中非常大的工作量是调整代码结构。理清文件的结构逻辑。比如下面的代码。

1 function _createClass(t, e, a) {
2   return e && _defineProperties(t.prototype, e), a && _defineProperties(t, a), t
3 }

其实阅读这个代码有些复杂的,里面既有逻辑运算,也有序列表达式,也有返回值。这个是否非常想处理为下面的结构:

复制代码
1 function _createClass(t, e, a) {
2     if (e) {
3         _defineProperties(t.prototype, e);
4     }
5     if (a) {
6         _defineProperties(t, a);
7     }
8     return t;
9 }
复制代码

这种代码结构就清晰多了。可是如何自动化处理那?手动修改一是慢,二是非常容易出错,在着无法完成功能复用。遇到其他的代码任然需要重新修改。比如这个时候又来了这样一段代码。

复制代码
1 function m(t) {
2   var e = this.data.get("items"),
3     a = this.data.get("loop"),
4     n = e.length;
5   t < 0 ? a ? this.data.set("activeIndex", n - 1) : this.data.set("activeIndex", 0) : t >= n ? a ? this.data.set("activeIndex", 0) : this.data.set("activeIndex", n - 1) : this.data.set("activeIndex", t)
6 }
复制代码

首先一行定义了多个变量,变量的名称真想重新命名一下,把e重命名为items,a重命名为loop, 不过最后的嵌套多层的三元运算,直接让人崩溃。忽然就想到多年前同事说过的一句话,程序员何必为难程序员。玩笑归玩笑,不过还是要积极的心态面对技术挑战不是。

首先是变量声明表达式,一次声明了三个变量。这种写法其实程序员是比较排斥的,非常想一行写一个。

复制代码
 1 function m(offset) {
 2     var items = this.data.get("items");
 3     var loop = this.data.get("loop");
 4     var length = items.length;
 5     if (offset < 0) {
 6         if (loop) {
 7             this.data.set("activeIndex", length - 1);
 8         } else {
 9             this.data.set("activeIndex", 0);
10         }
11     } else {
12         if (offset >= length) {
13             if (loop) {
14                 this.data.set("activeIndex", 0);
15             } else {
16                 this.data.set("activeIndex", length - 1);
17             }
18         } else {
19             this.data.set("activeIndex", offset);
20         }
21     };
22 }
复制代码

上面的代码就好看多了,基本的逻辑也可以看懂了。当时就想有没有工具可以做这个,或者如何利用现在的gpt工具去美化一下那。后检索了大量的资料,使用过市面的各种工具,发现还是自己写比较合适。gpt美化后,会有明显的代码逻辑错误。更重要的是有输入限制。

 

写一个js代码美化工具,多么具有挑战性。起码要懂编译原理,程序的语义和语法。于是买了很多关于编译原理的书。看几本后就上手了。结果写的80%以上了后,因为各种事情一直耽搁着。最近终于完成了大部分。感兴趣的朋友可以看下。

https://www.dejs.vip/javascript/beautify   (目前仍有部分bug并且无法100%还原代码的)

function justAFunction(){console.info("test");}

上面的代码简化后可能变成:

1 function a(){console.info("test");}

如果仅从代码中是无法推断出原来函数的名字的。不过可以根据文中语义去判定。但是大多时候,你是无法判定的。代码逻辑分析中加入人工智能或者使用代码库比对,有可能可以做到。不过这种复杂的程度过高了。

 

这个工具也许是前端,逆向或者爬虫工作者的一个福音。也或许会给代码持有者带来不安或者担忧。如何判定工具,留给使用者自行判定吧。

 

 

【出处】:https://www.cnblogs.com/kali2021/p/17660889.html

标签:activeIndex,set,可读性,min,代码,js,length,data
From: https://www.cnblogs.com/mq0036/p/17661440.html

相关文章

  • Programming abstractions in C阅读笔记:p130-p131
    《ProgrammingAbstractionsInC》学习第52天,p130-p131,总结如下:一、技术总结1.piglatingame通过piglatingame掌握字符复制,指针遍历等操作。/**输入:字符串,这里采用书中坐着自定义的getline函数*/#include<stdio.h>#include<string.h>#include"simpio.h"#def......
  • js 判断如果是移动端就自动跳转到 移动端的页面上去
    js判断如果是移动端就自动跳转到移动端的页面上去 <script>!(function(){constuserAgent=naviator.userAgent;constandroid=userAgent.match(/(Android);?[\s\/]+([\d.]+)?/);constiphone=userAgent.......
  • 如何修改min.js或者压缩后的js,以便提高代码的可读性。
    前端的js上线的时候一般会使用打包工具处理(webpack,gulp,ugly.js等)。这样做有几点作用。可以压缩空间,提高页面响应速度一定程度上可以保护自己的代码安全,防止别人清晰看懂逻辑或者拷贝代码。提高别人阅读自己代码的门槛可前端开发工作中多多少少,会需要看别人的js代码。可随......
  • 剑指Offer 30. 包含min函数的栈
    题目链接:剑指Offer30.包含min函数的栈题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用min、push及pop的时间复杂度都是O(1)。解法思路:首先理解题意:题目是要实现一个可以在O(1)的时间复杂度内得到栈中最小值得栈,如果是常......
  • 学生信息登记表单的录入删除代码JS+HTML TOMCAT听课笔记
    <!DOCTYPEhtml><html><head></head><body><formclass="info"autocomplete="off">姓名:<inputtype="text"class="uname"name="uname"&......
  • Educational Codeforces Round 152 (Rated for Div. 2)E. Max to the Right of Min(数
    题目链接:https://codeforces.com/problemset/problem/1849/E 大致题意: 长度为n的序列,求有多少个区间满足区间最大值在区间最小值的右边? 解题思路: (此题有使用线段树等其他做法,本处使用的是单调栈做法) 我们先求出每个a【i】的左边的比他小的LMIN,左边比他大的LMAX,右......
  • Windows10 环境下使用 Cmake 和 MinGW-w64 编译安装 OpenCV 4.0.1
    Windows10环境下使用Cmake和MinGW-w64编译安装OpenCV4.0.1翻译搜索复制......
  • Reminisce.ai - 更快理解新技术的人工智能学习应用
    什么是Reminisce.aiReminisce.ai是一个人工智能驱动的学习应用。它旨在帮助用户以最快的速度理解各种新技术的高层架构,比如React、Django、AWS等。Reminisce.ai非常适合需要经常学习使用新技术的人群,比如程序员、IT从业人员、学生等。它可以大大缩减用户理解新技术所需的时间,......
  • github.com/json-iterator/go 详细教程
    最近接触到了github.com/json-iterator/go,是由滴滴开源的第三方json编码库,它同时提供Go和Java两个版本。文中大量内容来自github上的wiki文档,有兴趣的朋友可以直接点击Home跳转到官方文档查阅。本文加了些自己的思考以及相关的详细学习例子,废话不多说了,冲!!!1、基础介......
  • minio 使用(Win)
    下载:https://www.minio.org.cn/download.shtml基本使用设置密码(设置环境变量):setxMINIO_ROOT_USERadminsetxMINIO_ROOT_PASSWORDpassword启动(先切换到minio.exe所在路径):minio.exeserverD:\Data--console-address:9001--address:13328server后的路径为minio......