SlideShare a Scribd company logo
.
..
…
Riki Fridrich
fczbkk.com
Tree Shaking
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Tree Shaking
calculator.js
export function square (n) {
return n * n;
}
export function cube (n) {
return n * n * n;
}
index.js
import {cube} from './calculator.js'
console.log(cube(10));
calculator.js
export function square (n) {
return n * n;
}
export function cube (n) {
return n * n * n;
}
.babelrc
{
"presets": ["latest"]
}
webpack.config.js
module.exports = {
entry: './src/index.js',
output: {
filename: 'index.js',
path: './lib/'
},
module: {
rules: [
{
test: /.js$/,
loaders: ['babel-loader']
}
]
}
};
lib/index.js
. . .
}([ function(module, exports, __webpack_require__) {
"use strict";
function square(n) {
return n * n;
}
function cube(n) {
return n * n * n;
}
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.square = square, exports.cube = cube;
},
. . .
lib/index.js
. . .
}([ function(module, exports, __webpack_require__) {
"use strict";
function square(n) {
return n * n;
}
function cube(n) {
return n * n * n;
}
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.square = square, exports.cube = cube;
},
. . .
babel export
"use strict";
Object.defineProperty(exports, "__esModule", {value: true});
exports.square = square;
exports.cube = cube;
function square(n) {return n * n;}
function cube(n) {return n * n * n;}
babel export
"use strict";
Object.defineProperty(exports, "__esModule", {value: true});
exports.square = square;
exports.cube = cube;
function square(n) {return n * n;}
function cube(n) {return n * n * n;}
.babelrc
{
"presets": ["latest"]
}
.babelrc
{
"presets": [
[
"latest",
{
"es2015": {
"modules": false
}
}
]
]
}
babel export (no module)
"use strict";
function square(n) {return n * n;}
function cube(n) {return n * n * n;}
webpack.config.js
module.exports = {
entry: './src/index.js',
output: {
filename: 'index.js',
path: './lib/'
},
module: {
rules: [
{
test: /.js$/,
loaders: ['babel-loader']
}
]
}
};
webpack.config.js
var UglifyJsPlugin =
require('uglifyjs-webpack-plugin');
module.exports = {
. . .
plugins: [
new UglifyJsPlugin({
compress: {dead_code: true}
})
]
};
> webpack
Hash: f177e58750d74d4d18e1
Version: webpack 2.2.1
Time: 687ms
Asset Size Chunks Chunk Names
index.js 1.86 kB 0 [emitted] main
[0] ./src/calculator.js 121 bytes {0} [built]
[1] ./src/index.js 63 bytes {0} [built]
WARNING in index.js from UglifyJs
Dropping unused function square [index.js:76,9]
WARNING in index.js from UglifyJs
Dropping unused function square [index.js:76,9]
lib/index.js (no shaking)
. . .
}([ function(module, exports, __webpack_require__) {
"use strict";
function square(n) {
return n * n;
}
function cube(n) {
return n * n * n;
}
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.square = square, exports.cube = cube;
},
. . .
lib/index.js (tree shaking)
. . .
}([ function(module, __webpack_exports__, __webpack_require__) {
"use strict";
function cube(n) {
return n * n * n;
}
__webpack_exports__.a = cube;
},
. . .
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
Babel Webpack
Babel
./module/*.js
Webpack
./lib/index.js
package.json
{
. . .
"scripts": {
"build:classic": "webpack",
"build:modern": "babel src -d module"
}
}
package.json
{
. . .
"scripts": {
"build:classic": "webpack",
"build:modern": "babel src -d module",
"build": "npm run build:classic && npm run build:modern"
}
}
npm run build
package.json
{
. . .
"main": "./lib/index.js"
}
package.json
{
. . .
"main": "./lib/index.js",
"module": "./module/index.js",
"webpack": "./module/index.js",
"jsnext:main": "./module/index.js"
}
*.mjs
(node)
github.com/fczbkk/develcz-
2017-tree-shaking

More Related Content

PDF
Openstack taskflow 簡介
PDF
Single qubit-gates operations
PDF
Openstack 簡介
DOCX
Include
PPTX
Frontend application architecture, patterns, and workflows
PPTX
Python queue solution with asyncio and kafka
PDF
Debugging JavaScript with Chrome
PPTX
Angular js performance improvements
Openstack taskflow 簡介
Single qubit-gates operations
Openstack 簡介
Include
Frontend application architecture, patterns, and workflows
Python queue solution with asyncio and kafka
Debugging JavaScript with Chrome
Angular js performance improvements

What's hot (20)

PPTX
Introduction to Service Workers | Matteo Manchi
PDF
Puppet Camp Ghent 2013
PDF
Node.js
PDF
Cloud api之應用與實例
ODP
BaseX user-group-talk XML Prague 2013
PDF
Multi qubit entanglement
PDF
JavaSE7 Launch Event: Java7xGroovy
PDF
20151224-games
PPT
Full-Stack JavaScript with Node.js
ODP
PDF
2016 gunma.web games-and-asm.js
PPTX
The jsdom
KEY
W3C HTML5 KIG-How to write low garbage real-time javascript
PPTX
The State of JavaScript
PDF
Angular&node js upload file
PDF
ActionHeroJS Talk
PDF
RxJS 5 in Depth
PDF
Меняем javascript с помощью javascript
PPTX
Fixing Web Data in Production
KEY
Playing With Fire - An Introduction to Node.js
Introduction to Service Workers | Matteo Manchi
Puppet Camp Ghent 2013
Node.js
Cloud api之應用與實例
BaseX user-group-talk XML Prague 2013
Multi qubit entanglement
JavaSE7 Launch Event: Java7xGroovy
20151224-games
Full-Stack JavaScript with Node.js
2016 gunma.web games-and-asm.js
The jsdom
W3C HTML5 KIG-How to write low garbage real-time javascript
The State of JavaScript
Angular&node js upload file
ActionHeroJS Talk
RxJS 5 in Depth
Меняем javascript с помощью javascript
Fixing Web Data in Production
Playing With Fire - An Introduction to Node.js
Ad

More from Develcz (20)

PDF
Daniel Steigerwald: WYSIWYG je šik! (když funguje)
PDF
Ondřej Hlaváček: Životní cyklus featury
PDF
Martin Hassman: Jak se tvoří addony pro World of Warcraft
PDF
Ondřej Voves: Jak přepsat monolit do mikroslužeb
PDF
Marcel Šulek: Zpraste svoje kódy
PDF
Michal Illich: Vývojáři staví letadlo
PDF
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
PDF
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
PDF
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
PDF
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
PDF
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
PDF
Jakub Vrána: Dokazatelná bezpečnost
PDF
Roman Schejbal: From Madness To Reason
PDF
Michal Illich: Zuri aneb Vývojáři staví letadlo
PDF
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
PDF
David Majda: Autoformátování kódu
PPTX
David Grudl: Open source: The Good, the Bad and the Ugly
PDF
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
PDF
Adam Kudrna: Headless WordPress/Drupal
PDF
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Ondřej Hlaváček: Životní cyklus featury
Martin Hassman: Jak se tvoří addony pro World of Warcraft
Ondřej Voves: Jak přepsat monolit do mikroslužeb
Marcel Šulek: Zpraste svoje kódy
Michal Illich: Vývojáři staví letadlo
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Jakub Vrána: Dokazatelná bezpečnost
Roman Schejbal: From Madness To Reason
Michal Illich: Zuri aneb Vývojáři staví letadlo
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
David Majda: Autoformátování kódu
David Grudl: Open source: The Good, the Bad and the Ugly
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Adam Kudrna: Headless WordPress/Drupal
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Ad

Recently uploaded (20)

PPTX
Power Point - Lesson 3_2.pptx grad school presentation
PPTX
SAP Ariba Sourcing PPT for learning material
PPTX
Introuction about WHO-FIC in ICD-10.pptx
PDF
The New Creative Director: How AI Tools for Social Media Content Creation Are...
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PPTX
Funds Management Learning Material for Beg
PPTX
introduction about ICD -10 & ICD-11 ppt.pptx
PDF
Paper PDF World Game (s) Great Redesign.pdf
PPTX
innovation process that make everything different.pptx
PDF
Testing WebRTC applications at scale.pdf
PPTX
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
DOCX
Unit-3 cyber security network security of internet system
PDF
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
PPTX
Slides PPTX World Game (s) Eco Economic Epochs.pptx
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PDF
How to Ensure Data Integrity During Shopify Migration_ Best Practices for Sec...
PPTX
presentation_pfe-universite-molay-seltan.pptx
PDF
Unit-1 introduction to cyber security discuss about how to secure a system
PDF
An introduction to the IFRS (ISSB) Stndards.pdf
Power Point - Lesson 3_2.pptx grad school presentation
SAP Ariba Sourcing PPT for learning material
Introuction about WHO-FIC in ICD-10.pptx
The New Creative Director: How AI Tools for Social Media Content Creation Are...
Slides PDF The World Game (s) Eco Economic Epochs.pdf
Funds Management Learning Material for Beg
introduction about ICD -10 & ICD-11 ppt.pptx
Paper PDF World Game (s) Great Redesign.pdf
innovation process that make everything different.pptx
Testing WebRTC applications at scale.pdf
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
Unit-3 cyber security network security of internet system
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
Slides PPTX World Game (s) Eco Economic Epochs.pptx
Job_Card_System_Styled_lorem_ipsum_.pptx
Tenda Login Guide: Access Your Router in 5 Easy Steps
How to Ensure Data Integrity During Shopify Migration_ Best Practices for Sec...
presentation_pfe-universite-molay-seltan.pptx
Unit-1 introduction to cyber security discuss about how to secure a system
An introduction to the IFRS (ISSB) Stndards.pdf

Richard Fridrich: Třesení stromem v JavaScriptu

Editor's Notes

  • #7: čo je to tree shaking?
  • #8: ak si myslíte, že tree shaking vyzerá takto, ste na nesprávnej prednáške
  • #9: v skutočnosti tree shaking vyzerá takto
  • #10: klasické knižnice (Jquery)
  • #12: NPM knižnice
  • #13: atomické pár riadkov
  • #17: stále je to minimálne množstvo kódu, však?
  • #18: každá závislosť je zabalená
  • #19: chceme knižnice postavené z malých častí
  • #20: tak aby sme mohli zbytočné časti vyhodiť
  • #21: čím sa konečne dostávame k tomu, čo je Tree Shaking
  • #41: wait, there's more čo keď náš modul chce konzumovať niekto ďalší?
  • #42: ako exportovať modul? monoblokom sa nedá triasť krabičky bez webpacku nepoužijem
  • #48: ako rozlíšiť ES5 a ES6 modul?
  • #49: NodeJS kvôli CommonJS vs import/export chce *.mjs Michael Jackson