Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RxJS, mixpanelで実装するSPAの行動分析基盤
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yosuke Kurami
November 02, 2017
Programming
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RxJS, mixpanelで実装するSPAの行動分析基盤
Yosuke Kurami
November 02, 2017
More Decks by Yosuke Kurami
See All by Yosuke Kurami
TypeScript LSP の今までとこれから
quramy
1
2.2k
フロントエンドテストの育て方
quramy
12
3.9k
App Router 悲喜交々
quramy
8
770
上手に付き合うコンポーネントテスト
quramy
6
2.4k
Patched fetch did not work
quramy
6
810
GraphQL あるいは React における自律的なデータ取得について
quramy
18
6k
Next.js App Router
quramy
15
4k
Fragment Composition of GraphQL
quramy
17
4.9k
reg-viz VRT tools
quramy
4
1.8k
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
210
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
490
The Rails Doctrine Decade
koic
2
380
wkhtmltopdfの次どうするか問題2026
willnet
2
1.7k
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.5k
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
120
App Intentsのビルドプロセスを支える技術
kntkymt
0
430
Verilogで学ぶCPU自作入門.pdf
uyuki234
6
3.1k
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
100
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3.2k
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
1
470
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Code Reviewing Like a Champion
maltzj
528
40k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Discover your Explorer Soul
emna__ayadi
2
1.3k
The Curse of the Amulet
leimatthew05
3
15k
Deep Space Network (abreviated)
tonyrice
0
320
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
How STYLIGHT went responsive
nonsquared
100
6.3k
Mobile First: as difficult as doing things right
swwweet
225
10k
4 Signs Your Business is Dying
shpigford
187
23k
Transcript
3Y+4 NJYQBOFMͰ࣮͢Δ41"ͷߦಈੳج൫ :PTVLF,VSBNJ !2VSBNZ 1
"CPVUNF
w 2VSBNZ UXJUUFS(JU)VC2JJUB ͱ͍͍·͢ w OHKBQBOͷελοϑͯ͠·͢ w IUUQTMBDLJOWJUFOHKBQBOPSH w "OHVMBS
5ZQF4DSJQU 7JNΛภѪ͍ͯ͠·͢ ࣗݾհ
ձࣾαʔϏεհ
"*ΞφϦετ w IUUQTXBDVMBJDPN
"*ΞφϦετ w (PPHMF"OBMZUJDTͷσʔλΛݩʹɺ8FCαΠτͷվળҊΛ ఏҊ w ྫɿʮಛఆͷϖʔδΛݟΔͱ$73͕ஶ͘͠ѱ͘ͳΔʯ w 8FCϚʔέλʔ ཧళ͞Μ͚ʹͬͯΒ͏ͨΊͷ##
4BB4 w "OHVMBSWʹΑΔ41"
ࠓͷςʔϚ
41"͕ͲͷΑ͏ʹΘΕͯΔ͔Γ͍ͨ
σʔλΛݩʹվળΛݟ͚ͭΔ
NJYQBOFM w Ϣʔβʔ୯ҐͷΠϕϯτΛࡉ͔͘औಘɾੳͰ͖Δ
NJYQBOFMͷಛ w NJYQBOFMUSBDL ʜ ͰҙͷΠϕϯτΛૹ৴Ͱ͖Δ w σʔλΛ"1*ͰFYQPSUͰ͖Δ w #JH2VFSZʹJNQPSU w
ଞͷσʔλιʔε %# ͱΘͤͯɺ3FEBTIͰΫΤϦΛ ࡞Γɺ༷ʑͳ࣠Ͱੳ͕Ͱ͖Δ
ͲͷΑ͏ʹૹ৴͢ΕΑ͍͔ʁ
ϢʔβʔΠϕϯτͷநԽ w 41"Ͱ༷ʑͳʮΠϕϯτʯ͕ൃੜ͢Δ w %0.Πϕϯτ ϑΥʔϜͷೖྗ ϘλϯΫϦοΫ w ϧʔλʔʹΑΔը໘ભҠ
w ϞʔμϧΞϥʔτͷ։ด w Ϗδωεཁ݅తͳ ίϯόʔδϣϯΠϕϯτ w FUDʜ
ΠϕϯτͷநԽ w ΠϕϯτͷൃੜՕॴຖʹNJYQBOFMͷૹ৴Λॻ͘ͷɺ ॲཧͷݟཱ͕ͯѱ͘ͳΔ w ͦ͜ͰɺΠϕϯτΛ3YKTͷετϦʔϜͱͯ͠நԽ w ͜ͷετϦʔϜΛ4VCTDSJCFͯ͠.JYQBOFMૹ৴ w 3YKT࣌ؒͰൃੜ͢ΔΠϕϯτΛநతʹѻ͏͜ͱʹಛԽ͠
ͨϥΠϒϥϦ
ࢀߟʹͨ͠Ϟσϧ ҰൠతͳQVCTVCϞσϧ w SYKT͕ΈΛఏڙͯ͘͠ΕΔ -PH+ͳͲͰݟΒΕΔΧςΰϦઃܭ w lVJz w
lVJCVUUPOz w lVJCVUUPODMJDLz
this.ngZone.runOutsideAngular(() => { if (e && e["__pushed__"]) return; if (e)
e["__pushed__"] = true; const element = this.elemRef.nativeElement as HTMLElement; const value = element.textContent; const typeAttr = element.getAttribute("type"); const kindAttr = element.getAttribute("kind"); const iconAttr = element.getAttribute("iconKind"); const activity = createActivity(element, { categorySuffix: "button", action: "click", value, }); if (typeAttr) activity.label += `[type='${typeAttr}']`; if (kindAttr) activity.label += `[kind='${kindAttr}']`; if (iconAttr) activity.label += `[iconKind='${iconAttr}']`; this.accumulator.push(activity); }); 1VCMJTI&WFOUT
Observable.merge( activities .filterCategorizedActivity("ui.router") .filter(({ action }) => action === "navigationEnd")
.debounceTime(100), activities .filterCategorizedActivity("ui.root", { exclude: true }) .filterCategorizedActivity("ui.router", { exclude: true }) ) .mapFlattenData() .subscribe(({ action, category, ...rest }) => mixpanel.track(`${category}.${action}`, rest)) ; 4VCTDSJCF&WFOUT
ΠϕϯτநԽͷϝϦοτ w ΠϕϯτͷநԽʹΑΓɺૹ৴ίʔυΛՃ͢Δ͚ͩͰɺଞ αʔϏεͷ࿈ܞ͕Մೳɻ w FYɿྫ֎ൃੜ࣌ʹɺൃੜͨ͠Πϕϯτͷۙ݅ΛΤϥʔ τϥοΩϯάαʔϏε4FOUSZૹ৴ ܽམ͢Δ͜ͱʜ
4VNNBSZ
·ͱΊ w NJYQBOFM͍͍ͧ w #JH2VFSZ͍͍ͧ w 3Y+4͍͍ͧ w "OHVMBS͍͍ͧ
5IBOLZPV