精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Javascript代碼是如何被壓縮的

開發 前端
前端構建編譯代碼時,可以使用 webpack 中的 optimization.minimizer 來對代碼進行壓縮優化。但是我們也需要了解如何它是壓縮代碼的,這樣當在生產環境的控制臺調試代碼時對它也有更深刻的理解。

 隨著前端的發展,特別是 React,Vue 等構造單頁應用的興起,前端的能力得以很大提升,隨之而來的是項目的復雜度越來越大。此時的前端的靜態資源也越來越龐大,而毫無疑問 javascript 資源已是前端的主體資源,對于壓縮它的體積至為重要。

為什么說更小的體積很重要呢:更小的體積對于用戶體驗來說意味著更快的加載速度以及更好的用戶體驗,這也能早就企業更大的利潤。另外,更小的體積對于服務器來說也意味更小的帶寬以及更少的服務器費用。

前端構建編譯代碼時,可以使用 webpack 中的 optimization.minimizer 來對代碼進行壓縮優化。但是我們也需要了解如何它是壓縮代碼的,這樣當在生產環境的控制臺調試代碼時對它也有更深刻的理解。

如何查看資源的體積

對于我們所編寫的代碼,它在操作系統中是一個文件,根據文件系統中的 stat 信息我們可以查看該文件的大小。

stat 命令用來打印文件系統的信息: 

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

stat 打印的信息過大,如果只用來衡量體積,可以使用 wc -c 

  1. $ wc -c config.js  
  2. 3663 config.js 

如何壓縮代碼體積?

去除多余字符: 空格,換行及注釋 

  1. // 對兩個數求和  
  2. function sum (a, b) {  
  3.   return a + b;  

先把一個抽象的問題給具體化,如果是以上一段代碼,那如何壓縮它的體積呢:

此時文件大小是 62 Byte, 一般來說中文會占用更大的空間。

多余的空白字符會占用大量的體積,如空格,換行符,另外注釋也會占用文件體積。當我們把所有的空白符合注釋都去掉之后,代碼體積會得到減少。

去掉多余字符之后,文件大小已經變為 30 Byte。 壓縮后代碼如下: 

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

替換掉多余字符后會有什么問題產生呢?

有,比如多行代碼壓縮到一行時要注意行尾分號。 這就需要通過以下介紹的 AST 來解決。

壓縮變量名:變量名,函數名及屬性名 

  1. function sum (first, second) {  
  2.   return first + second;  

如以上 first 與 second 在函數的作用域中,在作用域外不會引用它,此時可以讓它們的變量名稱更短。但是如果這是一個 module 中,sum 這個函數也不會被導出呢?那可以把這個函數名也縮短。 

  1. // 壓縮: 縮短變量名  
  2. function sum (x, y) {  
  3.   return x + y;  
  4.  
  5. // 再壓縮: 去除空余字符  
  6. function s(x,y){return a+b} 

在這個示例中,當完成代碼壓縮 (compress) 時,代碼的混淆 (mangle) 也捎帶完成。但此時縮短變量的命名也需要 AST 支持,不至于在作用域中造成命名沖突。

更簡單的表達:合并聲明以及布爾值簡化

合并聲明的示例如下: 

  1. // 壓縮前  
  2. const a = 3 
  3. const b = 4 
  4. // 壓縮后  
  5. const a = 3b = 4

布爾值簡化的示例如下: 

  1. // 壓縮前  
  2. !b && !c && !d && !e  
  3. // 壓縮后  
  4. 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] 中直觀感受到,如下圖:

那壓縮代碼的過程:code -> AST -> (transform)一顆更小的 AST -> code,這與 babel 和 eslint 的流程一模一樣。

UglifyJS

不要重復造輪子!

于是我找了一個久負盛名的關于代碼壓縮的庫: UglifyJS3[4],一個用以代碼壓縮混淆的庫。那它是如何完成一些壓縮功能的,比如替換空白符,答案是 AST。

webpack 中內置的代碼壓縮插件就是使用了它,它的工作流程大致如下: 

  1. // 原始代碼  
  2. const code = `const a = 3;`  
  3. // 通過 UglifyJS 把代碼解析為 AST  
  4. const ast = UglifyJS.parse(code);  
  5. ast.figure_out_scope();  
  6. // 轉化為一顆更小的 AST 樹  
  7. compressor = UglifyJS.Compressor();  
  8. astast = ast.transform(compressor);  
  9. // 再把 AST 轉化為代碼  
  10. code = ast.print_to_string(); 

而當你真正使用它來壓縮代碼時,你只需要面向配置編程即可,文檔參考 uglify 官方文檔[5] 

  1.  
  2.   {  
  3.     ecma: 8,  
  4.   },  
  5.   compress: {  
  6.     ecma: 5,  
  7.     warnings: false,  
  8.     comparisons: false,  
  9.     inline: 2,  
  10.   },  
  11.   output: {  
  12.     ecma: 5,  
  13.     comments: false,  
  14.     ascii_only: true,  
  15.   }  

在 webpack 中壓縮代碼

在知道代碼壓縮是怎么完成的之后,我們終于可以把它搬到生產環境中去壓縮代碼。終于到了實踐的時候了,雖然它只是簡單的調用 API 并且調調參數。

一切與性能優化相關的都可以在 optimization 中找到,TerserPlugin 是一個底層基于 uglifyjs 的用來壓縮 JS 的插件。 

  1. optimization: {  
  2.   minimize: isEnvProduction,  
  3.   minimizer: [  
  4.     new TerserPlugin({  
  5.       terserOptions: {  
  6.         parse: {  
  7.           ecma: 8,  
  8.         },  
  9.         compress: {  
  10.           ecma: 5,  
  11.           warnings: false,  
  12.           comparisons: false,  
  13.           inline: 2,  
  14.         },  
  15.         output: {  
  16.           ecma: 5,  
  17.           comments: false,  
  18.           ascii_only: true,  
  19.         },  
  20.       },  
  21.       sourceMap: true  
  22.     })  
  23.   ]  

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2020-03-06 10:05:59

前端Javascript代碼

2024-04-01 08:23:20

代碼Javajavascript

2023-03-05 22:30:25

JavaCPU

2022-09-16 08:32:25

JavaC++語言

2023-06-05 16:38:51

JavaScript編程語言V8

2024-08-28 10:04:17

2021-05-12 00:03:49

JavaScript

2024-06-18 08:31:33

2015-07-30 09:46:42

開源項目

2022-06-07 09:30:35

JavaScript變量名參數

2018-07-12 13:15:06

2022-05-18 08:00:00

JavaScriptFetch數據

2011-01-19 10:13:20

FaceBook代碼業界

2021-09-01 08:55:20

JavaScript代碼開發

2021-11-30 10:20:24

JavaScript代碼前端

2013-04-15 09:02:43

JavaScriptJS

2019-12-16 09:37:19

Kafka架構數據

2015-10-09 11:01:07

iPhone原創鎖定

2014-11-04 11:19:51

2009-04-27 21:32:18

點贊
收藏

51CTO技術棧公眾號

麻豆理论在线观看| www.爱爱.com| 99re6这里只有精品| 欧美日韩精品电影| 天天做天天躁天天躁| 色婷婷av一区二区三区之e本道| 一级成人国产| 中文精品99久久国产香蕉| 超级砰砰砰97免费观看最新一期| 182在线视频观看| 中文字幕欧美日本乱码一线二线| 亚洲在线一区二区| 日本高清不卡码| 亚洲最大av| 亚洲欧美激情视频| 熟妇无码乱子成人精品| 欧美成人ⅴideosxxxxx| 亚洲欧美日韩在线播放| 欧美一区激情视频在线观看| 国产日韩在线观看一区| 久久久久久夜| 久久久久免费视频| 午夜国产福利视频| 亚洲精品国产setv| 精品福利av导航| 手机av在线网| 美女网站视频一区| 欧美日韩国产色| 色哟哟免费网站| 3d成人动漫在线| 99精品视频在线观看| 成人激情视频在线播放| 无码视频在线观看| 亚洲理论在线| 欧美肥老妇视频| 三级黄色免费观看| 欧美午夜精彩| 亚洲人成网站在线播| 一级欧美一级日韩片| 欧美h版在线观看| 欧美精品xxxxbbbb| 国产视频手机在线播放| 欧美va在线观看| 欧美天天综合色影久久精品| 精品无码一区二区三区爱欲| 日本电影在线观看| 亚洲精品福利视频网站| 国产又大又长又粗又黄| 无遮挡的视频在线观看 | 日本一区二区在线播放| 国产一级特黄aaa大片| 欧美日韩久久| 久久91亚洲精品中文字幕奶水| 久久久久麻豆v国产| 日本在线电影一区二区三区| 亚洲性av在线| 亚洲第一综合网| 欧美综合另类| 日韩中文字幕亚洲| 69夜色精品国产69乱| 91影院成人| 久久亚洲精品一区二区| fc2ppv在线播放| 亚洲精品一二三区区别| 欧美成人一区在线| 国产一级性生活| 一区免费在线| 欧美亚洲国产视频| 亚洲精品91天天久久人人| 天堂蜜桃一区二区三区| 国产精品福利网站| 国产精品人妻一区二区三区| 国产乱色国产精品免费视频| 99在线看视频| 性感美女一级片| 国产亚洲精品中文字幕| 天堂资源在线亚洲视频| 久草资源在线| 亚洲成人高清在线| 久久久久久久久久福利| 黄色成人小视频| 日韩欧美国产高清| 亚洲精品理论片| 精品高清在线| 欧美成人激情视频| 久久艹免费视频| 男女激情视频一区| aa成人免费视频| 人成在线免费视频| 最好看的中文字幕久久| www.xxx麻豆| 电影一区二区三| 欧美日韩国产bt| www.四虎在线| 国语产色综合| 欧美日韩高清区| 极品国产91在线网站| 精品一区二区三区在线播放视频| 国产一区二区中文字幕免费看| 国产精品一级伦理| 亚洲自拍偷拍网站| 少妇激情一区二区三区| 日韩一区免费| 深夜精品寂寞黄网站在线观看| 日本精品人妻无码77777| 久久久久久黄| 成人18视频| av在线天堂播放| 亚洲va欧美va天堂v国产综合| 日日噜噜噜噜久久久精品毛片| 日韩精品一区二区三区中文| 亚洲人午夜色婷婷| 精品无码人妻一区二区三区品| 日韩极品在线观看| 国产精品xxx在线观看www| 欧美高清视频| 色域天天综合网| 91精品又粗又猛又爽| 999精品色在线播放| 91chinesevideo永久地址| 国产偷拍一区二区| 欧美高清在线视频| 久久无码高潮喷水| 草草视频在线一区二区| 另类图片亚洲另类| 中文字幕欧美色图| 久久综合色8888| a级黄色小视频| 亚洲精品在线国产| 久久精品中文字幕一区| 最近中文字幕免费观看| 久久亚洲精品国产精品紫薇| 免费网站永久免费观看| 国产精品一区二区三区av| 一区二区亚洲精品国产| 国产精品视频一区在线观看| www.日韩大片| www.成年人视频| 日韩在线视频一区二区三区 | 精品国产乱码一区二区三区四区| 性欧美videos高清hd4k| 777午夜精品免费视频| 亚洲一级黄色录像| 日韩激情一区二区| 久久久影院一区二区三区| 1区2区3区在线| 精品少妇一区二区三区视频免付费 | 91久久精品无码一区二区| 国产香蕉久久精品综合网| 蜜臀av午夜一区二区三区| 天天躁日日躁狠狠躁欧美巨大小说| 欧美精品激情在线| 欧美视频一二区| 亚洲成av人片一区二区梦乃| 69亚洲乱人伦| 一本久道综合久久精品| 精品乱码一区二区三区| 天堂8中文在线最新版在线| 日韩麻豆第一页| 在线观看 亚洲| 国产三级精品三级在线专区| 污污视频网站免费观看| 欧美日韩国产一区二区三区不卡| 日韩免费观看网站| av大片在线观看| 51精品视频一区二区三区| 九九久久免费视频| 成人黄页毛片网站| 99999精品视频| 欧美呦呦网站| 成人精品aaaa网站| 福利成人导航| 国产视频精品在线| 中文字幕第31页| 亚洲欧美日韩国产中文在线| 深夜视频在线观看| 亚洲在线电影| 日韩亚洲不卡在线| 高清不卡一区| 97av在线影院| av一本在线| 日韩欧美一级片| 91国产丝袜播放在线| 国产欧美精品一区| 三日本三级少妇三级99| 136国产福利精品导航网址| 欧美激情专区| 亚洲欧美一级| 欧美在线免费观看| 亚洲麻豆精品| 亚洲国产精品中文| 亚洲精品国产精品国自产网站按摩| 亚洲精品伦理在线| 青青草福利视频| 国产精品亚洲专一区二区三区| 久久国产成人精品国产成人亚洲| 精品久久久久久久久久久下田| 91观看网站| **欧美日韩在线观看| 欧美成年人视频| 成人性生交大片免费看午夜| 日韩西西人体444www| 超碰在线观看91| 亚洲综合在线五月| 香蕉久久久久久久| 91在线云播放| 污污视频在线免费| 日本不卡123| 黄色一级片在线看| 国产高清欧美| 欧美精品欧美精品| heyzo欧美激情| 成人黄色片网站| 亚洲精品粉嫩美女一区| 久久久亚洲影院你懂的| 老司机在线永久免费观看| 亚洲欧美国产一区二区三区| 免费激情视频网站| 91精品国产日韩91久久久久久| 国产中文字幕视频| 亚洲二区在线观看| 欧美特级一级片| 中文字幕一区日韩精品欧美| 成人免费av片| www.亚洲免费av| 永久免费未满蜜桃| 国产黄人亚洲片| 不卡中文字幕在线观看| 免费成人美女在线观看.| 国产精品50p| 99国产精品自拍| 91黄色在线看| 欧美激情视频一区二区三区免费| 亚洲一区二区在线看| 成人黄色av| 日产精品久久久一区二区| 中文字幕中文字幕精品| 精品无码久久久久国产| 久久午夜影院| 国产精品免费一区二区三区| 日韩一区二区三区色| 99超碰麻豆| 136福利精品导航| 超碰97在线资源| 一区二区在线免费播放| 亚洲综合中文字幕在线观看| 999精品嫩草久久久久久99| 国产日韩精品在线观看| 日韩三级成人| 91在线免费观看网站| 国产999精品在线观看| 成人精品aaaa网站| 麻豆精品在线| 国产精品成人一区二区三区| 成人高潮a毛片免费观看网站| 99国产盗摄| 国产精品调教| 麻豆蜜桃91| 国产99久久久国产精品成人免费 | 51精品在线观看| 成人在线视频播放| 成人国产精品久久久| 欧美经典一区| 国产一区国产精品| av资源久久| 第九区2中文字幕| aⅴ色国产欧美| 无码少妇一区二区三区芒果| 蜜桃视频在线一区| 成人三级做爰av| 91欧美一区二区| 青青草自拍偷拍| 亚洲九九爱视频| 国产成人精品一区二三区| 色美美综合视频| 国产精品无码免费播放| 亚洲成人激情在线观看| 激情福利在线| 美女少妇精品视频| 亚洲天堂资源| 91久久久久久| 在线日韩一区| 欧美黑人在线观看| 日韩电影在线看| 亚洲熟女一区二区三区| 国产亚洲福利社区一区| 91在线播放观看| 色婷婷亚洲综合| 精品欧美在线观看| 亚洲日本成人女熟在线观看| 黄色av网站在线播放| 3344国产精品免费看| 91麻豆精品| 欧美男人的天堂| 欧美在线网站| 欧美精品性生活| 成人黄色在线网站| 国产精品一区二区亚洲| 亚洲高清不卡在线| 欧美日韩一级黄色片| 欧美sm极限捆绑bd| 黄色小视频在线观看| 欧美高清视频在线观看| 日韩av大片站长工具| 成人激情视频免费在线| 国产欧美日韩精品一区二区免费 | 国产黄色av片| 日韩国产高清视频在线| 成人看av片| 97超级碰碰碰久久久| 99精品国产九九国产精品| 欧美日韩亚洲综合一区二区三区激情在线| 第九色区aⅴ天堂久久香| 日韩精品一区二区三区色偷偷 | 久久久午夜精品| 精品国产国产综合精品| 午夜精品一区在线观看| 99国产揄拍国产精品| 亚洲人成网在线播放| 久久av色综合| 亚洲free嫩bbb| 国产欧美日韩| 熟妇人妻va精品中文字幕| 国产精品一二一区| 91香蕉国产视频| 欧美日韩中文字幕综合视频| 一级aaaa毛片| 在线播放日韩欧美| www.综合| 国产视色精品亚洲一区二区| 久久影视一区| 欧美少妇性生活视频| 97久久人人超碰| 久久香蕉精品视频| 日韩一卡二卡三卡国产欧美| 91se在线| 日本久久91av| 日韩精品一区二区三区中文| 可以免费看的黄色网址| 三级久久三级久久| 中文字幕5566| 精品欧美激情精品一区| 手机看片1024日韩| 欧美成人亚洲成人| 不卡精品视频| 亚洲一区二区精品在线观看| 午夜亚洲一区| 少妇无套高潮一二三区| 色综合久久天天| 久久米奇亚洲| 欧美自拍视频在线| 日韩成人午夜| 精品99在线视频| 波波电影院一区二区三区| 亚洲欧美在线观看视频| 精品国产91洋老外米糕| 亚洲色图美国十次| 国产一区二区三区黄| 亚洲精品极品| 国产毛片久久久久久久| 一本一本久久a久久精品综合麻豆| 狠狠综合久久av一区二区| 69av在线视频| 色婷婷狠狠五月综合天色拍| 久久久精品三级| 欧美极品美女视频| 日韩国产成人在线| 亚洲全黄一级网站| 在线成人视屏| 中文字幕在线乱| 国产v日产∨综合v精品视频| 国产特黄大片aaaa毛片| 亚洲精品一区av在线播放| 日韩激情av| 欧美精品一区二区三区在线看午夜| 亚洲一区一卡| www.99re6| 日韩欧美色电影| 卡通欧美亚洲| 亚洲国产精品综合| 蜜桃免费网站一区二区三区| 免费在线视频观看| 亚洲成人亚洲激情| 日韩天堂在线| 国产欧美自拍视频| 久久夜色精品一区| 精品一区二三区| 日韩视频亚洲视频| 欧美成人午夜77777| 国产成人av影视| 亚洲一卡二卡三卡四卡无卡久久 | 精品综合免费视频观看| 国产精品免费人成网站酒店| 日韩av在线导航| 日韩免费小视频| 亚洲五码在线观看视频| 久久天堂av综合合色蜜桃网| 夜夜躁很很躁日日躁麻豆| 91国产视频在线| 日本不卡电影|