Slide 1

Slide 1 text

@alpaca_tc 3FGJOFNFOUTͷϝιουఆٛ Λഒ଎ͨ͘͠࿩  ͳ͕Β3VCZձٞ 

Slide 2

Slide 2 text

アルパカ隊長 ͳ͕Β3VCZձٞ 県立岐阜商業高等学校卒 work at COBOL 

Slide 3

Slide 3 text

ࠓ೔࿩͢͜ͱ ɾ3VCZຊମͷ3F fi OFNFOUTΛߴ଎Խͨ͠Ұ࿈ͷྲྀΕ ɹɾSF fi OF 4USJOH \EFGGPPOJM^ ɾ3BJMTΤϯδχΞͰ΋3VCZʹߩݙͰ͖Δ 

Slide 4

Slide 4 text

ΞδΣϯμ  ύϑΥʔϚϯεྼԽͷൃݟ  ݪҼௐࠪ  վળΞϓϩʔν  3BJMT։ൃऀ͕ಘֶͨͼ 

Slide 5

Slide 5 text

ύϑΥʔϚϯεྼԽͷൃݟ

Slide 6

Slide 6 text

3VCZόʔδϣϯΞοϓޙ ϩʔΧϧͷ3BJMT͕஗͍ 

Slide 7

Slide 7 text

ਪଌ͢ΔͳɺܭଌͤΑ # Gemfile gem 'vernier' # config/application.rb # 計測用のmiddlewareを追加 config.middleware.use(Vernier::Middleware) # ファイルを更新してRailsのリロード処理を行う $ touch app/controllers/application_controller.rb $ curl http://localhost:3000/?vernier=true 

Slide 8

Slide 8 text

3VCZNT 3VCZNT 

Slide 9

Slide 9 text

3VCZNT 3VCZNT 

Slide 10

Slide 10 text

࠶ݱίʔυϕϯνϚʔΫ mod = Module.new klass = Class.new Benchmark.ips do |x| x.report(RUBY_VERSION) do mod.send(:refine, klass) { def call = nil } end x.compare! end 

Slide 11

Slide 11 text

ϕϯνϚʔΫ݁Ռ 10^2 10^4 10^5 10^7 3.2 3.3 3.4 3.5 3322714 i/s 713 i/s 470 i/s 442 i/s  4656x slower 7060x slower 7505x slower

Slide 12

Slide 12 text

ݪҼௐࠪ

Slide 13

Slide 13 text

👀SVCZSVCZ ͰSFGJOFʹؔ࿈͢ΔDBMMDBDIFͷແޮԽॲཧ͕௥Ճ͞Εͨɻ ͋ͱͰղઆ͢Δ🤥 

Slide 14

Slide 14 text

ͱΓ͋͑ͣ3FWFSUύον $ echo '--- a/vm_method.c +++ b/vm_method.c @@ -304 +303,0 @@ rb_clear_method_cache(VALUE klass_or_module, ID mid) - rb_clear_all_refinement_method_cache(); ' | rbenv install 3.3.9 —patch ଎౓͸վળ💪 

Slide 15

Slide 15 text

DBMMDBDIFͷແޮԽॲཧͰ ύϑΥʔϚϯε͕ѱ͘ͳΔͷ͸ͳ͔ͥʁ 

Slide 16

Slide 16 text

VTFSEVQ User Object Kernel BasicObject ܧঝνΣʔϯ Kernel#dup  DBMMDBDIFͱ͸Կ͔ w ϝιουΛݺͿ w ܧঝνΣʔϯ͔Βϝ ιουఆٛΛ୳͢

Slide 17

Slide 17 text

VTFSEVQ User Object Kernel BasicObject ܧঝνΣʔϯ Kernel#dup Kernel#dup DBMMDBDIF  DBMMDBDIFͱ͸Կ͔ w ϝιουΛݺͿ w ܧঝνΣʔϯ͔Βϝ ιουఆٛΛ୳͢ w ୳ࡧ݁ՌΛΩϟογ ϡ

Slide 18

Slide 18 text

VTFSEVQ User Object Kernel BasicObject Kernel#dup Kernel#dup User#dup DBMMDBDIF ܧঝνΣʔϯ w ϝιουΛ௥Ճ w 6TFSEVQΛࢀর͠ ͍ͨ  ແޮԽॲཧͷඞཁੑ

Slide 19

Slide 19 text

VTFSEVQ User Object Kernel BasicObject Kernel#dup Kernel#dup User#dup DBMMDBDIF ܧঝνΣʔϯ ❌  w ϝιουΛ௥Ճ w 6TFSEVQΛࢀর͠ ͍ͨ w ݹ͍DBMMDBDIFΛഁغ ͢Δૢ࡞ ແޮԽॲཧͷඞཁੑ

Slide 20

Slide 20 text

0CKFDU4QBDF ϝϞϦ؅ཧɾ($ 

Slide 21

Slide 21 text

0CKFDU4QBDF Kernel#dup Refined#m User#created_at User#email Kernel#tap Enumerable#max Refined#x DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF 

Slide 22

Slide 22 text

0CKFDU4QBDF Kernel#dup Refined#m User#created_at User#email Kernel#tap Enumerable#max Refined#x DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF ❌ ❌  3FGJOFNFOUTؔ࿈ͷ DBMMDBDIFΛফ͢

Slide 23

Slide 23 text

0CKFDU4QBDF Kernel#dup DBMMDBDIF User#email DBMMDBDIF Enumerable#map DBMMDBDIF Kernel#tap DBMMDBDIF String("…") String("…") 1000 2 <#User …> <#Item …> Array<> <#Item …> 3209 User#email DBMMDBDIF Array<> String("…") String("…") String("…") String("…") 1234 <#Item …> <#Item …> <#Item …> ʜ 

Slide 24

Slide 24 text

SFGJOFͷDBMMDBDIFແޮԽॲཧͷΦʔόʔϔου 3F fi OFͷϝιουఆٛճ਺ ✖ 0CKFDU4QBDFͷΦϒδΣΫτ 🟰ԯΦϒδΣΫτ෼ͷ૸ࠪ ճ ສ 

Slide 25

Slide 25 text

վળΞϓϩʔν

Slide 26

Slide 26 text

3VCZ*TTVF5SBDLJOH4ZTUFNʹىථ w SVCZSVCZͷXJLJʹ౤ߘΨΠυ w ࠶ݱίʔυͱௐࠪ݁ՌΛఴ͑ ͯىථ 

Slide 27

Slide 27 text

CZSPPU͞Μ ʮSFGJOFͷDBMMDBDIF͚ͩ ֨ೲͯ͠૸ࠪ͢Ε͹଎͘ͳΔʯ 

Slide 28

Slide 28 text

SF fi OFDBMMDBDIFઐ༻ RefinedA#dup RefinedA#size RefinedB#a RefinedC#email RefinedD#tap RefinedA#max RefinedD#map DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF DBMMDBDIF Kernel#dup String("…") User#created_at 1000 1010 String("…") Refined#map DBMMDBDIF DBMMDBDIF DBMMDBDIF … 500万オブジェクト 最小限 0CKFDU4QBDF  /&8

Slide 29

Slide 29 text

💪 

Slide 30

Slide 30 text



Slide 31

Slide 31 text

$IBU(15 

Slide 32

Slide 32 text

w $ݴޠͷղઆ͸׬ᘳ w ྨࣅه๏΋ֶ΂Δ w SVCZSVCZͷίʔυ ΋ͪΐͬͱ෼͔Δ w ίʔυੜ੒͸μϝ 

Slide 33

Slide 33 text



Slide 34

Slide 34 text

 IUUQTHJUIVCDPNLPSVCZIBDLDIBMMFOHF

Slide 35

Slide 35 text



Slide 36

Slide 36 text

Ϛʔδ͞Ε·ͨ͠🎉 

Slide 37

Slide 37 text

मਖ਼ޙϕϯνϚʔΫ݁Ռ 10^2 10^4 10^5 10^7 3.3.9 3.3.9-patch 3.5.0 3.5.0-patch 713 i/s 442 i/s 2764x faster 4003x faster 2855003 i/s 1222135 i/s

Slide 38

Slide 38 text

3BJMT։ൃऀ͕ಘֶͨͼ

Slide 39

Slide 39 text

ᶃύϑΥʔϚϯεվળͷྲྀΕ͸ಉ͡ w ීஈͷΞϓϦέʔγϣϯͷվળͱҰॹ w ܭଌɺ࠶ݱɺվળ w ͔ͩΒɺ3BJMT։ൃऀͰ΋ߩݙͰ͖ͨ 

Slide 40

Slide 40 text

ᶄ"*΍ίϛϡχςΟͷॿ͚ΛಘͯߩݙͰ͖Δ w "*ͱฒ૸ͯ͠$ݴޠΛֶ΂ͨ w LPSVCZIBDLDIBMMFOHFͳͲͷڭࡐ w SVCZKQ΍3VCZ*TTVF5SBDLJOH4ZTUFNͰΞ υόΠεΛ͍͚ͨͩͨ 

Slide 41

Slide 41 text

ᶅ3VCZ,BJHJͷ஌͕ࣝ׆͖Δ w ($ͰηάϑΥˠ($DPNQBDUJPOʹΑΔΞ υϨε࠶഑ஔ! w ڞ༗σʔλΞΫηεʹϩοΫˠ(MPCBM7. -PDL! w ϓϩϑΝΠϥˠWFOJFS! 

Slide 42

Slide 42 text

͓ΘΓʹ

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

3BJMTΤϯδχΞͰ΋ ίϯτϦϏϡʔτͰ͖ͨ ࣍͸ɺ͋ͳͨͷ൪ɻ