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
React Native JSI ソースコードリーディング / React Native JS...
Search
Shoken Fujisaki
October 02, 2021
0
1.6k
React Native JSI ソースコードリーディング / React Native JSI source code reading
React Native Matsuri 2021で発表したスライドです。
https://reactnative-matsuri.com/ja
Shoken Fujisaki
October 02, 2021
Tweet
Share
More Decks by Shoken Fujisaki
See All by Shoken Fujisaki
KitchHike式 React Native 設計チェックポイント / React Native App Design in KitchHike
shoken
0
2.1k
React Nativeコンポーネントを 公開してわかった3つのこと / React Native Component Library npm published
shoken
0
1.7k
React Native for macOS
shoken
1
1.8k
React Native の E2E テストフレームワーク Detoxの紹介 / React Native E2E Test Detox
shoken
0
3.1k
広告計測してと言われた時にReact Nativeエンジニアが詠む資料 / React Native with AppsFlyer and Firebase Analytics
shoken
3
2k
デザイナーからのラブレター デザイナーが本音で話すエンジニアとの新しいカンケイ
shoken
0
1.2k
MongoDB CTO パネルディスカッション / MongoDB CTO panel discussion 2014
shoken
0
830
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Docker and Python
trallard
46
3.6k
Optimizing for Happiness
mojombo
379
70k
Automating Front-end Workflow
addyosmani
1371
200k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Facilitating Awesome Meetings
lara
57
6.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
KATA
mclloyd
PRO
32
15k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
Transcript
3FBDU/BUJWF.BUTVSJ-5 3FBDU/BUJWF +4*ιʔείʔυϦʔσ Οϯά 4IPLFO'VKJTBLJ
ࣗݾհ w 4IPLFO'VKJTBLJ !TIPLFOY w גࣜձࣾΩονϋΠΫ ڞಉۀऀ$50 w
ڞஶ3FBDU/BUJWFʹࢧ͑Β͑Δاۀ w ΩονϋΠΫΤϯδχΞνʔϜͰ ݄ץ3/'FBUVSFT࿈ࡌத IUUQTUFDILJUDIIJLFDPN
ࠓճ+4*ʹͨ͠ ίʔυϦʔσ ΟϯάͰ͢
ΞδΣϯμ 3FBSDIJUFDUVSFͱ+4* +4*ͷιʔείʔυΛಡΉ +4*.PEVMFͷιʔείʔυΛಡΉ
ΞδΣϯμ 3FBSDIJUFDUVSFͱ+4* +4*ؔ࿈ͷιʔείʔυΛಡΉ +4*ΛͬͨϥΠϒϥϦΛಡΉ
#SJEHF $ 4IBEPX5ISFBE :PHB /BUJWF.PEVMFT +BWB0CK$ +4#VOEMF +BWB4DSJQU
+4$ +40/ +40/ ඇಉظΩϡʔ 6*5ISFBE +45ISFBE /BUJWF6* +BWB0CK$ 3FBSDIJUFDUVSFҎલ #SJEHF
#SJEHF $ 4IBEPX5ISFBE :PHB /BUJWF.PEVMFT +BWB0CK$ +4#VOEMF +BWB4DSJQU
+4$ +40/ +40/ ඇಉظΩϡʔ 6*5ISFBE +45ISFBE #SJEHFҰͭͳͷͰϘτϧ ωοΫʹͳΓ͍͢ ඇಉظͰॲཧ͢ΔͨΊɺىಈ࣌ ʹશͯಡΈࠐΉඞཁ͕͋Δ ૄ݁߹ͳඇಉظॲཧͰྑͦ͞͏͕ͩ τϨʔυΦϑ ඇಉظͷͨΊɺύϑΥʔϚϯε ʹͳΔՄೳੑ /BUJWF6* +BWB0CK$ ϨϯμϦϯάߋ৽ʹ#SJEHFɾ +45ISFBEͷ௨՟͕ඞཁ
+4#VOEMF +BWB4DSJQU +45ISFBE 3FBSDIJUFDUVSFҎ߱ /FX"SDIJUFDUVSFͱ+4* +4* +47. 0CKFDUJWF$ +BWB+/*
$
+4#VOEMF +BWB4DSJQU +45ISFBE 3FBSDIJUFDUVSFҎ߱ /FX"SDIJUFDUVSFͱ+4* +4* +47. /BUJWF.PEVMFT
+BWB0CK$ 6*5ISFBE /BUJWF6* +BWB0CK$
+4#VOEMF +BWB4DSJQU +45ISFBE 3FBSDIJUFDUVSFҎ߱ /FX"SDIJUFDUVSFͱ+4* +4* +47. /BUJWF.PEVMFT
+BWB0CK$ 6*5ISFBE /BUJWF6* +BWB0CK$ $ +40/͕ͳ͘ͳͬͨ #SJEHFܦ༝ͷඇಉظॲཧ͔Β ͷಉظॲཧ $ Ͱڞ௨ͷ/BUJWF.PEVMFT ͕ॻ͚ΔΑ͏ʹͳͬͨ -B[ZMPBEJOH͕Մೳʹ
ΞδΣϯμ 3FBSDIJUFDUVSFͱ+4* +4*ؔ࿈ͷιʔείʔυΛಡΉ +4*ΛͬͨϥΠϒϥϦΛಡΉ
݄ʹ+4$͔Β+4*ͷมߋ͕ ίϛοτ͞ΕΔ IUUQTHJUIVCDPNGBDFCPPLSFBDUOBUJWFDPNNJUDEFGCCCBGDBCBCE 3$5$YY#SJEHFͰҎԼͷมߋ มߋલ+4$&YFDVUPS'BDUPSZ มߋޙ+4*&YFDVUPS'BDUPSZ +4$3VOUJNF
+4*&YFDVUPS'BDUPSZ ͱ͍͏ͷ͕ॏཁͦ͏🤔
3$5$YY#SJEHFͰҎԼͷมߋ มߋલ+4$&YFDVUPS'BDUPSZ มߋޙ+4*&YFDVUPS'BDUPSZ +4$3VOUJNF
ݱࡏͷ3$5$YY#SJEHFNN IUUQTHJUIVCDPNGBDFCPPLSFBDUOBUJWFCMPCDEFCECFEFEDBGDGCB3FBDU$YY#SJEHF3$5$YY#SJEHFNN-- 3$5@64&@)&3.&4͕USVFͳΒ )FSNFT&YFDVUPS'BDUPSZ +4*&YFDVUPS3VOUJNF*OTUBMMFS GBMTFͳΒ +4$&YFDVUPS'BDUPSZ
+4*&YFDVUPS3VOUJNF*OTUBMMFS
+4*&YFDVUPS3VOUJNF*OTUBMMFS 🤔
)FSNFT&YFDVUPS'BDUPSZI IUUQTHJUIVCDPNGBDFCPPLSFBDUOBUJWFCMPCFBEBDGDBECBDEECGD3FBDU$PNNPOIFSNFTFYFDVUPS)FSNFT&YFDVUPS'BDUPSZI )FSNFT&YFDVUPS'BDUPSZͷୈҰҾ͕ +4*&YFDVUPS3VOUJNF*OTUBMMFS
3$5+4*&YFDVUPS3VOUJNF*OTUBMMFSNN IUUQTHJUIVCDPNGBDFCPPLSFBDUOBUJWFCMPCFBEBDGDBECBDEECGD3FBDU$YY#SJEHF3$5+4*&YFDVUPS3VOUJNF*OTUBMMFSNN ίʔυΛಡΜͰΘ͔ͬͨ͜ͱ ɾ/BUJWFͱCJOE͍ͯ͠Δ ɾSVOUJNFΛͯ͠ϥοϓͯ͠Δ SVOUJNFʹ)FSNFTͳͲ+BWB4DSJQU&OHJOF ͕ࢀর͞ΕΔɻ +4*+4&OHJOFͷϥούʔɻ
+4*ؔ࿈Ϋϥε w SFBDUOBUJWF3FBDU$PNNPOKTJFYFDVUPSKTJSFBDU+4*&YFDVUPS w SFBDUOBUJWF3FBDU$PNNPOKTJFYFDVUPSKTJSFBDU+4*/BUJWF.PEVMFT
+4*&YFDVUPSDQQ IUUQTHJUIVCDPNGBDFCPPLSFBDUOBUJWFCMPCBBDDCBGFBFE3FBDU$PNNPOKTJFYFDVUPSKTJSFBDU+4*&YFDVUPSDQQ /BUJWF.PEVMF1SPYZ /BUJWF.PEVMFTͷࢀরΛ࣋ͭ
+4*/BUJWF.PEVMFTDQQ IUUQTHJUIVCDPNGBDFCPPLSFBDUOBUJWFCMPCBBDDCBGFBFE3FBDU$PNNPOKTJFYFDVUPSKTJSFBDU+4*/BUJWF.PEVMFTDQQ SVOUJNFHMPCBM HFU1SPQFSUZ"T'VODUJPO SVOUJNFHMPCBM HFU1SPQFSUZ"T0CKFDU Λݺͼग़ͯ͠࡞ͨ͠NPEVMFΛฦ͢
+4#VOEMF +BWB4DSJQU +45ISFBE +4* +47. /BUJWF.PEVMFT +BWB0CK$ 6*5ISFBE
/BUJWF6* +BWB0CK$ $ ͜͜·ͰಡΜͩίʔυ KTJ3VOUJNFΦϒδΣΫτ +4*&YFDVUPS +4*/BUJWF.PEVMFT )FSNFT +4$ )FSNFT&YFDVUPS'BDUPSZ +4$&YFDVUPS'BDUPSZ 3$5+4*&YFDVUPS3VOUJNF*OTUBMMFS KTJDQQ +4*%ZOBNJDDQQ SVOUJNFHMPCBM TFU1SPQFSUZ SVOUJNFHMPCBM HFU1SPQFSUZ
ίϥϜTFU5JNFPVUͷ࣮
SFBDUOBUJWF-JCSBSJFT$PSF5JNFST +45JNFSTKT /BUJWF5JNJOHͱ
SFBDUOBUJWF-JCSBSJFT$PSF5JNFST /BUJWF5JNJOHKT 5SVCP.PEVMFʂ
SFBDUOBUJWF3FBDU$PSF.PEVMFT 3$55JNJOHNN TFU5JNFPVUͰΘΕΔDSFBUF5JNFSͷ J04ωΠςΟϒ࣮
TFU5JNFPVU5VSCP.PEVMFԽࡁΈ
ΞδΣϯμ 3FBSDIJUFDUVSFͱ+4* +4*ͷιʔείʔυΛಡΉ +4*.PEVMFͷιʔείʔυΛಡΉ
DSBGU[EPH͞ΜͷSFBDUOBUJWFRVJDLCBTF ͷίʔυΛಡΉ IUUQTHJUIVCDPNDSBGU[EPHSFBDUOBUJWFRVJDLCBTF
IUUQTUFDILJUDIIJLFDPNFOUSZSFBDUOBUJWFGFBUVSFT •React NativeͷύϑΥʔϚϯεͱɺNULLจࣈΛؚΉόΠφϦจࣈྻΛॲཧͰ͖ͳ͍՝ •base64 ͰΤϯίʔυ͞Εͨը૾σʔλΛJS ͔ΒReact Native ϒϦοδΛհͯ͠WebView ʹ͢ͷ Ͱ͕͔͔࣌ؒΔ
•C++ ͰJSI ωΠςΟϒϞδϡʔϧΛ࡞ͨ͠ •JSI Λ༻͢Δ͜ͱʹΑΓɺJavaScript C++ ϗετΦϒδΣΫτͷࢀরΛอ࣋͠ɺϝιουΛݺ ͼग़͢͜ͱ͕Ͱ͖Δɻ͜ΕʹΑΓɺઌʹड़ͨNULLจࣈͷΛ࠷ऴతʹճආͰ͖ͨɻ
͜ͷลΓͷίʔυΛಡΉ
DQQCBTFI CBTF@FODPEFCBTF@EFDPEFͳͲͷ ͕ؔએݴ͞Ε͍ͯΔɻ࣮CBTFDQQ
DQQSFBDUOBUJWFRVJDLCBTFDQQ ࣮ࡍͷ+4*όΠϯσΟϯάॲཧɻ +BWB4DSJQU͢ΛKTJ7BMVFͱͯ͠࡞ JOTUBMM#BTFؔͷ࣮ +BWB4DSJQUͷάϩʔόϧ +BWB4DSJQUͰ͑ΔϓϩύςΟʢؔʣ
JPT2VJDL#BTFNN +4*όΠϯσΟϯάެ։༻ʹ 3FBDU3$5#SJEHF 1SJWBUFϔομʔϑΝΠϧΛΠϯϙʔτ DYY#SJEHFSVOUJNFͷࢀরΛऔಘɻ $ ίʔυͰૢ࡞༻ͷ+BWB4DSJQU7BMVFTΛ ࡞͢ΔͨΊʹඞཁͳSVOUJNFΦϒδΣΫτ SVOUJNFΛJOTUBMM#BTFؔʹ͠
ͯɺ+4*όΠϯσΟϯάΛ࡞
JOEFYUTͰؔόΠϯσΟϯάΛએݴ DQQͰKTJ3VOUJNFHMPCBM TFU1SPQFSUZ ͨؔ͠ FYQPSUGVODUJPO
"QQUTYͰJNQPSU FYQPSUͨ͠GVODUJPO
+4#VOEMF +BWB4DSJQU +45ISFBE +4* +47. /BUJWF.PEVMFT +BWB0CK$ 6*5ISFBE
/BUJWF6* +BWB0CK$ $ CBTFI DQQ SFBDUOBUJWFRVJDLCBTFI DQQ 2VJDL#BTFI NN ·ͱΊ KTJ3VOUJNFΦϒδΣΫτ +4*&YFDVUPS +4*/BUJWF.PEVMFT )FSNFT +4$ )FSNFT&YFDVUPS'BDUPSZ +4$&YFDVUPS'BDUPSZ 3$5+4*&YFDVUPS3VOUJNF*OTUBMMFS KTJDQQ +4*%ZOBNJDDQQ
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ ΩονϋΠΫςοΫϒϩάͰ 3FBDU/BUJWF࠷৽ใΛ࿈ࡌத IUUQTUFDILJUDIIJLFDPN