Share
Embed
Transcript
95 slides
-
Agenda • ϒϥβͷػೳ • ϒϥβͷΈ • ϨϯμϦϯάΤϯδϯ • JavaScript Τϯδϯ
• ωοτϫʔΫ • σʔλετϨʔδ -
ϒϥβͷػೳ • ΞυϨεόʔʹ͍Εͨ URL Λجʹϖʔδ͕ϨϯμϦϯά͞ΕΔ • ϦϯΫΛΫϦοΫ͢ΔͳͲͷΞΫγϣϯ͕͋Δͱ URL ͕มԽ ͠ɺཤྺʹͨ·Δ
• ΔϘλϯΛԡ͢ͱཤྺΛΕΔ • ਐΉϘλϯΛԡ͢ͱཤྺΛਐΊΒΕΔ • ϦϩʔυϘλϯΛԡ͢ͱ࠶ URL Λߋ৽͢Δ *NBHF -
ϒϥβͷػೳ • ϒϥβͷجຊػೳΛյ͢Α͏ͳΞϓϦέʔγϣϯମݧ͕ѱ ͍ɻ • ͬͨ࣌ʹͱͱ͍ͨεΫϩʔϧҐஔ͡Όͳ͍ॴʹ͞Ε ͨΒɾɾɾɾʁ • εΫϩʔϧ͢ΔࡍʹΨλΨλͯ͠εϜʔεͳૢ࡞͕ग़དྷͳ͔ͬ ͨΒɾɾʁ
• Enter ΩʔͰૹ৴Ͱ͖ͳ͍ϑΥʔϜΛ࡞ͬͯ͠·ͬͨ Βɾɾɾʁ -
ϒϥβͷػೳ • ϒϥβͷجຊػೳΛյ͢Α͏ͳΞϓϦέʔγϣϯମݧ͕ѱ ͍ɻ • ͬͨ࣌ʹͱͱ͍ͨεΫϩʔϧҐஔ͡Όͳ͍ॴʹ͞Ε ͨΒɾɾɾɾʁ • εΫϩʔϧ͢ΔࡍʹΨλΨλͯ͠εϜʔεͳૢ࡞͕ग़དྷͳ͔ͬ ͨΒɾɾʁ
• Enter ΩʔͰૹ৴Ͱ͖ͳ͍ϑΥʔϜΛ࡞ͬͯ͠·ͬͨ Βɾɾɾʁ શ෦ѱ͍ϢʔβʔΤΫεϖϦΤϯε -
ϒϥβͷػೳ • େݪଇ: ΣϒΞϓϦέʔγϣϯϒϥβͷػೳΛ յ͍͚ͯ͠ͳ͍ɻ • յ͢ͱମݧ͕ѱ͍͚ͩ͡Όͳ͍ɻ • ΞΫηγϏϦςΟѱ͘ͳΔɻ •
ηΩϡϦςΟͱ͔ͷอޢػߏಇ͔ͳ͘ͳΔ͔ɻ -
ϒϥβͷػೳ • େݪଇ: ΣϒΞϓϦέʔγϣϯϒϥβͷػೳΛ յ͍͚ͯ͠ͳ͍ɻ • յ͢ͱମݧ͕ѱ͍͚ͩ͡Όͳ͍ɻ • ΞΫηγϏϦςΟѱ͘ͳΔɻ •
ηΩϡϦςΟͱ͔ͷอޢػߏಇ͔ͳ͘ͳΔ͔ɻ ͲΜͳʹྑ͍ΞϓϦͰ͋ͬͯ ϒϥβͷػೳΛյ͢Α͏ͳΞϓϦΘΕͳ͘ͳΔ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH&OHJOF /FUXPSL +BWB4DSJQU &OHJOF 6*#BDLFOE %BUB 4UPSBHF
http://taligarsiel.com/Projects/howbrowserswork1.htm -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH&OHJOF /FUXPSL +BWB4DSJQU &OHJOF 6*#BDLFOE %BUB 4UPSBHF
http://taligarsiel.com/Projects/howbrowserswork1.htm ϒϥβͷΠϯλϑΣʔε ΞυϨεόʔͱ͔ΔϘλϯͱ͔ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH&OHJOF /FUXPSL +BWB4DSJQU &OHJOF 6*#BDLFOE %BUB 4UPSBHF
http://taligarsiel.com/Projects/howbrowserswork1.htm ϨϯμϦϯάΤϯδϯΛૢ࡞͢Δϒϥ βͷ֩ɺσʔλͱௐఀ͢Δ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH&OHJOF /FUXPSL +BWB4DSJQU &OHJOF 6*#BDLFOE %BUB 4UPSBHF
http://taligarsiel.com/Projects/howbrowserswork1.htm ίϯςϯπͷඳըΛߦ͏ɻίϯςϯπ͕ )5.-ͳΒϖʔδΛύʔεͯ͠ϩʔυ͢Δ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH&OHJOF /FUXPSL +BWB4DSJQU &OHJOF 6*#BDLFOE %BUB 4UPSBHF
http://taligarsiel.com/Projects/howbrowserswork1.htm ωοτϫʔΫɺ)551ϦΫΤετͨ͠ Γɺ)5514ͰϦΫΤετͨ͠Γ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH&OHJOF /FUXPSL +BWB4DSJQU &OHJOF 6*#BDLFOE %BUB 4UPSBHF
http://taligarsiel.com/Projects/howbrowserswork1.htm +BWB4DSJQU࣮ߦΤϯδϯWͱ͔ 4QJEFS.POLFZͱ͔+4$ͱ͔ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH&OHJOF /FUXPSL +BWB4DSJQU &OHJOF 6*#BDLFOE %BUB 4UPSBHF
http://taligarsiel.com/Projects/howbrowserswork1.htm JOQVUͷ6*ͳͲɺڞ௨ΟδΣοτ෦ͷ6*Λग़͢ɻ ߹ʹΑͬͯ04ڞ௨ͷͷͷ࣌͋Δ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH&OHJOF /FUXPSL +BWB4DSJQU &OHJOF 6*#BDLFOE %BUB 4UPSBHF
http://taligarsiel.com/Projects/howbrowserswork1.htm σΟεΫʹอଘ͢ΔϨΠϠ $PPLJFͱ͔MPDBMTUPSBHFͱ͔͕֘ -
ϒϥβͷߏ • ͜ͷϚοϓΛུ֓ͱͯ͠಄ʹೖΕ͓͍ͯͯ΄͍͠ɻ • HTML/CSSΛ࣮ߦͯ͠Δॴ͕Ͳ͔͜ • JavaScript Engine͕͔ΕͯΔͱ͔ • ࠷ۙೖͬͨ
Service Worker ͲͷลΓʹҐஔ͢Δͷ͔ʁ • Cookie ͷσʔλΛอଘͯ͠ΔͷͲ͔͜ʁ -
ϨϯμϦϯάΤϯδϯ • ࢦఆ͞ΕͨίϯςϯπΛඳը͢Δͷ • ͜͜Ͱओʹ HTML Λඳը͢Δ࣌ͷྲྀΕͰղ આ͢Δ͕ɺຊདྷ HTML ʹґΒͣɺίϯςϯ
πΛඳը͢Δɻ (SBQIJD *OUFSGBDF 3FOEFS -
ϨϯμϦϯάΤϯδϯ • ࢦఆ͞ΕͨίϯςϯπΛඳը͢Δͷ • ͜͜Ͱओʹ HTML Λඳը͢Δ࣌ͷྲྀΕͰղ આ͢Δ͕ɺຊདྷ HTML ʹґΒͣɺίϯςϯ
πΛඳը͢Δɻ (SBQIJD *OUFSGBDF 3FOEFS ಛʹ͜͜ΛਂງΓ͢Δ -
ϨϯμϦϯάϓϩηε • HTML ͷϨϯμϦϯά "ಈతʹ" ϨϯμϦϯ ά͢Δɻ • JavaScript ϢʔβʔೖྗɺΞχϝʔγϣϯ
ͳͲͰϨϯμϦϯά͕ߋ৽͞ΕΔɻ *OJUJBM3FOEFS ߋ৽ ߋ৽ ߋ৽ ߋ৽ -
ϨϯμϦϯάϓϩηε • ίϯςϯπ͕ಈతʹߋ৽͞ΕΔͱ͍͏͜ͱ͕ Σϒͷಛ • ͦͷͨΊʹ͍͔ͭ͘ͷதؒදݱΛ͍࣋ͬͯΔ IUNM IUNM %0. 4UZMFE
1BSTF 4UZMF -BZPVU 1BJOU -
HTML Parse EJW QIFMMPQ QXPSMEQ EJW 1BSTF %*7 1 5&95
1 5SFF %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 • λάΛωετͯ͠දݱ • ߏͱ͍͏ܗͰσʔλߏͱͯ͠ දݱ͞ΕΔɻ -
DOM %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 •
Document Object Model • ϒϥβͰͷHTMLͷ෦දݱ • Ͱ͋Γɺ͔ͭ JavaScript Ͱૢ࡞Ͱ͖Δσʔλߏ var div = document.body.firstChild; var p2 = div.childNodes[1]; p2.appendChild(document.createElement("span")); +BWB4DSJQU &OHJOF CJOEJOHT -
Style • DOM Λ࡞ͬͨΒͦΕʹ Style Λ ͍ͯͯ͘ • %PDVNFOU )5.-
#PEZ %JW 1 5&95 1 5&95 p { color: red } IFMMP XPSME 4UZMF -
Style • CSS (Cascading Style Sheets) • ηϨΫλΛෳࡶʹࢦఆͰ͖Δ ͪͳΈʹෳࡶͳࢦఆΛ͢Ε͢Δ΄Ͳෳࡶͳܭࢉ͕ඞཁͳͷͰ͍ɻ •
ηϨΫλඃΔ͜ͱ͕͋Δ • ඃͬͨΒৄࡉͰܾ·Δ EJWOPU GPP QOUIPGUZQF O \ DPMPSSFE ^ Q\ DPMPSCMVF ^ -
Style • CSS ৄࡉ (ڧ͍ॱͷྫ) • styleଐੑͰͷࢦఆ • ηϨΫλͷ ID
ͷ • ηϨΫλͷଐੑͷ • ηϨΫλͷཁૉ໊ͷ \^ BCDETQFDJpDJUZ MJ\^ BCDETQFDJpDJUZ MJpSTUMJOF\^ BCDETQFDJpDJUZ VMMJ\^ BCDETQFDJpDJUZ VMPM MJ\^ BCDETQFDJpDJUZ I <SFMVQ>\^ BCDETQFDJpDJUZ VMPMMJSFE\^ BCDETQFDJpDJUZ MJSFEMFWFM\^ BCDETQFDJpDJUZ YZ\^ BCDETQFDJpDJUZ TUZMF BCDETQFDJpDJUZ http://taligarsiel.com/Projects/howbrowserswork1.htm#Specifity -
Style EJWOPU GPP QOUIPGUZQF O \ DPMPSSFE ^ Q\ DPMPSCMVF
^ 1BSTF3VMF 4UZMF3VMFT 4UZMF3VMFT 4UZMF3VMFT $44ύʔε͠ɺελΠϧͷϧʔϧηοτΛ࡞Δɻ -
Style %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 4UZMF3VMFT
4UZMF3VMFT 4UZMF3VMFT %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT -
Style %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 4UZMF3VMFT
4UZMF3VMFT 4UZMF3VMFT %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT ϧʔϧΛ%0.ʹద༻ͯ͠$PNQVUFE4UZMFΛ࡞Δ -
Style %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 $PNQVUFE4UZMFT
$PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMF\ GPOU8FJHIU NBSHJO-FGU PVUMJOF USBOTGPSN CBDLHSPVOE ^ ϑΥϯτഎܠͳͲͷελΠϧใΛ%0.ʹ༩͢Δ -
Layout • ҰͭҰͭͷཁૉελΠϧΛ͍ͬͯͯɺͦ Ε͕Ͳ͜ʹஔ͞ΕΔ͔ɺͲΕ͘Β͍ͷαΠζ ͳͷ͔ɺͱ͍͏ॴͷใ͍࣋ͬͯͳ͍ɻ • HTMLͷߏͱ Style ͷใΛجʹॴͱαΠζ Λܭࢉ͢Δॲཧ͕
Layout • ͔Β࠶ؼతʹḷͬͯ Layout ॲཧΛߦ͏ -
Layout • ͔ΒࢠͲʹ࠶ؼతʹܭࢉΛ ͍ͯ͘͠ • ࢠͲͷߴ͞ɾ෯Λܭࢉͨ͠Β ࢠͲͷྦྷੵ͞Εͨߴ͞ɾ ෯ͱࣗࣗͷߴ͞ɾ෯ʹϚʔ δϯΛՃ͑ͯߴ͞Λܭࢉ͢Δ %PDVNFOU
)5.- #PEZ %JW 1 5&95 1 5&95 ߴ͞ɾ෯Λܭࢉ -
Paint • DOMͷཁૉͷॱ൪Ͱͳ͘ɺ z-index Λ ͬͯޙΖͷཁૉͱલͷཁૉΛೖΕସ͑Δ͜ ͱ͕Ͱ͖Δɻ <div class="yellow"></div> <div
class="green"></div> <style> .yellow { z-index: 2; ... } .green { z-index: 1; ... } </style> -
ಈతͳߋ৽ )5.- %0. 4UZMF -BZPVU EPDVNFOUXSJUF EPDVNFOUHFU&MFNFOU#Z*E FMFNUFYU$POUFOU EPDVNFOUXSJUFࣗײతͰศར͕ͩɺ࣮)5.-͔Βࠩ
͠ସ͑ͯ͠·͏ɺͦͷͨΊɺࠓ·Ͱͷ%0.4UZMF -BZPVUͷྲྀΕ͕Γ͠ʹͳΔɻ͏͖Ͱͳ͍ɻ -
ϨϯμϦϯάΤϯδϯ·ͱΊ • HTMLಈతʹߋ৽͞ΕΔϞσϧ • ಈతʹߋ৽͢ΔͨΊʹதؒදݱͱͯ͠ DOM Λ༻ҙ͓ͯ͠Γɺ JavaScript Ͱߋ৽Ͱ͖Δ •
DOMʹมͨ͠ޙɺ Style Λܭࢉ͠ɺͦͷޙͲͷϙδγϣϯʹཁૉ Λஔ͔͘ͱ͍͏ Layout Λܭࢉ͢Δ • ࠷ޙʹ Paint Ͱલ໘ʹஔ͔͘എ໘ʹஔ͔͘ΛܾΊͯඳը͢Δ • document.write Θͳ͍ -
JavaScript Τϯδϯ • JavaScript Λ࣮ߦ͢ΔΤϯδϯ • ࠷ۙͷΤϯδϯେମ Just In Time
ίϯύΠϥ͕͍ͭ ͓ͯΓɺ୯ͳΔΠϯλϓϦλͰͳ͘ɺ౷ܭతʹঢ়گ ΛݟͯߴԽ͞ΕΔ • ͜͜Ͱུ֓Λղઆ͠ɺΤϯδϯͷؾ࣋ͪΛΔɻ • ͪͳΈʹใ͕ଟ͍ v8 ͷΤϯδϯΛࢀߟʹ͍ͯ͠Δɻ -
JavaScript Τϯδϯ GVODUJPOTVN B C \ SFUVSOB C ^ TVN
<GVODUJPO LFZXPSE > <TVN JEFOUJpFS > < QBSFO > <B JEFOUJpFS > <C JEFOUJpFS > UPLFOJ[F "45 <GVODUJPO LFZXPSE > <TVN JEFOUJpFS > < QBSFO > <B JEFOUJpFS > <C JEFOUJpFS > 1SPHSBN 'VODUJPO%FDMBSBUJPO *EFOUJpFSTVN QBSBNT *EFOUJpFSC *EFOUJpFSB -
JavaScript Τϯδϯ GVODUJPOTVN B C \ SFUVSOB C ^ TVN
<GVODUJPO LFZXPSE > <TVN JEFOUJpFS > < QBSFO > <B JEFOUJpFS > <C JEFOUJpFS > UPLFOJ[F "45 <GVODUJPO LFZXPSE > <TVN JEFOUJpFS > < QBSFO > <B JEFOUJpFS > <C JEFOUJpFS > 1SPHSBN 'VODUJPO%FDMBSBUJPO *EFOUJpFSTVN QBSBNT *EFOUJpFSC *EFOUJpFSB +BWB4DSJQU͜Ε·Ͱͱಉ༷ߏͰද͞ΕΔɻ "CTUSBDU4ZOUBY5SFFͱ͍͏ߏɻ -
ΠϯλʔϓϦλ 1SPHSBN 'VODUJPO%FDMBSBUJPO *EFOUJpFSTVN QBSBNT *EFOUJpFSC *EFOUJpFSB *OUFSQSFUFS &YDBBFDBF!$SFBUF6ONBQQFE"SHVNFOUT YDBBFDBG!G4UBSS
4YDBBFDC!G-EB/BNFE1SPQFSUZS <> <> YDBBFDC!G4UBSS YDBBFDC!C-EB;FSP &YDBBFDC!G5FTU&RVBM4USJDUS <> YDBBFDCC!B+VNQ*G'BMTF<> YDBBFDE! 4YDBBFDCE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDD!G4UBSS YDBBFDD!C-EB;FSP YDBBFDD!G4UBSS &YDBBFDD!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDDB!G4UBSS &YDBBFDDD!BGGG$BMM1SPQFSUZS UIJT S S <> 4YDBBFDE!BB3FUVSO 4YDBBFDE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDE!GC4UBSS 4YDBBFDE!C-EB;FSP &YDBBFDEB!CC5FTU-FTT5IBO0S&RVBMB <> YDBBFDEE!B+VNQ*G'BMTF<> YDBBFDF! 4YDBBFDEG!C-EB;FSP YDBBFDF!4UBSB YDBBFDF!C+VNQ<> YDBBFDG! 4YDBBFDF!GC-EBSS &YDBBFDF!DD5FTU(SFBUFS5IBO0S&RVBMB <> YDBBFDF!B+VNQ*G'BMTF<> YDBBFDFF! "45͔ΒCZUFDPEFʹ্ͨ͠Ͱ࣮ߦ͢Δɻ 3FTVMU -
Just In Time ίϯύΠϥ *OUFSQSFUFS +*5$PNQJMFS &YDBBFDBF!$SFBUF6ONBQQFE"SHVNFOUT YDBBFDBG!G4UBSS 4YDBBFDC!G-EB/BNFE1SPQFSUZS <>
<> YDBBFDC!G4UBSS YDBBFDC!C-EB;FSP &YDBBFDC!G5FTU&RVBM4USJDUS <> YDBBFDCC!B+VNQ*G'BMTF<> YDBBFDE ! 4YDBBFDCE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDD!G4UBSS YDBBFDD!C-EB;FSP YDBBFDD!G4UBSS &YDBBFDD!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDDB!G4UBSS &YDBBFDDD!BGGG$BMM1SPQFSUZS UIJT S S <> 4YDBBFDE!BB3FUVSO 4YDBBFDE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDE!GC4UBSS bytecode Optimized machine code Optimize Deoptimize -
Just In Time ίϯύΠϥ *OUFSQSFUFS +*5$PNQJMFS &YDBBFDBF!$SFBUF6ONBQQFE"SHVNFOUT YDBBFDBG!G4UBSS 4YDBBFDC!G-EB/BNFE1SPQFSUZS <>
<> YDBBFDC!G4UBSS YDBBFDC!C-EB;FSP &YDBBFDC!G5FTU&RVBM4USJDUS <> YDBBFDCC!B+VNQ*G'BMTF<> YDBBFDE ! 4YDBBFDCE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDD!G4UBSS YDBBFDD!C-EB;FSP YDBBFDD!G4UBSS &YDBBFDD!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDDB!G4UBSS &YDBBFDDD!BGGG$BMM1SPQFSUZS UIJT S S <> 4YDBBFDE!BB3FUVSO 4YDBBFDE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDE!GC4UBSS bytecode Optimized machine code Optimize Deoptimize *OUFSQSFUFSͷ࣮ߦ࣌ใΛجʹ+*5$PNQJMFSͰ࠷దԽ͢Δ -
Just In Time ίϯύΠϥ *OUFSQSFUFS +*5$PNQJMFS &YDBBFDBF!$SFBUF6ONBQQFE"SHVNFOUT YDBBFDBG!G4UBSS 4YDBBFDC!G-EB/BNFE1SPQFSUZS <>
<> YDBBFDC!G4UBSS YDBBFDC!C-EB;FSP &YDBBFDC!G5FTU&RVBM4USJDUS <> YDBBFDCC!B+VNQ*G'BMTF<> YDBBFDE ! 4YDBBFDCE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDD!G4UBSS YDBBFDD!C-EB;FSP YDBBFDD!G4UBSS &YDBBFDD!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDDB!G4UBSS &YDBBFDDD!BGGG$BMM1SPQFSUZS UIJT S S <> 4YDBBFDE!BB3FUVSO 4YDBBFDE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDE!GC4UBSS bytecode Optimized machine code Optimize Deoptimize ͠ਪఆ͕֎Ε͍ͯͨΒඇ࠷దԽ͕Δɻ -
Just In Time ίϯύΠϥ GVODUJPOTVN B C \ SFUVSOB C
^ ࣈΛؔ͢ TVN ԿࣈΛ͠߹Θ͓͚ͤͯɺTVNؔͷ ҾࣈɺಛʹJOUFHFSCJUҐ͔͕Θ͔Δ ͦ͏͢Εɺػցޠʹ͢Δ࣌ʹ࠷దԽ͕Ͱ͖Δɻ -
Just In Time ίϯύΠϥ GVODUJPOTVN B C \ SFUVSOB C
^ ࣈΛؔ͢ TVN ԿࣈΛ͠߹Θ͓͚ͤͯɺTVNؔͷ ҾࣈɺಛʹJOUFHFSCJUҐ͔͕Θ͔Δ ͦ͏͢Εɺػցޠʹ͢Δ࣌ʹ࠷దԽ͕Ͱ͖Δɻ ͜Ε͕+VTU*O5JNFίϯύΠϥͰݴ͏ͱ͜Ζͷ࠷దԽॲཧ -
Just In Time ίϯύΠϥ GVODUJPOTVN B C \ SFUVSOB C
^ ࣈΛؔ͢ TVN ԿࣈΛ͠߹Θ͓͚ͤͯɺTVNؔͷ ҾࣈɺಛʹJOUFHFSCJUҐ͔͕Θ͔Δ ͦ͏͢Εɺػցޠʹ͢Δ࣌ʹ࠷దԽ͕Ͱ͖Δɻ GVODUJPOTVN B C \ SFUVSOB C ^ ͍͖ͳΓ͜͜ͰจࣈྻΛ͢ TVN ࠷దԽ͞ΕͨॴͰจࣈྻΛҾʹͨ͠ΒͲ͏ͳ Δ͔ʁ -
Just In Time ίϯύΠϥ GVODUJPOTVN B C \ SFUVSOB C
^ ࣈΛؔ͢ TVN ԿࣈΛ͠߹Θ͓͚ͤͯɺTVNؔͷ ҾࣈɺಛʹJOUFHFSCJUҐ͔͕Θ͔Δ ͦ͏͢Εɺػցޠʹ͢Δ࣌ʹ࠷దԽ͕Ͱ͖Δɻ GVODUJPOTVN B C \ SFUVSOB C ^ ͍͖ͳΓ͜͜ͰจࣈྻΛ͢ TVN ࠷దԽ͞ΕͨॴͰจࣈྻΛҾʹͨ͠ΒͲ͏ͳ Δ͔ʁ CZUFDPEF͔ΒΓ͢͜ͱʹͳΔʢඇ࠷దԽ͕Δʣɻ ͔ͤͬ͘+*5Ͱ࠷దԽͨ͠ॲཧ͕ແବʹͳΔɻ -
JIT Λࡴ͢ཁҼҰཡ (v8) • ܕใͷෆҰக • not int32 (integer ͡Όͳ͔ͬͨ)
• not a string (จࣈྻ͡Όͳ͔ͬͨ) • not an array index (ྻͷఴࣈ͡Ό ͳ͔ͬͨ) • etc https://github.com/v8/v8/blob/master/src/deoptimizer/deoptimize-reason.h • ༧ظͤ͵ૢ࡞ • cow array's elements changed (ίϐʔͨ͠ྻ͕มߋ͞Εͨ) • division by zero (θϩআࢉ) • Out of bounds (ྻͷൣғ͑) • etc -
JIT Λࡴ͢ཁҼҰཡ (v8) • ܕใͷෆҰக • not int32 (integer ͡Όͳ͔ͬͨ)
• not a string (จࣈྻ͡Όͳ͔ͬͨ) • not an array index (ྻͷఴࣈ͡Ό ͳ͔ͬͨ) • etc https://github.com/v8/v8/blob/master/src/deoptimizer/deoptimize-reason.h • ༧ظͤ͵ૢ࡞ • cow array's elements changed (ίϐʔͨ͠ྻ͕มߋ͞Εͨ) • division by zero (θϩআࢉ) • Out of bounds (ྻͷൣғ͑) • etc ֮͑Δඞཁͳ͍͕ɺॻ࣌͘ʹʮԿΛ͠ͳ͍ํ͕͍͍͔ʯΛ ͓͍ͬͯͨ΄͏͕ྑ͍ɻ -
ͦͦ௨৴Λߦ͏ͱʁ • Public IP / PORT ΛΫϥΠΞϯτ͕͍ͬͯͯ • αʔό͕ଓΛ͍ͬͯͯ •
ͦ͜ʹଓΛཁٻ͠ • ଓΛཱ֬ͨ͠ΒɺσʔλͷަΛߦ͏ Public IP / PORT Listen Data Transfer -
͡Ό͋ IP Ͳ͏ͬͯΔͷʁ • IP DNSαʔό͔Βڭ͑ͯΒ͏ɻ • https://example.com ʹΞΫηε͠Α͏ͱͨ͠߹ɺҰΞΫηε͞Εͯͳ͔ͬͨΒ
DNS Lookup (໊લ͔ΒIPΞυϨεΛҾ͘ߦҝ)͕ߦΘΕΔɻ • DNS Lookup ͦͷϦΫΤετઌͷυϝΠϯʹԠͯ͡ൃੜ͢ΔͷͰɺ 3rd party domain ͕ϖʔδʹ͋Δ߹ʢҰ๚͞Εͯͳ͔ͬͨΒʣͦͷ࣌Ͱൃੜ͢ Δɻ EJHFYBNQMFDPN 01514&6%04&$5*0/ &%/4WFSTJPO qBHTVEQ 26&45*0/4&$5*0/ FYBNQMFDPN */ " "/48&34&$5*0/ FYBNQMFDPN */ " -
PORT ʁ • ༗໊ͳϓϩτίϧͷ߹༧Ίܾ·ͬͯΔɻ • http ͳΒ 80 ൪ɺ https
ͳΒ 443 ൪ͱ͍ͬͨ෩ʹɻ • ͜ͷ༧ΊܾΊΒΕͨ PORT ͷ͜ͱΛ well-known PORT ͱݺͿɻ • well-known ͳ PORT ಛݖ͕ඞཁͳέʔεଟ͍ͷͰɺ։ൃ ڥͰ 3000 ൪ͱ͔ʹͯ͠ɺ localhost:3000 Ͱݺͼग़͢͜ͱ ଟ͍ɻ -
ଓΛཱ֬ͱ͍͏ͷʁ • (؆ུԽͷͨΊ) TCP Λϕʔεʹ͢ͱɺ֘ͷαʔόʹ͍͖ͳ Γଓ͢ΔͷͰͳ͘ɺ3ճͷଓ֬ೝΛܦͯଓ͢Δɻ • ͜ͷଓ֬ೝͷ͜ͱΛ 3 way
handshake ͱݺͿɻ ͭͳ͛ΔΑʔ (SYN) ͍͍Αʔ ͬͪͭ͜ͳ͛ΔΑʔ(SYN-ACK) ͡Ό͋ͭͳ͙Ͷʔ (ACK) -
͡Ό͋ࢲͷ伴ͱ߹Θͤͯ͜ΕͰ͠·͠ΐ͏ɻ (Client Certificate) ଓΛཱ֬ͱ͍͏ͷʁ • HTTP ͳΒ͜ΕͰܨ͕Δ͕ɺ࠷ۙͷେମͷWebαʔό HTTPS ͳͷͰɺ͜Ε͚ͩͰܨ͕Βͳ͍ɻ҉߸ԽͷͨΊͷΓऔΓ͕ߋ ʹߦΘΕΔɻ(※؆ུԽ͍ͯ͠ΔͨΊɺਖ਼֬Ͱͳ͍)
ΑΖ͓͘͠ئ͍͍ͨ͠·͢ɻ(Client Hello) ͪ͜Βͦ͜ΑΖ͓͘͠Ͷ͕͍͠·͢ɻ (Server Hello) Θͨ͜͠͏͍͏ͷͰ͢ɻ (Server Certificate) ͜͏͍͏伴Ͱͤ·͢ (Server Key Exchange) Θͨ͜͠͏͍͏ͷͰ͢ɻ(Client Certificate) -
͡Ό͋ࢲͷ伴ͱ߹Θͤͯ͜ΕͰ͠·͠ΐ͏ɻ (Client Certificate) ଓΛཱ֬ͱ͍͏ͷʁ • HTTP ͳΒ͜ΕͰܨ͕Δ͕ɺ࠷ۙͷେମͷWebαʔό HTTPS ͳͷͰɺ͜Ε͚ͩͰܨ͕Βͳ͍ɻ҉߸ԽͷͨΊͷΓऔΓ͕ߋ ʹߦΘΕΔɻ(※؆ུԽ͍ͯ͠ΔͨΊɺਖ਼֬Ͱͳ͍)
ΑΖ͓͘͠ئ͍͍ͨ͠·͢ɻ(Client Hello) ͪ͜Βͦ͜ΑΖ͓͘͠Ͷ͕͍͠·͢ɻ (Server Hello) Θͨ͜͠͏͍͏ͷͰ͢ɻ (Server Certificate) ͜͏͍͏伴Ͱͤ·͢ (Server Key Exchange) Θͨ͜͠͏͍͏ͷͰ͢ɻ(Client Certificate) )5514௨৴5$1ͷΓऔΓͷޙͰ҉߸ԽͷͨΊͷऔΓܾ ΊΛ͢Δεςοϓ͕͋ΔɻͦΕΛܦͯଓ͞ΕΔɻ -
ؓٳ TLS/1.3 • TLS 1.3 Ͱ࠷ॳͷଓ࣌ʹϥϯυτϦοϓΛݮΒ͢ࢼΈΛ͍ͯ͠Δɻ • 0-RTT ͱݺΕΔΈͰ͍͖ͳΓ Client
͕ Hello Λඈͯ͠σʔλΛ ૹΔ͜ͱՄೳʹɻ Making the web faster with HTTP/3 by kazuho https://vimeo.com/485450984 -
σʔλͷΓऔΓ • ଓཱ͕֬͞Εͨޙ HTTP ϓϩτίϧʹΑΔσʔλͷΓऔΓΛߦ͏ɻ • HTTP جຊతʹϦΫΤετ / ϨεϙϯεͰͷΓऔΓ͕ߦΘΕΔɻ
• HTTP ϦΫΤετʹϦΫΤετߦͱϔομʔͱݺΕΔϝλใͱϘσΟ ͱݺΕΔίϯςϯτใؚ͕·ΕΔɻ(※ ؆ུԽͷͨΊHTTP/1.1ͷղઆ) • 1045JOEFYIUNM)551 BDDFQUUFYUIUNM BDDFQUFODPEJOHH[JQ EFqBUF CS BDDFQUMBOHVBHFFO64 FOR KBR DBDIFDPOUSPMOPDBDIF DPPLJFGPPCBSCB[ GPPCBSIPHFGVHB ϦΫΤετߦ ϦΫΤετϔομʔ ϦΫΤετϘσΟ σʔλ༰ -
σʔλͷΓऔΓ • ϦΫΤετΛड͚औͬͨΒαʔόϨεϙϯεʢԠʣΛฦ͢ • HTTP ϨεϙϯεʹεςʔλεΛද͢ใͱϨεϙϯεϔομ ʢϝλσʔλʣɺϨεϙϯεϘσΟʢ༰ʣؚ͕·ΕΔ )5510, "HF $BDIF$POUSPMNBYBHF
$POUFOU5ZQFUFYUIUNMDIBSTFU65' %BUF.PO "QS(.5 $POUFOU-FOHUI EPDUZQFIUNM IUNM IFBE εςʔλεߦ Ϩεϙϯεϔομ ϨεϙϯεϘσΟ -
4FSWFS GET /main.css GET /main.js GET /image0.png σʔλͷΓऔΓ GET /index.html
200 OK 200 OK 404 Not Found 304 Not Modified -
4FSWFS GET /main.css GET /main.js GET /image0.png σʔλͷΓऔΓ GET /index.html
200 OK 200 OK 404 Not Found 304 Not Modified )551্ͰσʔλͷΓऔΓ͕ߦΘΕɺͦΕ͕ϨϯμϦϯάϓ ϩηε+4Τϯδϯ͕࣮ߦ͞ΕΔϑΣʔζΛܦͯϖʔδ͕ग़Δ -
σʔλͷΓऔΓ: HTTP/3 • HTTP/2 Ͱଓίετͷݮ͕Ͱ͖͕ͨ͋Δɻ • ωοτϫʔΫଓ͕ෆ҆ఆͳ߹ TCP ଓʹΑΓɺͯ͢ͷίωΫ γϣϯ͕ղܾ·Ͱʹͨ͞ΕΔέʔε͕༗Δɻཁύέϩεʹऑ͍ɻ
• 4FSWFS 5$1ͷϨΠϠͰෆ߹͕͋Δͱෆ߹͕గਖ਼͞Ε Δ·Ͱશମ͕ϒϩοΫ͞ΕΔɻ -
TCP͓͞Β͍ • TCP ৴པੑ͕ߴ͍ϓϩτίϧ • ύέϩε࣌ͷ࠶ૹ੍ޚॱং౸ୡ੍ޚͳͲɺసૹ࣌ͷΛղ ܾͯ͘͠ΕΔɻ 4FSWFS ) &
- "DL & "DL͕དྷ ͳ͍ ࠶ૹ͢Δ "DL ͕དྷ͚ͨͲͦΕ ·Ͱड৴ͨ͠ͷ ഁغ͢ΔͶɻ - ͔Β ͏Ұ࠶ -
HTTP/3 • UDP ্ʹϓϩτίϧΛ࡞͍ͬͯΔ • TCPͷޡΓగਖ਼ͳͲͷΈΛࣗͨͪͷϨΠϠ্Ͱ࠶࣮ 4FSWFS ) & -
͕དྷͯͳ͍Α ̐& ඞཁͳ ͷͷΈ ࠶ૹ Λͨ͠· ·͕དྷͨ͜ ͱʹ͢Δ -
Cache Storage • ϨεϙϯεΛΩϟογϡ͢ΔΈ 4FSWFS GET /main.css GET /main.js GET
/image0.png GET /index.html 200 OK 200 OK 404 Not Found 304 Not Modified Ұճμϯϩʔυͨ͠ϑΝΠϧωοτϫʔΫ͔ΒಡΈࠐΈͨ ͘ͳ͍ɻ࠶ར༻͍ͨ͠ɻ -
Cache Storage • αʔόଆ͕ HTTP ϨεϙϯεϔομʹΩϟογϡͱ͠ ͯอଘͯ͠ྑ͍͔Ͳ͏͔/Ωϟογϡ༗ޮظؒΛࣔͤ Ωϟογϡ͕༗ޮʹͳΔɻ • Cache-Control
/ ETag ͱ͍ͬͨΩϟογϡ༻ͷϔομ Λ׆༻͢Δɻ $BDIF$POUSPMNBYBHFඵؒɺΫϥΠΞϯτͷ$BDIFͱ ͯ͠༗ޮ &UBH JEFOUσʔλͷࣝผՄೳͳɺ&UBH͕มΘͬͯ ͍ͳ͍͔Ͳ͏͔Λαʔόʹ͍߹ΘͤͯมΘ͍ͬͯͳ͔ͬͨΒΩϟογϡ͕ ΘΕΔɻมΘ͍ͬͯͨΒ࠶μϯϩʔυ -
Cookie Storage • ΫϥΠΞϯτͷσʔλͱͯ͠อଘ͞Εɺϒϥβ͔Β αʔόʹຖճϦΫΤετ͕ૹ৴͞ΕΔɻ • ओʹҎԼͷΑ͏ͳ༻్ͰΘΕΔɻ • ηογϣϯཧʢϩάΠϯɺγϣοϐϯάΧʔτͳͲʣ •
ύʔιφϥΠζʢϢʔβઃఆɺςʔϚͳͲʣ • τϥοΩϯάʢϢʔβʔͷߦಈهੳʣ -
Cookie Storage • Ϩεϙϯεϔομʹ Set-Cookie ͔Β࢝·ΔσʔλΛೖ ΕΔ͜ͱͰอଘͤ͞Δ͜ͱ͕Ͱ͖Δɻ • ࣍ճҎ߱ͷϦΫΤετͰͦͷ Cookie
͕αʔόʹૹΒ ΕΔɻ 4FSWFS Set-Cookie: id=1; Cookie: id=1; -
Cookie Storage • Cookie Λͬͯྫ͑ϩάΠϯޭ࣌ʹηογϣϯID Λ༩͢Δɻ • ࣍ճҎ߱ηογϣϯID͕༗ޮ͔Ͳ͏͔Λ֬ೝ͢Ε ϩάΠϯ͍ͯ͠Δ͔Ͳ͏͔ΛαʔόଆͰผͰ͖Δɻ •
ͦͷࡍʹ Expires MaxAge ଐੑΛ͍͑ͭ·Ͱอ ࣋ͤ͞Δ͔ࢦఆͰ͖Δɻ -
Cookie Storage id pass 4FSWFS GET / 302 Redirect GET
/login 200 OK POST /login id=foo&pass=xxx 302 Redirect Set-Cookie: session=xxx GET / cookie: session=xxx -
Cookie Storage id pass 4FSWFS GET / 302 Redirect GET
/login 200 OK POST /login id=foo&pass=xxx 302 Redirect Set-Cookie: session=xxx GET / cookie: session=xxx 4FTTJPO$PPLJFΛ࡞Δ·ͰͷྲྀΕ -
·ͱΊ • ϒϥβͷػೳ • ϒϥβͷߏ • ϨϯμϦϯάͷΈ • JavaScript ΤϯδϯͷΈ
• ωοτϫʔΫͷΈ • σʔλετϨʔδͷΈ