Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Optimize JavaScript execution and parse time us...
Search
chph
September 30, 2016
Technology
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Optimize JavaScript execution and parse time using optimize-js
chph
September 30, 2016
More Decks by chph
See All by chph
Chrome Dev Tools 基礎技巧
chph
0
100
DevOpsDays Taipei 2017 敏捷思維分享
chph
0
120
在 Google Cloud Platform 架設你的網站伺服器並撰寫 Node.js 應用程式
chph
0
720
Intro to Progressive Web Apps
chph
1
77
淺談 Gzip
chph
0
140
Install WordPress on Linode
chph
0
170
Introduction Infrastructure - Linode 入門
chph
0
230
高速傳愛~三小時進化 PWA
chph
0
300
Modern Web 2016 議程分享: 網站自動化測試 - 以 PIXNET 搜尋 & 美妝口碑大賞為例
chph
0
140
Other Decks in Technology
See All in Technology
巨大気象データと戦う ― サロゲートモデル学習を高速化する圧縮技術
gpuunite_official
0
180
トークンマネジメントでAIにとって働きやすい環境を実現する
hikaruegashira
0
130
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
290
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
1
1.1k
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
tamachi.go 誕生の裏側
rymiyamoto
1
190
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
110
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
My broken English still works: speaking at global OSS events
naruoga
0
120
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
4
26k
平文パスワードはログに“残り” ── 肝心の侵入は“痕跡すら残らない”
kuroneko13
0
110
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
570
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
440
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
380
Six Lessons from altMBA
skipperchong
29
4.5k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
260
Building Adaptive Systems
keathley
44
3.2k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Transcript
afu @ 研發中⼼前端組 @afutseng Optimize JavaScript execution and parse time
using optimize-js styleMe 會議室∘2016.09.30
optimize-js https://github.com/nolanlawson/optimize-js Optimize a JavaScript file for faster initial load
by wrapping eagerly-invoked functions 2016/9/18 建⽴的專案 2016/9/20 釋出 v1.0.1 最新版 作者:Nolan Lawson Web Platform PM @ Microsoft Edge
⽤法: optimize-js input.js > output.js 範例輸出 !(function (){})()
function runIt(fun){ fun() } runIt((function (){})) 範例輸⼊ !function (){}() function runIt(fun){ fun() } runIt(function (){})
Benchmark overview 效能評⽐
四⼤名瀏平均速度提昇 3FGFSFODFIUUQTHJUIVCDPNOPMBOMBXTPOPQUJNJ[FKTCFODINBSLPWFSWJFX
jQuery v3.1.0 Minified v.s. Min+Optimized
3FGFSFODFIUUQTHJUIVCDPNOPMBOMBXTPOPQUJNJ[FKTCFODINBSLPWFSWJFX NT NT NT NT NT NT NT NT
⾃⼰做 React 的 benchmark v15.3.2
無痛安裝 React •使⽤ Facebook 出品的 Create React App •https://github.com/facebookincubator/create-react-app $
npm install -g create-react-app $ create-react-app afu-react-test-app $ cd afu-react-test-app/ $ npm start
無痛安裝 React (續) •開發版本本地端網址 • http://localhost:3000/ ! •打包發佈版本 $ npm
run build ! 47.18 KB build/static/js/main.c9763294.js 289 B build/static/css/main.9a0fe4f1.css
以 PHP 7 內建 web server 佈署網站 $ php
-S localhost:8888 PHP 7.1.0-dev Development Server started at Fri Sep 30 01:41:41 2016 Listening on http://localhost:8888 Document root is /Users/citeair/lab/afu-react-test-app/build Press Ctrl-C to quit. [Fri Sep 30 01:41:48 2016] ::1:58054 [200]: / [Fri Sep 30 01:41:48 2016] ::1:58055 [200]: /static/css/main.9a0fe4f1.css [Fri Sep 30 01:41:48 2016] ::1:58056 [200]: /static/js/main.c9763294.js
以 PHP 7 內建 web server 佈署網站
以 Chrome 55 (Canary) 瀏覽
模擬五倍慢低端裝置做 Profiling
Speed improvement ~25% x NT NT
原理? •多數 JavaScript engine 會做 lazy parsing optimization •根據經驗法則,⼤部分的 function
永遠不會或是稍後才被執⾏ •可能不適⽤於 framework-based application,因為打包過的 code 都是 必定會執⾏的 /* 直到 f 被呼叫時才剖析 function 內容 */ function f () { … } •若外部 scope 有⽤變數參照 f,f 會被解析兩次 •優化版,不做 lazy parsing (function f () {...})()
demo by @bmaurer function immutable () { (function (global, factory)
{ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.Immutable = factory()); }(this, function () { ... }); } 71BSTF-B[Z NT 71BSTF-B[Z NT IUUQTHJUIVCDPNSPMMVQSPMMVQQVMMJTTVFDPNNFOU
demo by @bmaurer function immutableOptimize () { (function (global, factory)
{ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.Immutable = factory()); }(this, (function () { ... })); } 71BSTF-B[Z NT IUUQTHJUIVCDPNSPMMVQSPMMVQQVMMJTTVFDPNNFOU
有得必有失 •jQuery v3.1.0:30450 -> 30524 bytes,增加 74 bytes •Lodash v4.15.0:
24528 -> 24577 bytes,增加 49 bytes •React v15.3.2 + Create React App:160518 -> 160609 bytes,增加 91 bytes
Lodash 作者表⽰: •9/20 發布 v4.16.1,改良解析時間兩倍 IUUQTHJUIVCDPNMPEBTIMPEBTIDPNNJUDCDD
Lodash 作者表⽰: IUUQTHJUIVCDPNMPEBTIMPEBTIDPNNJUDCDD
⼩結 • 在 V8 引擎有進⼀步優化以前,很適合在 uglify 後再串接 optimize-js 打包,輕易地換取
JavaScript 解析/執⾏時間縮短
References 1. https://github.com/nolanlawson/optimize-js 2. https://github.com/mishoo/UglifyJS2/issues/886 3. https://github.com/rollup/rollup/pull/774 4. https://github.com/lodash/lodash/wiki/
Changelog#v4161 5. https://github.com/lodash/lodash/commit/ 5c912bcc62d385084cf7f9a13b5ac850a7e72be0
感謝聆聽 @afutseng