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
minify の効果を最大限に引き出す TypeScript コードを書く
Search
jsakamoto
November 21, 2024
Technology
400
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
minify の効果を最大限に引き出す TypeScript コードを書く
クラメソさっぽろIT勉強会 (仮) #6:パフォーマンスチューニング LT
jsakamoto
November 21, 2024
More Decks by jsakamoto
See All by jsakamoto
WebMCPを試してみました
jsakamoto
0
63
VRT in Blazor App Dev - .NET Lab 2026 Jul LT
jsakamoto
0
83
Google Chrome の開発者ツールで C# コードをデバッグできるって知ってました?
jsakamoto
1
100
useEffect は使いたくないのですが、ではどうしたらいいですか
jsakamoto
1
140
開発したプレゼン用ツールが15年経っても誰も使ってくれない話
jsakamoto
0
110
UI コンポーネントカタログに MCP サーバー機能を追加する試み、そしてその結果
jsakamoto
1
140
いいね が燃料! 「自分のOSS」で1億ダウンロード突破の開発者が語る OSS 開発のリアル
jsakamoto
0
270
JavaScript 以外の言語によるフロントエンド Web 開発が既に実用段階である話
jsakamoto
0
3k
ベクトル化を使った意味検索を、簡単にアプリケーションに搭載できる時代になっていた件。
jsakamoto
2
440
Other Decks in Technology
See All in Technology
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
500
Claude Teamプランの コスト最適化を考える
rfdnxbro
0
660
tamachi.go 誕生の裏側
rymiyamoto
1
210
国家プロジェクトを支える「さくらONE」 大規模LLM開発におけるGPU障害を乗り越えるクラスター運用戦略
gpuunite_official
0
280
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
85k
Kiro入門|仕様駆動開発で変わるAI時代の開発スタイル
cmkudo
0
380
2027年のMetricKit
kantacky
0
170
Kiro5兄弟のいまどきのセキュリティ基礎知識
kentapapa
0
200
dbt と Snowflake と tag
kevinrobot34
1
240
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
250
AI時代のアウトプット――変わったこと、変わらないこと / Devsumi 2026 Kansai #devsumi
jnchito
0
580
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Done Done
chrislema
186
16k
Code Review Best Practice
trishagee
74
20k
Designing for humans not robots
tammielis
254
26k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
480
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
220
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Scaling GitHub
holman
464
140k
Transcript
minify の効果を 最大限に引き出す TypeScript コードを書く クラメソさっぽろIT勉強会 (仮) #6:パフォーマンスチューニング LT
https://jsakamoto.github.io/Toolbelt.Blazor.SplitContainer/
オリジナルのコード
None
2,197 bytes
クラスからクロージャーへ
クラスからクロージャーへ • 課題 • 大量の “this.” • クラスのメンバーは minify されない
• ヒント • 変数名は minify される • 解決 • アロー関数を const 変数に格納してこれを参照すれば minify される • class は使わず、状態変数を参照するクロージャーで実装する
None
1,446 bytes
文字列定数と null の重複排除
文字列定数と null の重複排除 • 課題 • イベント名の文字列定数が addEventListener 用と removeEventListener
用 とで 2 回出現する • null 値も 3 回出現する • ヒント • 変数名は minify される • 解決 • 繰り返し出現する文字列定数や null 値を const 変数に格納してから、これを参 照することで、minify された変数名での参照で重複を排除
None
1,421 bytes
メソッドを bind して関数化
メソッドを bind して関数化 • 課題 • 同じ要素に対する addEventListener 呼び出しと removeEventListener
呼 び出しが多数発出現する • ヒント • アロー関数に格納してそれを参照すれば minify される • しかしこれは同じ要素に対するメソッド呼び出し • 解決 • bind を使ってオブジェクトに束縛済みの関数にしてしまってから、const 変数 に格納して使う
None
1,336 bytes
状態オブジェクトを辞書化
状態オブジェクトを辞書化 • 課題 • 状態オブジェクトのプロパティ名は minify されない • 解決 •
プロパティアクセスの代わりに辞書形式でのアクセスを使う • キーを const enum にすることで、TypeScript から JavaScript への トランスパイルにより、キーが数字の即値になる • TypeScript の言語機能を活用し型安全になるよう実装
None
1,212 bytes
改めて結果比較
2,197 1,446 1,421 1,336 1,212 オリジナル クラスからクロージャーへ 文字列定数の重複排除 メソッドをbind 状態オブジェクトの辞書化
bytes bytes bytes bytes bytes
まとめ • じゅうぶん保守可能、且つ、型安全な TypeScript コードでも、 minify をより効果的にすることができ たと思う • とはいえ、その
100 bytes を削ることに意味があるのか? • ”minify” という意図を知らないと「なぜこんなことしているの?」と思われるので、 チーム開発での採用は慎重に • しかし class ではなくクロージャーで実装するのは効果絶大 & さほど変な Hack じゃな いので、これはやっておいて良さそう
Learn, Practice, Share.