東京Node学園祭2016で話したブッキングテーブルのやつ
3FBDUXJUI3FEVYʹΑΔେن༻αʔϏεͷ։ൃ౦ژ/PEFֶԂࡇ݄٢ాঘ߂ϦΫϧʔτςΫϊϩδʔζϦΫϧʔτϥΠϑελΠϧ
View Slide
ϒοΩϯάςʔϒϧIUUQTCPPLJOHUBCMFKQҿ৯ళͷ༧ʹಛԽͨ͠αʔϏεݕࡧ݁Ռʹදࣔ͞Εͨళඞͣࠓ༧Ͱ͖Δڝ߹ΑΓܝࡌళฮ͕ѹతʹଟ͍ (౦ژ͚ͩͰ13000݅Ҏ্)
#SPXTFS8൛ͷΞʔΩςΫνϟ Ұ෦4FSWFS#''4FSWFS#''#SPXTFSTFTTJPOEBUBTFTTJPOEBUBྲྀೖ࣌4FSWFSଆͰ443 4FSWFS4JEF3FOEFSJOHͦͷޙϒϥβͰ41" 4JOHMF1BHF"QQMJDBUJPOͱͯ͠ಈ࡞6OJWFSTBM *TPNPSQIJD+4ͳ8ΞϓϦέʔγϣϯ"1*"1*"1*
ຊͷ༰React with ReduxͰͷSPA + SSRͷ࡞Γํ"·ͬͨͱ͜ΖͳͲΛڞ༗ 3FBDU3FEVYͱ ࣦഊ͠ͳ͍ͨΊʹ͓͍֮͑ͯͯཉ͍͠બ 5SBOTJUJPO $PEF4QMJUUJOH 4FSWFS4JEF3FOEFSJOH
3FBDU3FEVYͱ
3FBDUͱ3FBDU$PNQPOFOUΛΈ߹Θͤͯ࡞Δίϯϙʔωϯτࢤͷ'8࣮͢ΔͷԾ%0.ʹର͢ΔมߋͰɺ࣮%0.ͷߋ৽3FBDUͷதͰߦΘΕΔ$PNQPOFOUSFOEFS SFOEFSϢʔβBDUJPOʹΑΓมߋ৽$PNQPOFOU5SFFݱࡏͷ$PNQPOFOU5SFFࠩൺֱ)5.-ࠩө$PNQPOFOUJOQVUDMBTT/BNFl&SSPSzJOQVUDMBTT/BNFlz3FBDU%[email protected]/PEFTFU"UUSCVUF bDMBTT` `&SSPS`
3FEVYͱ41"ͰTUBUFͷཧΛ༰қʹ͢ΔͨΊͷϑϨʔϜϫʔΫͰ3FBDU͡Όͳͯ͑͘ΔHMPCBMͳ୯ҰͷTUBUFΛTVCTDSJCFͯ͠มߋΛݕ͢ΔํͷσʔλϑϩʔʹͳΔΑ͏ʹઃܭ͞Ε͍ͯΔ3FBDUXJUI3FEVY3FBDUTUPSFTUBUF3FEVDFST"DUJPOTEJTQBUDIQVCTVCQVCTVCTFU4UBUFTFU4UBUFTFU4UBUF
3FBDUXJUI3FEVY3FBDU$PNQPOFOU͔ΒTUPSFΛTVCTDSJCF͢ΔʹSFBDUSFEVYͷDPOOFDUΛ͏DPOOFDUͷୈҰҾ NBQ4UBUF5P1SPQTͰTUBUFΛड͚औͬͯQSPQTʹม͢Δ4UPSF3FBDU$PNQPOFOUDPOOFDUΛͬͯTVCTDSJCFimport { connect } from ‘react-redux';export default compose(connect(state => ({return state.searchAreaɹɹɹɹɹɹɹɹ}),bindActionCreators(Actions)))(class AreaTopContainer extendsDPOOFDUͷୈҰҾ NBQ4UBUF5P1SPQTͰ$PNQPOFOU͕ར༻͢ΔTUBUF֊Λࢦఆ͢ΔTUBUF\BSFB5PQ\ʜ^ TFBSDI"SFB\ʜ^ SFTUBVSBOUT\ʜ^ ʜ^
$PNQPOFOUTTUPSF4PGUXBSF$PNQPOFOUT"1*"1*ɾɾɾ4FSWJDFT"DUJPO$SFBUPSTSFEVYNJEEMFXBSF$POUBJOFS$PNQPOFOUT1SFTFOUBUJPOBM$PNQPOFOUTSFBDUSPVUFSSFEVDFSTEJTQBUDIXSBQQFEEJTQBUDISBXDVSSFOU4UBUFMJTUFOFSTSPVUFTTDTT4FSWFS0OMZ4FSWFSBOE$MJFOUɾɾɾɾɾɾ։ൃ͕ඞཁSFBDUSFEVY͕ఏڙDMJFOUͷ࣌ʹSFEVYͷ)0$ͷDPNQPOFOU%JE.PVOUͰTUPSFͷMJTUFOFSTʹొᶃᶄ ᶅᶆ"DUJPOT\UZQF QBZMPBE^ᶇᶈ9)3PSMPDBMDBMMᶉOFYUᶊᶋᶌTFSWFSͷ࣌MJTUFOFSTʹొ͞Ε͍ͯͳ͍ͷͰɺશBDUJPOͷEJTQBUDI͕ऴͬͨΒ443͢ΔॲཧΛॻ͘ඞཁ͕͋Δ
3FBDUTUPSFTUBUFมߋ͔ΒSFOEFS·ͰTUPSFͷMJTUFOFSTʹݱࡏදࣔதDPOOFDUதͷ$PNQPOFOU͕ొ͞Ε͍ͯΔEJTQBUDIຖʹશMJTUFOFSTʹରͯ͠NBQ4UBUF5P1SPQT·Ͱඞ࣮ͣߦNBQ4UBUF5P1SPQTͷ݁ՌͱݱࡏͷQSPQTͰ͕ࠩ͋ΕSFOEFSࠩҟͷൺֱTIBMMPX&RVBMTͳͷͰաSFOEFSSFOEFS͞Εͳ͍έʔεʹҙ$POUBJOFS$PNQPOFOUTSFEVDFSTEJTQBUDISBXMJTUFOFST$POOFDU˞SFBDUSFEVY͕ఏڙTIPVME$PNQPOFOU6QEBUFIBOEMF$IBOHFDVSSFOU4UBUF VQEBUF4UBUF1SPQT*G/FFEFETFU4UBUFᶃᶄᶅᶆᶇᶈᶆͷ݁Ռࠩҟ͕͋ΕUSVFʹͳΓ$PNQPOFOU͕SFOEFS͞ΕΔNBQ4UBUF5P1SPQTͷ࣮ߦ݁ՌͱݱࡏQSPQTͷൺֱ3FBDU3FDPODJMFSNBQ4UBUFUP1SPQTݱࡏͷTUBUFͱBDUJPOΛड͚औΓ৽TUBUFΛฦ͢SFEVYNJEEMFXBSFɾɾɾɾɾɾ։ൃ͕ඞཁSFBDUSFEVY͕ఏڙ
ࣦഊ͠ͳ͍ͨΊʹ͓͍֮͑ͯͯཉ͍͠બ
5SBOTJUJPO
ը໘ભҠ࣌ʹى͍ͬͯ͜Δ͜ͱݕࡧϘλϯ࣮ߦ63-͕มΘΔUPLZPMJTU-JOLQVTIͰભҠ 63-มߋUPLZPMJTUͷ3PVUFͷPO&OUFSUPLZPMJTUͷ3PVUFͷHFU$PNQPOFOUSPVUFSNJEEMFXBSFdSFOEFSݱࡏͷը໘DPNQPOFOU8JMM6ONPVOU࣍ͷը໘DPNQPOFOU8JMM.PVOU࣍ͷը໘SFOEFSϓϩάϨεόʔग़͢ͳͲUPLZPMJTU-0$"5*0/@$)"/(&"DUJPO͕EJTQBUDIೝূೝՄνΣοΫͳͲΛ࣮ࢪඞཁʹԠͯ͡ϩάΠϯը໘ʹඈ͢ͳͲεΫϩʔϧҐஔΛ෮ݩͨ͠Γ͢Δ࣍ͷը໘දࣔUPLZPMJTU࣍ͷը໘DPNQPOFOU%JE.PVOUSPVUFSNJEEMFXBSFDPNQPOFOU%JE6QEBUFੳϩάͷૹ৴ͳͲ3PVUFS$POUFYUdSFOEFS͜͜ͰTUBUFมߋՄ දࣔதͷDPNQPOFOUͷTUBUFมߋؾΛ͚ͭΔը໘ભҠ࣌ͷσʔλݕࡧׂͨ͠KBWBTDSJQUͷ EPOXMPBEͳͲ
PO&OUFSSFQMBDF4UBUFΛ͏PO&OUFSͷλΠϛϯάͰ63-͕ΓସΘ͍ͬͯΔͨΊQVTIͩͱཤྺ͕Δݕࡧը໘ ϩάΠϯ ༧ೖྗUPLZPMJTU SFTFSWBUJPO MPHJO SFTFSWBUJPOݕࡧը໘༧ೖྗݕࡧը໘ ϩάΠϯ ༧ೖྗUPLZPMJTU SFTFSWBUJPO MPHJO SFTFSWBUJPOݕࡧը໘QVTISFQMBDFPO&OUFSͰQVTIͨ͠߹PO&OUFSͰSFQMBDFͨ͠߹ը໘ભҠϒϥβόοΫ QPQ4UBUF࠶PO&OUFS͕࣮ߦ͞ΕΔ0QFO*%$POOFDUͳͲͰผυϝΠϯͷϩάΠϯը໘ʹભҠ͢Δ߹ҙDMJFOUଆͰIJTUPSZ"1*ͷSFQMBDFͰͳ͘XJOEPXMPDBUJPOSFQMBDFΛ͏TFSWFSଆͰϦμΠϨΫτΛ͏
SPVUFSNJEEMFXBSFͷEBUBGFUDIઓུࢀߟɿSFEVYBTZODMPBEFSSPVUFSNJEEMFXBSF$POUBJOFS$PNQPOFOUTUPSF3PVUFS$POUFYUEJTQBUDI FOEBDUJPOEJTQBUDI CFHJOBDUJPOEJTQBUDI EBUBGFUDITIPVME$PNQPOFOU 6QEBUF3FBDU3FDPODJMFSSFOEFSDPNQPOFOU 8JMM3FDFJWF1SPQT SFOEFSର$PNQPOFOU͔ΒEBUBGFUDIॲཧநग़GBMTFUSVFMPBEJOHUSVFMPBEJOHGBMTFSFOEFSSFOEFSGBMTFGBMTFશEBUBGFUDI͕ऴΔ·Ͱ3PVUFS$POUFYUͷSFOEFSΛͨͤΔEBUBGFUDIͷ։࢝ɺऴྃ࣌ʹΠϕϯτ͕ൃߦ͓ͯ͘͠ͱ͍͍EJTQBUDI EBUBGFUDI/
ը໘ભҠ࣌ͷσʔλݕࡧΛͲ͜ͰΔ͔SPVUFSNJEEMFXBSF ϥΠϑαΠΫϧΠϕϯτը໘ભҠQBUI͕มΘΔ߹ ˓ ˓RVFSZTUSJOH͚͕ͩมΘΔ߹ ˓˓ɿDPNQPOFOU8JMM3FDFJWF1SPQTͳͲRVFSZTUSJOHมΘΒͳ͍߹ ˓˚ɿը໘ભҠͱผͷBDUJPOͰ࣮͢ΔͳͲͰରԠEBUBGFUDIதͷϩʔσΟϯάදࣔ ˓ ˓EBUBGFUDIதʹݩͷը໘ͷίϯςϯπ͍ͨ͠߹˓ºɿDPNQPOFOU͕ΓସΘΔ߹ɺ લը໘͕VONPVOU͞ΕͯΔͷͰਏ͍લճද͍ࣔͯͨ࣌͠ͷݹ͍ใΛग़͞ͳ͍Α͏ʹ͢Δ˓˚ɿݟ্੍ͨޚͰ͖ͯճͷSFOEFS࣮ߦ ੳϩάૹ৴Ͱ՝ʣ443SFOEFSલͷTUBUFߏங˓ɿSFBDUSPVUFSͰܾఆͨ͠ DPNQPOFOU͔Βൈ͍࣮ͯߦ˓ɿSFBDUSPVUFSͰܾఆͨ͠ DPNQPOFOU͔Βൈ͍࣮ͯߦ443ޙͷΫϥΠΞϯτଆͰͷ ࣮ߦ੍ޚ˓ɿSPVUFSNJEEMFXBSFͰ443༗ແ֬ೝ˓ɿ$PNQPOFOUຖʹ443༗ແ֬ೝ443தͷEJTQBUDIࢭ˓ɿ443࣌SPVUFSNJEEMFXBSFະ༻˓ɿ*OJUJBMEBUBGFUDIDPNQPOFOU%JE.PVOUͰ࣮͢ΔͳͲੜ࢈ੑ [email protected]ͷ༗ແ ˓ ʁඋߟ ը໘ભҠͷ͚࣮࣌ͩߦը໘ભҠҎ֎ͷ ༷ʑͳλΠϛϯάͰ࣮ߦ͞ΕΔ
J1IPOFͷը໘εϫΠϓͰͷΔਐΉJ1IPOFͰը໘εϫΠϓͯ͠ΔͱҰॠΔલͷը໘͕ͪΒͭ͘͜ͱ͕͋ΔQPQ4UBUF࣌ʹ3PVUFS$POUFYUͷSFOEFSΛࢭΊ͍ͯΔͱൃੜը໘εϫΠϓͨ͠ॠؒ·ͩΓݩͷը໘͕VONPVOU͞Ε͍ͯͳ͍ͨΊͬͨॠؒॠళฮৄࡉ͕දࣔεϫΠϓͰτοϓը໘ళฮը໘දࣔத τοϓදࣔ˞ը໘εϫΠϓ͡Όͳͯ͘௨ৗͷϒϥβόοΫͰൃੜ͠ͳ͍ճආࡦQVTI࣌ʹEBUBGFUDIͨ݁͠ՌΛϒϥβʹΩϟογϡ͓ͯ͘͠QPQ࣌ͷEBUBGFUDIΩϟογϡΛͬͯͬ͞͞ͱVONPVOU·Ͱ࣋ͬͯ͘
5SBOTJUJPOཁͲ͔͜Λ͢ͱͲ͔͕͜ಈ͔ͳ͘ͳΔɺ͕ى͜Γ͍͢ಛʹSFEVYHMPCBMTUBUFͰݹ͍ใ͕͍ͬͯΔͷͰҙεϚϗґଘͷڍಈෆ৹͕݁ߏ͋ΔͷͰ࠷ॳ͔Β࣮ػ֬ೝΛ
$PEF4QMJUUJOH
.POPMJUIJD+BWB4DSJQUXFCQBDLͰϏϧυ͢Δ࣌ʹϧʔςΟϯά͔ΒҶͮΔࣜʹશNPEVMFࢀরϒοΩϯάςʔϒϧͩͱNJOJGZޙͰ.#͘Β͍SPVUFTKT$PVQPOKT"SFB5PQKTɾɾɾNBJO\IBTI^KTFOUSZ PVUQVUJNQPSUDMJFOUKTSFBDURS-B[Z-PBEKTɾɾɾ
ࢦ͢ܗ.POPMJUIJD+BWBTDSJQUNBJOKTSEQBSUZWFOEPSKTBQQDPNNPONBJOKTXFCQBDL+TPOQDIVOLNBOJGFTUKTBQQBQQKTBQQ/BQQ/KT#FGPSF "GUFSมߋՕॴҎ֎KTͷIBTIΛม͑ͣʹϒϥβΩϟογϡΛ࠷େݶ׆༻มߋ සଟগϑΝΠϧ αΠζখେ
4UFQ.POPMJUIJD+BWBTDSJQUNBJOKTXFCQBDL+TPOQDIVOLNBOJGFTUKTBQQBQQKTBQQ/BQQ/KT#FGPSF "GUFS·ͣը໘͝ͱͷKTΛׂ͢ΔBQQDPNNPOSEQBSUZNBJOKT
ը໘ຖͷ+4ׂ{require.ensure([], function (require) {cb(null, require(‘Componentͷύε’).default);},’jsͷϑΝΠϧ໊’);}} />SFBDUSPVUFSͱXFCQBDLͷSFRVJSFFOTVSFΛΈ߹Θ࣮ͤͯݱՄೳSFRVJSFFOTVSFΛίʔυʹهࡌͯ͠Ϗϧυ͢ΔͱKTׂ͕͞ΕΔ3PVUFͷHFU$PNQPOFOUͰهࡌ͢Δ͜ͱͰը໘ຖʹׂՄ#FGPSF"GUFSplugins: [new CommonsChunkPlugin(‘chunkmanifest’,'chunkmanifest-[chunkhash].js', 2),],ϧʔςΟϯάఆׂٛͨ͠KTͷಈతϩʔυͷઃఆ
ը໘ભҠ࣌ͷ+4μϯϩʔυׂͨ͠+4Λ443࣌ʹग़ྗ͢ΔIUNMͷTDSJQUʹؚΊΔͱɺ443ޙʹμϯϩʔυ͢ΔؚΊͳ͍ͱɺը໘ભҠ࣌ʹμϯϩʔυ͢ΔϢʔβૢ࡞#SPXTFS 4FSWFSDIVOLNBOJGFTUʜKTऔಘ#ʜKTऔಘ"ʜKTऔಘ#ը໘ʹભҠHFU$PNQPOFOU࣌4FSWFS4JEF3FOEFSJOH"ը໘ʹྲྀೖNBJOʜKTऔಘIUNMTDSJQUTSDDIVOLNBOJGFTUʜKTTDSJQUTSDNBJOʜKTTDSJQTSD"ʜKT
4DSJQU-PBE&SSPS{require.ensure([], function (require) {cb(null, require(‘Componentͷύε’).default);}, function () {// reload if script loading failedwindow.location.reload();}, ’jsͷϑΝΠϧ໊’);}}>ૉͷXFCQBDLYܥͩͱSFRVJSFFOTVSFͷTDSJQUMPBEFSSPSΛर͑ͳ͍͜ͷ࣌SFRVJSFFOTVSFͷDBMMCBDL͕࣮ߦ͞Εͳ͍ͷͰը໘ભҠͤͣʹఀࢭSFRVJSFFOTVSFFSSPSIBOEMFSΛͬͯΤϥʔϋϯυϦϯάՄೳ
݁Ռ.POPMJUIJD+BWBTDSJQUNBJOKTBQQDPNNPOSEQBSUZNBJOKTBQQBQQKTBQQ/BQQ/KT#FGPSF "GUFSXFCQBDL+TPOQDIVOLNBOJGFTUKTΓSEQBSUZͱΞϓϦέʔγϣϯͷڞ௨NPEVMFͷׂ
XFQBDLͷFOUSZʹKTͷΤϯτϦϙΠϯτΛͦΕͧΕॻ͘entry: {main: [‘./src/client/' + device + ‘/client.js’],vendor: [‘react’,’redux’,’react-router’,’fetchr’,… ]}plugins: [… new OccurrenceOrderPlugin(true),new CommonsChunkPlugin('vendor', ‘vendor-[chunkhash].js', 2), new CommonsChunkPlugin(‘chunkmanifest','chunkmanifest-[chunkhash].js', 2),…],SEQBSUZͷׂSFBDUɾɾɾ DMJFOUKTSPVUFTKTWFOEPS \IBTI^KTNBJO \IBTI^KT
XFCQBDLͰNPEVMFҰͭҰͭʹJOEFY͕ৼΒΕΔNPEVMF͕Ұͭ૿͑ΔͱશମͷJOEFY͕มΘΔͨΊશKTͷIBTI͕มΘΓ͏Δ!!!!!!!!0DDVSFODF0SEFS1MVHJO USVFΛ͏ͱɺFOUSZʹهࡌͷKT͕͏NPEVMFΛ༏ઌͨͩ͠FOUSZʹهࡌͨ͠KT͕͏NPEVMF͕૿͑ͨΒɺશIBTI͕มΘΓ͏Δྫ͑NBJOͰ͏NPEVMFՃͨ͠ΒWFOEPSมΘΔϞδϡʔϧ*%ͷJOEFY NPEVMF SFBDU SFEVY GFUDIS IJTUPSZWFOEPSKT WFOEPSKTJOEFY NPEVMF SFBDU SFEVY GFUDIS IJTUPSZBSFB5PQKTʹ NPEVMFՃ
8FCQBDL$PNQJMBUJPOXFCQBDLͰ$PNQJMF࣌ʹɺϑΣʔζʹରԠͨ͠ϓϥάΠϯΛ࣮ߦ͍ͯ͠ΔBQQMZ.PEVMFTͰNPEVMFͷ*%͕ܾ·ΓBQQMZ$IVOL*ETͰKTͷ*%͕ܾ·ΔBQQMZ.PEVMF*ETͷલʹNPEVMFΛιʔτ͢ΔϓϥάΠϯΛ࡞੍ͬͯޚՄೳ$PNQJMBUJPOMJCXFCQBDLKT 5BQBCMFʜPQUJNJ[FNPEVMFPSEFSCFGPSFNPEVMFJETBQQMZ.PEVMF*ETʜPQUJNJ[FNPEVMFPSEFSCFGPSFNPEVMFJETBQQMZ$IVOL*ET0DDVSSFODF 0SEFS1MVHJOTPSU NPEVMFTTPSU DIVOLT
ࢀߟɿQMVHJOΛࣗ࡞ͯ͠ΈΔfunction OptimizeModulerOrderPlugin(entryPriority) { this.entryPriority = entryPriority; } OptimizeModulerOrderPlugin.prototype.apply = function(compiler) { var ep = this.entryPriority; compiler.plugin("compilation", function(compilation) { compilation.plugin("optimize-module-order", function(modules) { modules.sort(function(a, b) { var achunk = a.chunks.length === 1 ? a.chunks[0].name : null; var bchunk = b.chunks.length === 1 ? b.chunks[0].name : null; if(!achunk && !bchunk) return 0;for(var i = 0; i < ep.length; i++){ if(achunk === ep[i] && bchunk !== ep[i]) return -1;if(bchunk === ep[i] && achunk !== ep[i]) return 1;if(achunk === ep[i] && bchunk === ep[i]){ if (a.identifier() > b.identifier()) return 1; if (a.identifier() < b.identifier()) return -1; if (a.identifier() === b.identifier()) {if(a.index > b.index) return 1; if(a.index < b.index) return -1;return 0;} } } return 0; });ҾͷDIVOLͷఆٛॱʹैͬͯNPEVMF*Eͷ༏ઌΛܾఆ͢ΔTDPEFॴଐͷNPEVMF͕࠷༏ઌɺ͕࣍WFOEPSɺ࠷ޙ͕NBJOnew OptimizeModuleOrderPlugin([‘scode’,’vendor’,’main’])
݁Ռ.POPMJUIJD+BWBTDSJQUNBJOKTSEQBSUZWFOEPSKTBQQDPNNPONBJOKTXFCQBDL+TPOQDIVOLNBOJGFTUKTBQQBQQKTBQQ/BQQ/KT#FGPSF "GUFS มߋ සଟগϑΝΠϧ αΠζখେ
4FSWFS4JEF3FOEFSJOH
443dΫϥΠΞϯτͰͷSFOEFS·Ͱ4FSWFS "1*#SPXTFSᶇ3FBDU%0.SFOEFS 443ͱಉ͡Α͏ʹ)5.-࡞ͯ͠DIFDLTVNൺֱ ϥΠϑαΠΫϧϝιουͳͲ࣮ߦTUBUFDPOUFOUTᶄ%BUB'FUDIᶅ3FBDU%0.4FSWFSSFOEFS5P4USJOHᶆ)5.-ฦ٫DPOUFOUT$PNQPOFOUʴTUBUFᶃIUUQTCPPLJOHUBCMFKQDPOUFOUT DMJFOU$PNQPOFOUʴTUBUFDPOUFOUT TFSWFSTFSWFSͰTUBUFͱDPOUFOUTͰߏ͞ΕΔ)5.-จࣈྻΛ࡞ͯ͠ฦ٫ΫϥΠΞϯτͰಉ͡Α͏ʹIUNM࡞ͯ͠443݁Ռͱൺֱࠩҟ͕͋ΕΫϥΠΞϯτͷ݁ՌͰ%0.Λ্ॻ͖͢Δ443ͷ༗ແʹݶΒͣΫϥΠΞϯτଆͰͷSFOEFSඞ࣮ͣߦ͢Δඞཁ͕͋Δ
1FSGPSNBODFRPS : 17.02ϨεϙϯελΠϜฏۉ:578 msecRenderToStringͷ࣌ؒ: 60 ~ 80 msec2,893 Component˞BCODͰܭଌͨ݁͠Ռ˞.BD#PPL1SP ()[*OUFM$PSFJ /PEFW˞"1*ίʔϧআ͍ͨ݁Ռ
3FBDU3FDPODJMFSࢀߟɿ3FBDU%0.4FSWFSSFOEFS5P4USJOHNPVOU$PNQPOFOU3FBDU%0.$PNQPOFOUNPVOU$PNQPOFOU3FBDU$PNQPTJUF$PNQPOFOUNPVOU$PNQPOFOU3FBDU.VMUJ$IJMENPVOU$IJMESFO3FBDU4FSWFS3FOEFSJOHSFOEFS5P4USJOH*NQM3FBDU$PNQPOFOU$PNQPOFOU8JMM.PVOUSFOEFS݁Ռͷ3FBDU&MFNFOU͔Β $PNQPOFOUΛੜͯ͢͠TQBOBͳͲͬͪ͜ࢠ3FBDU&MFNFOU͕͋Δ߹3FBDU&MFNFOU͔Β$PNQPOFOUΛੜͯ͢͠ºࢠͷSFOEFS5P4USJOH 1SPWJEFSTUPSF\TUPSF^3PVUFS$POUFYU\ʜQSPQT^1SPWJEFSBQQMJDBUJPO3FBDU.BSLVQ$IFDLTVNBEE$IFDLTVN5P.BLFVQͰ͖͕͋ͬͨIUNMͷEBUBSFBDUDIFDLTVNଐੑʹνΣοΫαϜՃ1SPWJFS͔Β3FBDU$PNQPTJUF$PNQPOFOU Λ࡞ͯ͢͠$PNQPOFOU͔ΒSFBDUEBUBJEΛؚΜͩIUNMจࣈྻੜࢠཁૉͷͳ͍TQBOBͳͲʙNJDSPTFD୯ҰͷTQBOΛࢠʹ࣋ͭBʙNJDSPTFDࣗ࡞ͷ$PNQPOFOU-JOLdNJDSPTFDBΛϥοϓʙNJDSPTFD3FBDU$PNQPOFOUͷΠϯελϯεΛੜ͠ͳ͕Β࠶ؼతʹIUNMจࣈྻΛੜͰ͖͕͋ͬͨIUNMʹνΣοΫαϜΛ༩SFOEFS3FBDU$PNQPOFOU͕ϥοϓ͞Εͨͷ
4PMVUJPOϒοΩϯάςʔϒϧͰҎԼͷରԠΛ࣮ࢪ1BSUJBM3FOEFSJOH443$BDIF$PNQPTJUF3FOEFSJOH
1BSUJBM3FOEFSJOHϢʔβ͕εΫϩʔϧͤͣʹݟ͑Δൣғ 'JSTU7JFXͷΈ443εΫϩʔϧ͠ͳ͍ͱݟ͑ͳ͍ͱ͜ΖΫϥΠΞϯτଆͰSFOEFS$POUFOUTWJTJCMFPOQBHFMPBEpSTUWJFX$POUFOUTVTFSTDSPMMTUPCSPXTF$POUFOUTVTFSSBSFMZCSPXTFQBHF3FOEFSBU4FSWFS3FOEFSBU$MJFOU
1BSUJBM3FOEFSJOH4FSWFS "1*#SPXTFSᶄ%BUB'FUDIᶆ)5.-ฦ٫ᶃIUUQTCPPLJOHUBCMFKQϒοΩϯάςʔϒϧͰ-B[Z-PBEͰͳ͘-B[Z3FOEFSΛߦ͏443ͱ13ͷΓସ͑Λ༻ҙʹ͢ΔͨΊᶅ3FBDU%0.4FSWFSSFOEFS5P4USJOHSFOEFS3FBEZGBMTFʹ͢ΔεΫϩʔϧ෦SFOEFS3FBEZUSVF ͡Όͳ͍ͱSFOEFS͞Εͳ͍Α͏ʹ࣮͓ͯ͘͠pSTUWJFXpSTUWJFXᶇ3FBDU%0.SFOEFSᶈ3FBDU%0.SFOEFSͷίʔϧόοΫͰSFOEFS3FBEZUSVFʹ͢ΔBDUJPOΛEJTQBUDIpSTUWJFXQBHFQBHF
1BSUJBM3FOEFSJOHRPS : 17.02 -> 62.64ϨεϙϯελΠϜฏۉ:578 -> 150 msecRenderToStringͷ࣌ؒ: 60 ~ 80 -> 10 ~ 20 msec2,893 -> 359 Component
b'FUDIBT(PPHMF`ͷ݁Ռ1BSUJBM3FOEFSJOHͰεΫϩʔϧҎԼؚΊશίϯςϯπೝࣝ ˞'JSTU7JFX͕ͳ͍௨ৗͷ41"Ͱ$43ޙͷίϯςϯπ͕ೝࣝ
b1BHF4QFFE*OTJHIU`ͷ݁Ռී௨ͷ41" $MJFOU4JEF3FOEFSJOH1BSUJBM3FOEFSJOH1BSUJBM3FOEFSJOH443ͱಉ͡ɺͨͩ͠$43ݮ
443$BDIF443࣌ʹSFOEFS݁ՌΛҰఆظؒΩϟογϡͯ͠࠶ར༻͢ΔϢʔβґଘ෦ΫϥΠΞϯτଆͰSFOEFS$POUFOUTWJTJCMFPOQBHFMPBEpSTUWJFXQBHF$POUFOUTVTFSTDSPMMTUPCSPXTF$POUFOUTVTFSSBSFMZCSPXTFVTFSDPOUFOUTVTFSDPOUFOUTVTFSDPOUFOUT3FOEFSBU$MJFOU$BDIFPS3FOEFSBU4FSWFS
443$BDIF1BSUJBM3FOEFSJOHͱಉ༷ʹ-B[Z3FOEFS4FSWFS "1*#SPXTFSᶃIUUQTCPPLJOHUBCMFKQᶄ%BUB'FUDI-36$BDIFᶅ3FBDU%0.4FSWFSSFOEFS5P4USJOH PSΩϟογϡ͔ΒऔಘQBHFᶆ)5.-ฦ٫ QBHFQBHFᶇ3FBDU%0.SFOEFSᶈ3FBDU%0.SFOEFSͷίʔϧόοΫͰVTFS3FOEFS3FBEZUSVFʹ͢ΔBDUJPOΛEJTQBUDIVTFS3FOEFS3FBEZGBMTFʹ͢ΔϢʔβใSFOEFS3FBEZUSVF ͡Όͳ͍ͱSFOEFS͞Εͳ͍Α͏ʹ࣮͓ͯ͘͠
ࢀߟɿ$PNQPTJUF3FOEFSJOHҰఆ࣌ؒͷϦΫΤετʹԠͯ͡ಈతʹ3FOEFSJOHํࣜΛΓସ͑Δํࣜ௨ৗ࣌SFOEFS3FBEZUSVFʹ͓͖ͯ͠ߴෛՙ࣌GBMTFʹ͢ΔͳͲॠؒ෩ ը໘ಛੑ ϨϯμϦϯάํࣜখ 4FSWFS4JEF3FOEFSJOHதߴΩϟογϡώοτ443$BDIFதΩϟογϡώοτ1BSUJBM3FOEFSJOHߴ $MJFOU4JEF3FOEFSJOH
4VNNBSZϨϯμϦϯά ํࣜ/PEFෛՙ ద༻қ 69 4&0 උߟ$43 41"˕ ˕ º º443$BDIF˕˚Ϣʔβґଘ͔൱͔ͷ੍ޚɺUUMͷܾఆ˚ Ϣʔβใ͕ 'JSTU7JFXʹ͋Δ߹ͷ੍ޚ˕ߴΩϟογϡ ώοτ͕ߴ͍ Ϣʔβґଘใ͕গͳ͍͜ͱ1BSUJBM3FOEFSJOH˓˓ 'JSTU7JFX͔൱͔ͷ੍ޚ˕˓ +4ରԠ͍ͯ͠ͳ͍ΫϩʔϥΛߟྀ͢Δ͔443 ˚ ˕ ˕ ˕
·ͱΊ5SBOTJUJPO࣮લʹ։ൃऀશһ͕͔͓͖ͬͯ͘PO&OUFSEBUBGFUDIHMPCBMTUBUFͷΓʹؾΛ͚ͭΔ$PEF4QMJUUJOHXFCQBDLͱSFBDUSPVUFSΛΈ߹Θ࣮ͤͯݱՄೳNPEVMF*Eͷॱ൪ʹؾΛ͚ͭΔ4FSWFS4JEF3FOEFSJOHλʔϯΞϥϯυλΠϜతʹΒͳ͍ํ͕ૣ͍Ωϟογϡ1BSUJBM3FOEFSJOHݕ౼ෆཁͳ443͕࣮ߦ͞Εͳ͍Α͏IJTUPSZ"1*Ͱͷը໘ભҠΛجຊʹͦͷଞฐࣾϒϩάͰใൃ৴IUUQFOHJOFFSSFDSVJUMJGFTUZMFDPKQUFDICMPHIUUQTSFDSVJUUFDIDPKQCMPH