Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Optimize JavaScript execution and parse time us...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
110
DevOpsDays Taipei 2017 敏捷思維分享
chph
0
120
在 Google Cloud Platform 架設你的網站伺服器並撰寫 Node.js 應用程式
chph
0
720
Intro to Progressive Web Apps
chph
1
78
淺談 Gzip
chph
0
140
Install WordPress on Linode
chph
0
170
Introduction Infrastructure - Linode 入門
chph
0
240
高速傳愛~三小時進化 PWA
chph
0
310
Modern Web 2016 議程分享: 網站自動化測試 - 以 PIXNET 搜尋 & 美妝口碑大賞為例
chph
0
140
Other Decks in Technology
See All in Technology
SREは、MCPとAutopilotをこう使え!
kazumax55
2
690
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
640
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
210
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
1.3k
2026_devsumi_ozono.pdf
o3
3
470
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
GoCon2026 - Open Source, Open World
sanposhiho
4
4k
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
5
2.1k
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
170
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
1
1.2k
Sigmaで作る業務アプリ
kazushiro_honma
0
130
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
180
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
250
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Six Lessons from altMBA
skipperchong
29
4.5k
Product Roadmaps are Hard
iamctodd
55
13k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Building an army of robots
kneath
306
46k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
520
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
390
Building the Perfect Custom Keyboard
takai
2
870
Evolving SEO for Evolving Search Engines
ryanjones
0
290
Speed Design
sergeychernyshev
33
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