广告
返回顶部
首页 > 资讯 > 前端开发 > 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://www.lsjlt.com/news/82577.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Javascript代码是如何被压缩的
    今天就跟大家聊聊有关Javascript代码是如何被压缩的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。随着前端的发展,特别是 React,Vue ...
    99+
    2022-10-19
  • Javascript代码是怎样被压缩的
    Javascript代码是怎样被压缩的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。随着前端的发展,特别是 React,Vue 等构造单页...
    99+
    2022-10-19
  • 如何压缩html代码
    小编给大家分享一下如何压缩html代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如何压缩html代码,让html文件缩小优化...
    99+
    2022-10-19
  • 如何使用webpack4编译并压缩ES6代码
    这篇文章将为大家详细讲解有关如何使用webpack4编译并压缩ES6代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前段时间第一次接触了layabox游戏引擎做了一个项...
    99+
    2022-10-19
  • Webpack构建代码质量压缩的方法是什么
    这篇文章主要介绍“Webpack构建代码质量压缩的方法是什么”,在日常操作中,相信很多人在Webpack构建代码质量压缩的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • python如何实现列表以及迭代器的压缩和解压缩
    这篇文章主要介绍了python如何实现列表以及迭代器的压缩和解压缩,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。列表以及迭代器的压缩和解压缩...
    99+
    2022-10-19
  • 如何使用php函数来压缩和优化代码?
    在开发Web应用程序时,代码的大小和效率是非常重要的。代码的大小直接影响文件的加载速度,而代码的效率则直接影响应用程序的响应时间。为了提高应用程序的性能,我们经常需要对代码进行压缩和优化。在PHP中,有一些内置的函数和方法可以帮助我们压缩和...
    99+
    2023-10-21
    性能优化 压缩代码:代码压缩 代码压缩工具 代码压缩技术 优化代码:代码优化
  • MS SQL SERVER 数据库日志压缩方法与代码是怎样的
    MS SQL SERVER 数据库日志压缩方法与代码是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。MSSQL性能是很不错的,但是数据库...
    99+
    2022-10-19
  • java代码是如何被机器识别的
    java代码是如何被机器识别的?首先,Java作为一门高级程序语言,其语法非常复杂,直接将 Java 代码丢给机器,机器是无法识别 Java 代码的。所以,对于Java语言来说,首先是使用编译器将我们的 Java 源码(.java文件)编译...
    99+
    2018-12-24
    java入门 java 代码 机器 识别
  • 如何恢复SQL被注入后的数据代码
    本篇内容介绍了“如何恢复SQL被注入后的数据代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 如何保护自己的javascript代码
    现如今,JavaScript是广大开发者必不可少的编程语言之一。尽管JavaScript带来了高效、美观的网页体验,但也带来了漏洞和安全风险。黑客可以利用你的JavaScript代码进行攻击,从而入侵你的网站或者窃取用户的个人信息。因此如何...
    99+
    2023-05-14
  • 二维码是如何被 Python 对象处理的?
    随着移动互联网的普及,二维码已经成为了现代社会中不可或缺的一部分。在 Python 中,我们可以使用第三方库 qrcode 来生成二维码,并对其进行处理。那么,二维码在 Python 中是如何被处理的呢? 一、生成二维码 生成二维码是二维...
    99+
    2023-10-07
    对象 二维码 unix
  • 一文详解如何用GPU来运行Python代码/基于Python自制一个文件解压缩小工具
    前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下多核的快乐,感兴趣的小伙伴快跟随小编一起了解一下吧 简介 前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下...
    99+
    2023-10-02
    python 数学建模 开发语言 程序人生 职场和发展
  • 如何编写高质量的JavaScript代码
    这期内容当中小编将会给大家带来有关如何编写高质量的JavaScript代码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。编写可维护的代码软件的BUG修复需要花费大量的精力...
    99+
    2022-10-19
  • 详解V8是如何执行一段JavaScript代码原理
    目录前言编译器和解释器1. 生成抽象语法树(AST)和执行上下文2. 生成字节码3. 执行代码JavaScript 的性能优化前言 了解 V8 的执行机制,能帮助你从底层了解 Ja...
    99+
    2023-05-15
    V8 执行JavaScript原理 V8 JavaScript
  • node.js代码是如何运行的
    这篇文章主要介绍了node.js代码是如何运行的的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇node.js代码是如何运行的文章都会有所收获,下面我们一起来看看吧。   vu...
    99+
    2022-10-19
  • 如何实现并发数据库压力测试的shell脚本代码
    这篇文章给大家分享的是有关如何实现并发数据库压力测试的shell脚本代码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:#!/bin/bash#******************************...
    99+
    2023-06-09
  • Android源码分析——View是如何被添加到屏幕的?
    我们看到R.id.content确实是存在的,并且它是一个FrameLayout。到这里我们来看下现在前面这些具体做了哪些? 如下图所示,到...
    99+
    2022-06-06
    view Android
  • CSS如何实现图片等比例缩小不变形的实例代码
    小编给大家分享一下CSS如何实现图片等比例缩小不变形的实例代码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体代码如下所示:  <img src="../images/bg1...
    99+
    2023-06-08
  • JavaScript的编程技巧:如何提高代码质量?
    JavaScript是一种广泛使用的编程语言,可以用于开发各种类型的应用程序,包括网站、桌面应用程序、移动应用程序等。然而,编写高质量的JavaScript代码并不容易。在本文中,我们将探讨一些JavaScript编程技巧,以提高代码质量。...
    99+
    2023-10-15
    编程算法 javascript git
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作