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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
jsakamoto
November 21, 2024
Technology
2
350
minify の効果を最大限に引き出す TypeScript コードを書く
クラメソさっぽろIT勉強会 (仮) #6:パフォーマンスチューニング LT
jsakamoto
November 21, 2024
Tweet
Share
More Decks by jsakamoto
See All by jsakamoto
開発したプレゼン用ツールが15年経っても誰も使ってくれない話
jsakamoto
0
50
UI コンポーネントカタログに MCP サーバー機能を追加する試み、そしてその結果
jsakamoto
1
87
いいね が燃料! 「自分のOSS」で1億ダウンロード突破の開発者が語る OSS 開発のリアル
jsakamoto
0
210
JavaScript 以外の言語によるフロントエンド Web 開発が既に実用段階である話
jsakamoto
0
2.8k
ベクトル化を使った意味検索を、簡単にアプリケーションに搭載できる時代になっていた件。
jsakamoto
2
370
CSR? SSR? C# で作る Web アプリフレームワーク Blazor のレンダリング方式を整理する
jsakamoto
0
950
UI コンポーネントカタログ “Storybook” を、C# で SPA が作れる Blazor で再実装した話
jsakamoto
0
2.1k
Evolution of Blazor in .NET 8 - Exploring the Multi-Page Apps Implementation by Blazor!
jsakamoto
1
980
C#でSPAを実装する Blazor で UI コンポーネントカタログ Storybook を使いたい! “Blazing Story” の紹介
jsakamoto
0
990
Other Decks in Technology
See All in Technology
Tebiki Engineering Team Deck
tebiki
0
27k
「Blue Team Labs Online」入門 - みんなで挑むログ解析バトル
v_avenger
0
180
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
190
親子 or ペアで Mashup for the Future! しゃべって楽しむ 初手AI駆動でものづくり体験
hiroramos4
PRO
0
130
非情報系研究者へ送る Transformer入門
rishiyama
11
7.5k
マルチアカウント環境でSecurity Hubの運用!導入の苦労とポイント / JAWS DAYS 2026
genda
0
710
決済サービスを支えるElastic Cloud - Elastic Cloudの導入と推進、決済サービスのObservability
suzukij
2
640
[JAWSDAYS2026]Who is responsible for IAM
mizukibbb
0
690
OCHaCafe S11 #2 コンテナ時代の次の一手:Wasm 最前線
oracle4engineer
PRO
2
130
[E2]CCoEはAI指揮官へ。Bedrock×MCPで構築するコスト・セキュリティ自律運用基盤
taku1418
0
170
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/12 - 2026/2
oracle4engineer
PRO
0
140
It’s “Time” to use Temporal
sajikix
1
160
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
A better future with KSS
kneath
240
18k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
67
37k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
110
Amusing Abliteration
ianozsvald
0
130
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
120
Paper Plane (Part 1)
katiecoart
PRO
0
5.6k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
410
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Embracing the Ebb and Flow
colly
88
5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
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.