Share
Embed
技術面からみる パフォーマンス改善 / Frontrend Vol.13 Dec 19th, 2018
Chrome Dev Summit 2018 の内容を共有。
発表の中では少し端折ったところもありましたので、こちらで参照いただけますと幸いです。このスライドを見た上で、YouTube に上がっている動画を見ることでより深い理解につながれば幸いです。
CDS 2018 の YouTube 動画はこちら:
https://www.youtube.com/playlist?list=PLNYkxOF6rcIDjlCx1PcphPpmf43aKOAdF
tsuyoshi wada
December 19, 2018
Transcript
60 slides
-
"CPVUNF DISPNFEFWTVNNJUCSJFpOHTFTTJPO 5TVZPTIJ8BEBా߶ !XBEBDLFM w $ZCFS"HFOU *ODத్ೖࣾ w $"54 $MJFOU"EWBODFE5FDIOPMPHZ4UVEJP
ॴଐ w $"54ͱ͍͏৫ͰϦʔυΤϯδχΞΛ͍ͬͯ·͢ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO w $ISPNF%FW4VNNJUͷ༰Λڞ༗ w ൃදҎ֎ͷͰࢀরͯ͠༰͕ѲͰ͖ΔΑ͏ʹจ ষΛଟ͘ࡌ͍ͤͯ·͢ w ൃද࣌ؒͷ͔ؔΒলུΛڬΈͭͭਐΊ·͢ w ͜ͷεϥΠυΛݟ্ͨͰɺ:PV5VCFʹ্͕͍ͬͯΔ
ಈըΛݟΔ͜ͱͰΑΓਂ͍ཧղʹͭͳ͕Ε͍Ͱ͢ IUUQTXXXZPVUVCFDPNQMBZMJTU MJTU1-/:LY0'SD*%KM$Y1DQI1QNGB,0"E' -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO લఏͱͯ͠3FRVFTUʹͭͷछྨ͕͋Δ w /BWJHBUJPOSFRVFTUT w 8FCϖʔδࣗମͷ3FRVFTU w Ωϟογϡ͕͍͠ w ͔͠͠ɺύϑΥʔϚϯεͷΠϯύΫτ͕Ͱ͔͍
w 3FTPVSDFSFRVFTUT w 8FCϖʔδʹࢀর͞ΕΔΞηοτͷ3FRVFTU w +BWB4DSJQUɺ$44ɺ*NBHFT w Ωϟογϡ͕༰қͰར༻ྫଟ͍ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO /BWJHBUJPOSFRVFTUTͷ࠷దԽΛਤΔ w Ωϟογϡ͔Β͙͢ʹίϯςϯπΛฦ͢ w 8PSLCPYΛ͏ͱ؆୯ʹಋೖͰ͖Δ w XPSLCPYTUSBUFHJFTDBDIF'JSTU w
XPSLCPYTUSBUFHJFTTUBMF8IJMF3FWBMJEBUF w ΩϟογϡΛฦ٫ͨ͋͠ͱʹɺόοΫάϥϯυͰ࠷ ৽ͷϦιʔεΛऔಘ͢ΔΑ͏ʹ͢Δ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO workbox.routing.registerRoute( '/about', workbox.streams.strategy([ cacheFirst.makeRequest({ request: new Request(‘/_header.html’), }), networkFisrt.makeRequest({
request: new Request(‘/about.content.html’), }), cacheFirst.makeRequest({ request: new Request(‘/_footer.html’), }), ]), ); 8PSLCPYΛ͏ͱ؆୯ͳهड़ͰରԠͰ͖Δ Ωϟογϡ༏ઌ͔ɺ/FUXPSL༏ઌ͔ͷΩϟογϡઓུΛॊೈʹΉ͜ͱ͕ॏཁ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO 1SFDBDIJOH DSJUJDBM w ϝϦοτ w ࣮ͱ੍ޚɺߋ৽͕ൺֱత༰қ w αΠζطʹ͔͍ͬͯΔͷ͕΄ͱΜͲ w
σϝϦοτ w ҙͷλΠϛϯάͰΩϟογϡ੍ޚ͕ඞཁ w ઌߦͯ͠/FUXPSLίετ͕ඞཁ w ࣮ࡍʹෆඞཁͳ63-ΛΩϟογϡͯ͠͠·͏ Մೳੑ͕͋Δ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO 3VOUJNFDBDIJOH OPODSJUJDBM w ϝϦοτ w औಘࡁΈը૾ɺΤϯτϦϙΠϯτʹԠͨ͡Ωϟογϡ ʹద͍ͯ͠Δ w σϝϦοτ
w Ωϟογϡͷ߹ੑ୲อ͕͍͠ w ίϯςϯπϋογϡɺ3FWJTJPOɺϑΝΠϧ໊ͷ Ͱճආ w Ωϟογϡ͕ͲΜͲΜ૿͑ͯ͠·͏ ͭ·ΓαΠζ ͕ෆఆ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO const { usage, quota } = await navigator.storage.estimate(); 4UPSBHF.BOBHFS"1*Λ੍ͬͨޚ
2VPUBΛ͑ͳ͍Α͏ʹ੍ޚΛ͢Δ͜ͱ͕ग़དྷΔɻ 8PSLCPYͷ&YQJSBUJPO1MVHJOΛ͏͜ͱͰ؆୯ʹ༻͢Δ͜ͱग़དྷΔɻ IUUQTEFWFMPQFSTHPPHMFDPNXFCUPPMTXPSLCPYSFGFSFODFEPDTMBUFTUXPSLCPYFYQJSBUJPO1MVHJO -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO w 8FCͷͨΊͷ৽͍͠ݴޠ w ͨͩ͠ɺ8FCҎ֎Ͱ׆༻Ͱ͖ΔΑ͏ͳॊೈੑ w +BWB4DSJQUΛஔ͖͑ΔΑ͏ͳͷͰͳ͍ w ผͷݴޠ͔ΒίϯύΠϧ͞ΕΔ w
ߴ͍৴པੑɺߴ͍ύϑΥʔϚϯεΛఏڙͰ͖ΔՄೳੑ ͕͋Δ w Ҏ্લʹ+BWB4DSJQU͕ੜͯ͠Ҏདྷɺϝδϟʔϒ ϥβͰͪΌΜͱαϙʔτ͞ΕΔॳΊͯͷݴޠ w ϙʔλϏϦςΟʹ༏Ε͍ͯͯɺ$ Ͱॻ͔Εͨίʔ υͳͲΛ׆༻͢Δ͜ͱ͕Ͱ͖Δ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO Ϣʔεέʔε w ߴ͍৴པੑɺߴ͍ύϑΥʔϚϯε͕ఏڙ͞ΕΔ͜ͱͰɺ ༷ʑͳϢʔεέʔε8FCͰରԠ͢Δ͜ͱ͕Ͱ͖ΔΑ ͏ʹͳΔ w ಈըฤू w ίʔσοΫ
w Իॲཧ w ΑΓෳࡶͳΞϓϦέʔγϣϯ w FUDʜ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO ڈऔΓΜͩ৽ػೳ w 4PVSDF.BQT w σόοάʹෆՄܽʂ w #SFBLQPJOUͷઃఆՄೳ w 4USFBNJOH$PNQJMBUJPO
w ͜Ε·ͰϞδϡʔϧશମ͕ಡΈࠐ·ΕΔ·Ͱ࣮ ߦΛػ͢Δඞཁ͕͋ͬͨ w μϯϩʔυͱ࣮ߦΛಉ࣌ʹߦ͑ΔΑ͏ʹ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO (async () => { const promise = fetch('./fibonacci.wasm'); const
{ instance } = await WebAssembly.instantiateStreaming(promise); const result = instance.exports.fibonacci(42); document.querySelector('main').textContent = `The Fibonacci is ${result}`; }); 8FC"TTFNCMZJOTUBOUJBUF4USFBNJOH IUUQTEFWFMPQFSNP[JMMBPSHFO64EPDT8FC+BWB4DSJQU3FGFSFODF(MPCBM@0CKFDUT8FC"TTFNCMZJOTUBOUJBUF4USFBNJOH -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO -JGUP⒎DPNQJMFS w 7Ͱىಈ࣌ؒΛߋʹ࠷దԽ͢ΔͨΊɺ-JGUP⒎ͱ͍͏ϕʔ εϥΠϯίϯύΠϥΛ࡞ w 8FC"TTFNCMZͷόΠτίʔυΛड͚औΓɺ͙͢ʹ࣮ߦΛ ։࢝ w ͦͷޙɺ8FC"TTFNCMZNPEVMF.BJOUISFBE͔Βऔ
Γআ͔Εɺ5VSCP'BOʹΑͬͯ͞ΒͳΔ࠷దԽ͕ࢪ͞ΕΔ w ࠷దԽ͕ྃ͢ΔͱɺಛผͳࢦࣔΛग़ͣ͞ͱϗοτ εϫοϓ͞ΕΔ w ͭ·Γʜ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO 8FC"TTFNCMZ5ISFBETͷϝϦοτ w σεΫτοϓʹݶΒͣɺJ04"OESPJEͷͰෳ ͷίΞΛ͕࣋ͭͨΓલ w ௨ৗͷ8FC"QQMJDBUJPOͳΒͭͷίΞͷΈΛ༻͢ Δ w .BJOUISFBEͱ8FC8PSLFSΛ༻ͯ͠ίΞ
w 8FC"TTFNCMZ5ISFBETΛ༻͢Δ͜ͱͰΑΓଟ͘ͷ ίΞΛ׆༻͢Δ͜ͱ͕Ͱ͖Δ w ͷੑೳΛϑϧʹ׆༻͢Δ͜ͱͰɺϢʔβମݧͷ ্͕ظͰ͖Δ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO ௨ৗͷ8PSLFSͱͷҧ͍ w +BWB4DSJQU͔Β௨ৗ࡞͞ΕΔ8PSLFSͰ7ͷΠ ϯελϯε͕8PSLFSͷ͚ͩੜ͞ΕɺϝϞϦ༻ ্͕͕ͬͯ͠·͏ ඇྗͳͰಛʹෆར w 8FC"TTFNCMZ5ISFBET͔Β࡞͢Δ߹ɺ
4IBSFE"SSBZ#V⒎FSΛհͯ͠ϝϞϦঢ়ଶΛڞ༗͢Δͨ ΊߴޮͳՔಇ͕ݟࠐΊΔ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO 4LFUDI6Q w %ϞσϦϯάιϑτΣΞ w %FTLUPQ"QQ .PCJMF J04 "OESPJE ͷڞ௨Ͱ༻
͞Ε͍ͯΔ$ ͷίʔυΛ&NTDSJQUFOͰίϯύΠ ϧͯ͠ྲྀ༻ w ࠷ॳͷҠߦ࡞ۀͰਓͷΤϯδχΞ͔͍͠ͳ͔ͬͨ ͕ɺϲ݄Ͱ࡞ۀΛऴ͑Δ͜ͱ͕Ͱ͖ͨʂ w ಉ࣌ظʹ4VCTDSJQUJPOϞσϧΛެ։ɺϲ݄ͷؒͰސ ٬ϕʔεΛ૿͢͜ͱʹޭ IUUQTXXXTLFUDIVQDPN -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO (PPHMF&BSUI w օ͞Μ͝ଘͷΞϓϦέʔγϣϯ w .VMUJUISFBEͰಈ࡞͢Δ8FC"TTFNCMZΛಋೖ w Ճ͑ͯɺલड़ͷ.VMUJUISFBEʹରԠͨ͠Ϗϧυ͕ $ISPNFͱ'JSFGPYͰಈ࡞͢Δʂ w
4JOHMFUISFBEͳ8FC"TTFNCMZͷ࣮ͱൺֱͯ͠ɺ ฏۉ'14ίϚམͪ KBOL Λఔվળ͢Δ͜ͱʹ ޭͨ͠ IUUQTXXXHPPHMFDPNFBSUI -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO 4PVOEBUJPO w 8FCϕʔεͷ.VTJD4UVEJP w εϜʔζͳૢ࡞ମݧΛ࣮ݱ͢ΔͨΊʹ"VEJP 8PSLMFUT 8FC"TTFNCMZ 4IBSFE"SSBZ#V⒎FSͷ Τοδͳٕज़Λ࠾༻
w .VMUJUISFBEͳ8FC"TTFNCMZ"VEJP.JYJOH &OHJOFͷ෦ద༻ w 4JOHMFUISFBEͷ߹࠶ੜԻ్͕Ε్ΕʹͳΔ ͕ɺ.VMUJUISFBEͷ߹ɺεϜʔζͳ࠶ੜ͕Մೳʹ w $16ར༻ҎԼʹͳͬͨ IUUQTTPVOEBUJPODPN -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO ରࡦͱͯ͠༏ઌʹԠͨ͡λεΫ͚ w λεΫͭʹྨ͞ΕΔ w VTFSCMPDLJOHUBTLT w ࣮ऴྃ·Ͱʹ࣌ؒత੍͕͋Δॲཧ w EFGBVMUUBTLT
w Ϣʔβʹݟ͑Δॲཧ w JEMFUBTLT w Ϣʔβʹݟ͑ͳ͍ॲཧ CBDLVQBOBMZUJDTͳͲ w ͦΕͧΕS"'TFU5JNFPVUSFRVFTU*EMF$BMMCBDLͰͰ͖Δ͚Ͳ TFU5JNFPVUগ͠ෆ҆ఆͳͷͰઐ༻"1*͕ඞཁ w ͬͱঢ়ଶΛίϯτϩʔϧͰ͖ΔΑ͏ʹ͢ΔͨΊʹ"1*ΛՃ͢Δ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO 5BTL8PSLMFU IUUQTHJUIVCDPNEFWFMPQJUUBTLXPSLMFU w ϝοηʔδϕʔεͰͳ͘ɺλεΫϕʔε w "OESPJE J04ͳͲଞͷ1MBUGPSNΛࢀߟʹߟ͑ΒΕͨ w ֤λεΫͷ࿈Λߟྀ͠ɺεϨουΛݡ͘͏͜ͱͰ
UISFBEIPQͷίετΛ࠷খԽ͢Δ w ྫ͑ɺλεΫΛॲཧ͢ΔͷʹUISFBEIPQඞཁͩͬ ͨͷ͕ɺUISFBEIPQͰࡁΉ -
DISPNFEFWTVNNJUCSJFpOHTFTTJPO 8FC8PSLFSTͷ͍ॴ w ͏͖ w ͍ϒϩοΩϯά͕ൃੜͦ͠͏ͳॲཧ w ೖग़ྗͷখ͞ͳॲཧ w 3FRVFTU3FTQPOTFʹै͏߹
w Θͳ͍͖ w %0.ͷґଘ͕͋Δ߹ w ೖྗͷԠॲཧ w খ͞ͳԆͰϨεϙϯεΛฦ͢ඞཁ͕͋Δ߹