返回顶部
首页 > 资讯 > 前端开发 > VUE >Javascript代码是如何被压缩的
  • 531
分享到

Javascript代码是如何被压缩的

2024-04-02 19:04:59 531人浏览 独家记忆
摘要

今天就跟大家聊聊有关javascript代码是如何被压缩的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。随着前端的发展,特别是 React,Vue

今天就跟大家聊聊有关javascript代码是如何被压缩的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

随着前端的发展,特别是 ReactVue 等构造单页应用的兴起,前端的能力得以很大提升,随之而来的是项目的复杂度越来越大。此时的前端的静态资源也越来越庞大,而毫无疑问 javascript 资源已是前端的主体资源,对于压缩它的体积至为重要。

为什么说更小的体积很重要呢:更小的体积对于用户体验来说意味着更快的加载速度以及更好的用户体验,这也能早就企业更大的利润。另外,更小的体积对于服务器来说也意味更小的带宽以及更少的服务器费用。

前端构建编译代码时,可以使用 webpack 中的 optimization.minimizer 来对代码进行压缩优化。但是我们也需要了解如何它是压缩代码的,这样当在生产环境的控制台调试代码时对它也有更深刻的理解。

如何查看资源的体积

对于我们所编写的代码,它在操作系统中是一个文件,根据文件系统中的 stat 信息我们可以查看该文件的大小。

stat 命令用来打印文件系统的信息:

$ stat config.js    File: ‘config.js’    Size: 3663            Blocks: 8          IO Block: 4096   regular file  Device: fd01h/64769d    Inode: 806060      Links: 1  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)  Access: 2020-02-13 13:43:54.851381702 +0800  Modify: 2020-02-13 13:43:52.668417641 +0800  Change: 2020-02-13 13:43:52.691417262 +0800   Birth: -

stat 打印的信息过大,如果只用来衡量体积,可以使用 wc -c 。

$ wc -c config.js  3663 config.js

如何压缩代码体积?

去除多余字符: 空格,换行及注释

// 对两个数求和  function sum (a, b) {    return a + b;  }

先把一个抽象的问题给具体化,如果是以上一段代码,那如何压缩它的体积呢:

此时文件大小是 62 Byte, 一般来说中文会占用更大的空间。

多余的空白字符会占用大量的体积,如空格,换行符,另外注释也会占用文件体积。当我们把所有的空白符合注释都去掉之后,代码体积会得到减少。

去掉多余字符之后,文件大小已经变为 30 Byte。 压缩后代码如下:

function sum(a,b){return a+b}

替换掉多余字符后会有什么问题产生呢?

有,比如多行代码压缩到一行时要注意行尾分号。 这就需要通过以下介绍的 AST 来解决。

压缩变量名:变量名,函数名及属性名

function sum (first, second) {    return first + second;  }

如以上 first 与 second 在函数的作用域中,在作用域外不会引用它,此时可以让它们的变量名称更短。但是如果这是一个 module 中,sum 这个函数也不会被导出呢?那可以把这个函数名也缩短。

// 压缩: 缩短变量名  function sum (x, y) {    return x + y;  }  // 再压缩: 去除空余字符  function s(x,y){return a+b}

在这个示例中,当完成代码压缩 (compress) 时,代码的混淆 (mangle) 也捎带完成。但此时缩短变量的命名也需要 AST 支持,不至于在作用域中造成命名冲突。

更简单的表达:合并声明以及布尔值简化

合并声明的示例如下:

// 压缩前  const a = 3;  const b = 4;  // 压缩后  const a = 3, b = 4;

布尔值简化的示例如下:

// 压缩前  !b && !c && !d && !e  // 压缩后  b||c||d||e

这个示例更是需要解析 AST 了。

AST

AST,抽象语法树,js 代码解析后的最小词法单元,而这个过程就是通过 Parser 来完成的。

那么 AST 可以做什么呢?

  •  eslint: 校验你的代码风格

  •  babel: 编译代码到 ES 低版本

  •  taro/mpvue: 各种可以多端运行的小程序框架

  •  GraphQL: 解析客户端查询

我们在日常工作中经常会不经意间与它打交道,如 eslint 与 babel,都会涉及到 js 与代码中游走。不同的解析器会生成不同的 AST,司空见惯的是 babel 使用的解析器 babylon,而 uglify 在代码压缩中使用到的解析器是 UglifyJS。

你可以在 AST Explorer[3] 中直观感受到,如下图:

Javascript代码是如何被压缩的

那压缩代码的过程:code -> AST -> (transfORM)一颗更小的 AST -> code,这与 babel 和 eslint 的流程一模一样。

Javascript代码是如何被压缩的

UglifyJS

不要重复造轮子!

于是我找了一个久负盛名的关于代码压缩的库: UglifyJS3[4],一个用以代码压缩混淆的库。那它是如何完成一些压缩功能的,比如替换空白符,答案是 AST。

WEBpack 中内置的代码压缩插件就是使用了它,它的工作流程大致如下:

// 原始代码  const code = `const a = 3;`  // 通过 UglifyJS 把代码解析为 AST  const ast = UglifyJS.parse(code);  ast.figure_out_scope();  // 转化为一颗更小的 AST 树  compressor = UglifyJS.Compressor();  astast = ast.transform(compressor);  // 再把 AST 转化为代码  code = ast.print_to_string();

而当你真正使用它来压缩代码时,你只需要面向配置编程即可,文档参考 uglify 官方文档[5] 。

{    {      ecma: 8,    },    compress: {      ecma: 5,      warnings: false,      comparisons: false,      inline: 2,    },    output: {      ecma: 5,      comments: false,      ascii_only: true,    }  }

在 webpack 中压缩代码

在知道代码压缩是怎么完成的之后,我们终于可以把它搬到生产环境中去压缩代码。终于到了实践的时候了,虽然它只是简单的调用 api 并且调调参数。

一切与性能优化相关的都可以在 optimization 中找到,TerserPlugin 是一个底层基于 uglifyjs 的用来压缩 JS 的插件。

optimization: {    minimize: isEnvProduction,    minimizer: [      new TerserPlugin({        terserOptions: {          parse: {            ecma: 8,          },          compress: {            ecma: 5,            warnings: false,            comparisons: false,            inline: 2,          },          output: {            ecma: 5,            comments: false,            ascii_only: true,          },        },        sourceMap: true      })    ]  }

看完上述内容,你们对Javascript代码是如何被压缩的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网VUE频道,感谢大家的支持。

--结束END--

本文标题: Javascript代码是如何被压缩的

本文链接: https://lsjlt.com/news/82577.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Javascript代码是如何被压缩的
    今天就跟大家聊聊有关Javascript代码是如何被压缩的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。随着前端的发展,特别是 React,Vue ...
    99+
    2024-04-02
  • Javascript代码是怎样被压缩的
    Javascript代码是怎样被压缩的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。随着前端的发展,特别是 React,Vue 等构造单页...
    99+
    2024-04-02
  • 如何压缩html代码
    小编给大家分享一下如何压缩html代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如何压缩html代码,让html文件缩小优化...
    99+
    2024-04-02
  • Java压缩JavaScript代码实例
    这篇文章主要讲解了Java压缩JavaScript代码实例,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。通过移除空行和注释来压缩 JavaScript 代码public class JavaScriptComp...
    99+
    2023-05-30
    javascript java avascript
  • javascript如何压缩
    本篇内容介绍了“javascript如何压缩”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • CSS压缩与CSS代码压缩还原的方法
    本文小编为大家详细介绍“CSS压缩与CSS代码压缩还原的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS压缩与CSS代码压缩还原的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学...
    99+
    2024-04-02
  • Android中文件的压缩和解压缩实例代码
    使用场景 当我们在应用的Assets目录中需要加入文件时,可以直接将源文件放入,但这样会造成打包后的apk整体过大,此时就需要将放入的文件进行压缩.又如当我们需要从服务器中下载...
    99+
    2022-06-06
    压缩 解压 Android
  • CSS压缩与CSS代码压缩还原的示例分析
    这篇文章将为大家详细讲解有关CSS压缩与CSS代码压缩还原的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 紧缩后的CSS代码如何快捷排版好以便于再编纂在批改。...
    99+
    2024-04-02
  • C#实现批量压缩和解压缩的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-26
    C#压缩 解压缩 C#压缩 C# 解压缩
  • 如何使用webpack4编译并压缩ES6代码
    这篇文章将为大家详细讲解有关如何使用webpack4编译并压缩ES6代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前段时间第一次接触了layabox游戏引擎做了一个项...
    99+
    2024-04-02
  • vbs实现zip压缩与unzip解压缩函数的代码分享
    本篇内容主要讲解“vbs实现zip压缩与unzip解压缩函数的代码分享”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vbs实现zip压缩与unzip解压缩函数的代码分享”吧!压缩代码: 复制代码...
    99+
    2023-06-08
  • python如何实现列表以及迭代器的压缩和解压缩
    这篇文章主要介绍了python如何实现列表以及迭代器的压缩和解压缩,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。列表以及迭代器的压缩和解压缩...
    99+
    2024-04-02
  • Webpack构建代码质量压缩的方法是什么
    这篇文章主要介绍“Webpack构建代码质量压缩的方法是什么”,在日常操作中,相信很多人在Webpack构建代码质量压缩的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 如何使用php函数来压缩和优化代码?
    在开发Web应用程序时,代码的大小和效率是非常重要的。代码的大小直接影响文件的加载速度,而代码的效率则直接影响应用程序的响应时间。为了提高应用程序的性能,我们经常需要对代码进行压缩和优化。在PHP中,有一些内置的函数和方法可以帮助我们压缩和...
    99+
    2023-10-21
    性能优化 压缩代码:代码压缩 代码压缩工具 代码压缩技术 优化代码:代码优化
  • Python批量解压&压缩文件夹的示例代码
    目录一、python批量解压二、python批量压缩一、python批量解压 提示:如果是重要数据解压前请先备份,解压后会覆盖原压缩文件!! 解压前: 解压后:文件名为英文: 文...
    99+
    2024-04-02
  • Python如何破解压缩包密码
    目录简介:1.步骤1.环境2.判断文件格式3.判断是否有密码4.密码字典 自己写或者下载相应的软件生成。5.解压文件2.代码1.在线调试2.脚本运行简介: 破解rar和zip压缩包。...
    99+
    2024-04-02
  • Cassandra的数据压缩是如何工作的
    Cassandra的数据压缩是通过使用压缩算法对数据进行压缩以减少存储空间和网络传输的消耗来工作的。压缩算法通常是在数据写入数据库之...
    99+
    2024-04-09
    Cassandra
  • java代码是如何被机器识别的
    java代码是如何被机器识别的?首先,Java作为一门高级程序语言,其语法非常复杂,直接将 Java 代码丢给机器,机器是无法识别 Java 代码的。所以,对于Java语言来说,首先是使用编译器将我们的 Java 源码(.java文件)编译...
    99+
    2018-12-24
    java入门 java 代码 机器 识别
  • linux如何允许这个文件能被内核自动压缩/解压
    ...
    99+
    2024-04-02
  • Java 实现LZ78压缩算法的示例代码
    LZ78 压缩算法的 Java 实现 1、压缩算法的实现 通过多路搜索树提高检索速度 package com.wretchant.lz78; import java.util....
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作