3606c48f02
react-native-svg materialises three native views per icon (SvgView + Group + Path). Feed screens render around a thousand icons, so that is ~2400 views and ~2400 shadow nodes of pure overhead per profile load. Move the 28 icons that repeat on feed screens - the post action bar, feed row reason, post embeds, the loading skeleton and the bottom tab bar - to react-native-nano-icons, which draws each icon as a single native text glyph. The SVG sources are generated from the existing icon path data so the geometry is unchanged, and `createNanoIcon` mirrors the `useCommonSVGProps` contract so call sites are one-line import swaps. Measured on a Samsung Galaxy A16 (SM-A165F, Android 16) with release builds, 10 runs per condition: native views -20.6%, icon construction -45.3%, JS-thread CPU -6.1%, main-thread CPU -3.3%. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 line
1.1 KiB
JSON
1 line
1.1 KiB
JSON
{"m":{"f":"app-icons","u":1024,"z":1020,"s":59648,"h":"f31796d2f6d13414a394ceff67db6d504f46e260cf1e305618733472f96c181d"},"i":{"arrow-top-right":[1024,[[59648,"#000"]]],"bell-filled":[1024,[[59649,"#000"]]],"bell":[1024,[[59650,"#000"]]],"bookmark-filled":[1024,[[59651,"#000"]]],"bookmark":[1024,[[59652,"#000"]]],"bubble":[1024,[[59653,"#000"]]],"circle-check":[1024,[[59654,"#000"]]],"clock":[1024,[[59655,"#000"]]],"earth":[1024,[[59656,"#000"]]],"heart-filled":[1024,[[59657,"#000"]]],"heart":[1024,[[59658,"#000"]]],"home-filled":[1024,[[59659,"#000"]]],"home":[1024,[[59660,"#000"]]],"inbox":[1024,[[59661,"#000"]]],"menu":[1024,[[59662,"#000"]]],"message-filled":[1024,[[59663,"#000"]]],"message":[1024,[[59664,"#000"]]],"mute":[1024,[[59665,"#000"]]],"pause":[1024,[[59666,"#000"]]],"pin":[1024,[[59667,"#000"]]],"play":[1024,[[59668,"#000"]]],"reply":[1024,[[59669,"#000"]]],"repost-corner2":[1024,[[59670,"#000"]]],"repost":[1024,[[59671,"#000"]]],"search-filled":[1024,[[59672,"#000"]]],"search":[1024,[[59673,"#000"]]],"share":[1024,[[59674,"#000"]]],"unmute":[1024,[[59675,"#000"]]]}} |