echart tree shaking
λ€ νΈμ΄λ²λ · π²π
λ€μ΄κ°λ©°π
νλ‘μ νΈμμ μ°¨νΈλ₯Ό 보μ¬μ£Όλ νμ΄μ§λ₯Ό λ΄κ° λ΄λΉνκ² λμλ€. λ€μν λΌμ΄λΈλ¬λ¦¬κ° ν보ꡰμ μμμ§λ§ ννν΄μΌνλ κ·Έλν μ’ λ₯λ₯Ό λͺ¨λ ν¬ν¨νκ³ μμκ³ κ°μ₯ μ 보λ₯Ό λ§μ΄ μ»μ μ μμλ echart λΌμ΄λΈλ¬λ¦¬λ₯Ό μ±ννμλ€. ν΄λΉ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄μ νΈλ¦¬μμ΄νΉ κ΄λ ¨ λ¬Έμλ₯Ό λ§μ΄ μ ν μ μμλλ°, μ΄λ echart 곡μ λ¬Έμμμλ tree shaking APIλ₯Ό μ¬μ©νλΌκ³ λ λμμμλ€. μ¬νΌ νΈλ¦¬μμ΄νΉ κ΄λ ¨ μ 보λ₯Ό μ°Ύμ보며 λ€λ₯Έ λΆκ°μ μΈ μ 보λ€λ μκ²λμ΄ μ 리νκ³ μ νλ μ€λμ ν¬μ€ν μ΄λ€.π
1. Tree Shaking μ΄λ?
Tree shakingμ JavaScriptμ λͺ¨λ λ²λ€λ§ λꡬμμ μ¬μ©λλ μ΅μ ν κΈ°λ² μ€ νλλ‘, λ²λ€λ§ν λ μ¬μ©λμ§ μλ μ½λλ₯Ό μ κ±°νμ¬ λ²λ€ ν¬κΈ°λ₯Ό μ΅μννλ€.
*λ²λ€λ§: μ¬λ¬κ°μ νμΌμ ν©μΉλ κ³Όμ
μΌλ°μ μΌλ‘ JavaScript νλ‘μ νΈμμλ μ¬λ¬ κ°μ λͺ¨λμ μ¬μ©νκ² λλλ°, μ΄ λͺ¨λλ€ μ€μμ μ€μ νλ‘μ νΈμ μ¬μ©λμ§ μλ μ½λλ€μ΄ μ‘΄μ¬ν μ μλ€. μ΄λ° κ²½μ° λ²λ€λ§ν λ ν΄λΉλμ§ μλ μ½λκΉμ§ λͺ¨λ ν¬ν¨νμ¬ λ²λ€ ν¬κΈ°κ° 컀μ§κ² λλ κ²μ΄λ€.
κ·Έλμ Tree shaking κ³Όμ μ ν΅ν΄ λͺ¨λ κ°μ μμ‘΄ κ΄κ³λ₯Ό λΆμνμ¬ μ¬μ©λμ§ μλ μ½λλ₯Ό μλ³νκ³ μ κ±°νμ¬ μ΅μ’
λ²λ€μλ νλ‘μ νΈμ μ€μ λ‘ μ¬μ©λλ μ½λλ§ ν¬ν¨λλ‘λ
ν¨μΌλ‘μ¨ νλ‘μ νΈμ μ±λ₯μ λμΌ μ μλ κ²μ΄λ€.
2. Echart Tree Shaking API
κ°μ₯ κΈ°λ³Έμ μΌλ‘ Echart λ₯Ό μ¬μ©νλ λ°©λ²μ μλμ κ°λ€.
import React from "react";
import type { EChartsOption } from "echarts";
import ReactECharts from "echarts-for-react";
const EchartPage = () => {
const chartRef = React.useRef(null);
const options: EChartsOption = {
xAxis: {
type: "category",
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
},
yAxis: {
type: "value",
},
series: [
{
data: [150, 230, 224, 218, 135, 147, 260],
type: "line",
},
],
};
return (
<ReactECharts
ref={chartRef}
option={options}
opts=
style=
/>
);
};
export default EchartPage;
μμ ꡬ쑰λ echarts-for-react
μμ μ 곡ν΄μ£Όλ λͺ¨λλ€μ λͺ¨μ‘°λ¦¬ λΆλ¬μ€κ³ μλ€. μ΄μ μ¬κΈ°μ λ΄κ° νλ‘μ νΈμ μ°λ κ·Έλνμ μμ±λ€λ§ λΆλ¬μ€λλ‘ λ³κ²½ν΄λ³΄κ² λ€.
import {
BarChart,
LineChart,
ParallelChart,
ScatterChart,
} from "echarts/charts";
import {
GridComponent,
LegendComponent,
LegendPlainComponent,
MarkPointComponent,
TooltipComponent,
} from "echarts/components";
import * as echarts from "echarts/core";
import { CanvasRenderer } from "echarts/renderers";
import type { EChartsOption } from "echarts";
import EChartsReactCore from "echarts-for-react/lib/core";
import "echarts/lib/component/markPoint";
echarts.use([
LineChart,
CanvasRenderer,
GridComponent,
MarkPointComponent,
TooltipComponent,
LegendComponent,
ParallelChart,
BarChart,
ScatterChart,
LegendPlainComponent,
]);
const EchartTreeShaking = () => {
const options: EChartsOption = {
xAxis: {
type: "category",
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
},
yAxis: {
type: "value",
},
series: [
{
data: [150, 230, 224, 218, 135, 147, 260],
type: "line",
},
],
};
return (
<EChartsReactCore
echarts={echarts}
option={options}
theme="space-theme"
style=
notMerge={true}
/>
);
};
export default EchartTreeShaking;
λ‘μ§μ κ½€ κ°λ¨νλ€. νμν λͺ¨λμ λΆλ¬λ΄μ echarts.useμ μ€μ λ§ ν΄μ£Όλ©΄ λ!
μλ λ΄κ° νλ‘μ νΈμμ μ€μ λ‘ μ μ©νλ μ½λμ΄λ€. λΆλ¬μ€λκ² λ§μ보μ΄κΈ΄ νλ κ²°κ³Όμ μΌλ‘λ μ΄μ μ½λλ³΄λ€ ν¨μ¬ ν¬κΈ°κ° μλ€λ κ²β¦!π«’
Echart 곡μ λ¬Έμμ λ°λ₯΄λ©΄ 5λ²μ λΆν° μλ‘μ΄ tree shaking API λ₯Ό λμ νμλ€κ³ νλ€. μ΅μ μ λ°λΌ μ΄λ€ λͺ¨λμ κ°μ ΈμμΌ νλμ§ λ μ½κ² μ μ μλλ‘ importλ₯Ό ν μ μλ€νλλ° μ€μ λ‘ μ°¨νΈλ μ°¨νΈλλ‘, μμ±μ μμ±λλ‘ λΆλ¬μ€λ κ΅¬μ‘°λΌ μ½λλ₯Ό 컀μ€ν νκΈ° μ©μ΄νλ€.
μλ, κ·Έλμ ν¬κΈ°κ° μ€μλμ§ μ΄λ»κ² νμΈν μ μμ§?π€·π»ββοΈ
3. λ²λ€ μ¬μ΄μ¦ λΉκ΅_cra-bundle-analyzer
cra-bundle-analyzerλ CRA νλ‘μ νΈμμ λ²λ€ ν¬κΈ°λ₯Ό λΆμνκ³ μκ°ννλ λꡬμ΄λ€. μ΄λ₯Ό ν΅ν΄ λ²λ€μ ν¬ν¨λ νμΌλ€μ ν¬κΈ°λ₯Ό κ·Έλνλ νΈλ¦¬ λ§΅κ³Ό κ°μ μκ°μ μΈ ννλ‘ νμΈν μ μλ€.
- μ€μΉ :
npm install --save-dev cra-bundle-analyzer
- μ¬μ© :
npx cra-bundle-analyzer
λͺ
λ Ήμ΄λ₯Ό μννλ©΄ html νμΌμ΄ νλ λ§λ€μ΄μ§λλ° μλμ μ΄λ―Έμ κ°μ νμΌμ΄ μμ±λλ€. <p style="color: lightgray; font-size: 12px">μ€λ©,,,μ΄μμ€μ λλΌμ΄ μ‘΄μ¬κ°μ ννλ fakerβ¦</p>
μ, κ·ΈλΌ Echart μ νΈλ¦¬ μμ΄νΉ μ ν ν¬κΈ°λ₯Ό λΉκ΅ν΄λ³΄μ. (Parse size)
μ€νΈλΌ νΈλ¦¬μμ΄νΉ μ±κ³΅! 430KB μ λ μ€μ΄λ€μλ€.π
μΉ μ ν리μΌμ΄μ μμλ μ¬μ©μ κ²½ν μΈ‘λ©΄μμ μ΄κΈ° λ‘λ© μλκ° λ§€μ° μ€μνλ€. μ΄λ₯Ό μν΄ μ¬μ©λμ§ μλ μ½λλ₯Ό μ€μ¬λκ°λ κ²μ΄ λ§€μ° μ€μνλ° νΈλ¦¬μμ΄νΉμ΄ νλμ λ°©λ²μ΄ λλ κ²μ μ΄λ² Echart λΌμ΄λΈλ¬λ¦¬λ₯Ό 컀μ€ν ν΄λ³΄λ©΄μ μκ²λμλ€. λ μ΄ ννΈ λ΄λΉνκ±° μ°Έ μν κ±Έμ§λ..? μ€λλ νλ λ°°μκ°λ€. κ·Όλ° κ·Έλ¬κ³ 보λ λ΄ νλ‘μ νΈμ μ§κΈ echartλ§ νΈλ¦¬μμ΄νΉμ΄ νμνκ² μλλ―νλ€(?) μ΄μ¨λ μ§μμ μμμ λ λ»μΉκ³ μλ μ΄ κ³Όμ μμ μ½λ μμ± μλ Ή λΏλ§μ΄ μλ νλ‘μ νΈ μ±λ₯κΉμ§ μ.μ.μ΄ λκΈ° μν΄ λ λ§μ 곡λΆλ₯Ό ν΄μΌν¨μ κΉ¨λ¬μλ€. λ΄μΉκΉμ 리μ‘νΈ μ±λ₯ μ΅μ νμ λν΄ λ μμλ΄μΌκ² λ€ νν. μ€λλ λΆλ¦λΆλ¦νλ λμ κΆλ₯μ΄!! νμ΄ν ~~!π€