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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
chph
September 30, 2016
Technology
160
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
76
淺談 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
130
Other Decks in Technology
See All in Technology
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
270
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
290
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
260
失敗を資産に変えるClaude Code
shinyasaita
0
300
Building applications in the Gemini API family.
line_developers_tw
PRO
0
2.9k
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
720
あなたの AI ワークスペースに、 専門コーダーを連れてくる - Amazon Quick Desktop 最新情報
kawaji_scratch
1
130
やさしいA2A入門
minorun365
PRO
11
1.7k
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
4
1.3k
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.9k
Claude Code×Terraform IaC テンプレート駆動開発
itouhi
1
490
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
160
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
230
Accessibility Awareness
sabderemane
1
140
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Fireside Chat
paigeccino
42
3.9k
The Spectacular Lies of Maps
axbom
PRO
1
800
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
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