×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
͞Βʹ͘ͳΔPHP nunulk PHPΧϯϑΝϨϯεԭೄ
Slide 2
Slide 2 text
ຊ͓͢Δ͜ͱ • ࣗݾհ • PHP 7.4 Ͱಋೖ͞ΕΔ Opcache Preloading ͱ FFI • ʢ͓·͚ʣNim ͷհ
Slide 3
Slide 3 text
ࣗݾհ • ໊લ: nunulkʢ͵͵Δ͘ʣ • ৬ۀ: ϑϦʔϥϯεͷΣϒΤϯδχΞ • ਆಸݝ͔Βདྷ·ͨ͠ • PHPͷ͖ͳͱ͜Ζ: ՄมؔɺϚδοΫϝιου • Laravel Meetup Okinawa ࢀՃ: 45%
Slide 4
Slide 4 text
I work for
Slide 5
Slide 5 text
PHP 7.4 is coming on Nov. 28th, 2019 ! RC3 is now available.
Slide 6
Slide 6 text
New features • Typed Properties • Arrow Functions • Null coalescing assignment operator • Spread operator in arrays • Covariant Returns and Contravariant Parameters • Opcache Preloading • FFI
Slide 7
Slide 7 text
New features • Typed Properties • Arrow Functions • Null coalescing assignment operator • Spread operator in arrays • Covariant Returns and Contravariant Parameters • Opcache Preloading • FFI
Slide 8
Slide 8 text
Opcache Preloading • αʔόىಈ࣌ʹ Opcache ΛϝϞϦ্ʹϩʔυ͠ ͓ͯ͘Έ • ॳճΞΫηε࣌ʹΩϟογϡ͕ޮ͘Α͏ʹͳΔ • ͨͩ͠ࢦఆͰ͖Δͷ1ϑΝΠϧͷΈ
Slide 9
Slide 9 text
Opcache Preloading // ϑϨʔϜϫʔΫͷͯ͢ͷϑΝΠϧΛΩϟογϡ͢Δ $frameworkDir = $baseDir . 'vendor/laravel/framework/ src/Illuminate'; $paths = load_all_files([$frameworkDir]); foreach ($paths as $path) { opcache_compile_file($path); }
Slide 10
Slide 10 text
Opcache Preloading ab -n 100 -c 10 http://localhost Opcache ͳ͠ Requests per second: 0.91 [#/sec] (mean) Time per request: 11010.544 [ms] (mean) Opcache ͋Γ Requests per second: 5.34 [#/sec] (mean) Time per request: 1872.084 [ms] (mean) Opcache ͋Γ w/ preload Requests per second: 6.32 [#/sec] (mean) Time per request: 1582.046 [ms] (mean)
Slide 11
Slide 11 text
Opcache Preloading ab -n 100 -c 10 http://localhost Opcache ͳ͠ Requests per second: 0.91 [#/sec] (mean) Time per request: 11010.544 [ms] (mean) Opcache ͋Γ Requests per second: 5.34 [#/sec] (mean) Time per request: 1872.084 [ms] (mean) Opcache ͋Γ w/ preload Requests per second: 6.32 [#/sec] (mean) Time per request: 1582.046 [ms] (mean)
Slide 12
Slide 12 text
Opcache Preloading • Opcache.enable = 1 ͢Δ͚ͩͰे͘ͳΔ • αʔόΛ࠶ىಈ͠ͳ͍ͱΩϟογϡߋ৽͞Εͳ͍ͷͰɺ ӡ༻ͷࡍҙ͕ඞཁ • Composer Ͱಋೖ͕ݕ౼͞Ε͍ͯΔͷͰɺকདྷతʹ preload͢ΔରͷબఆΛ composer ͔Βߦ͑ΔΑ͏ʹͳ Δ͔͠Εͳ͍
Slide 13
Slide 13 text
FFI - Foreign Function Interface • PHP ͔ΒωΠςΟϒϥΠϒϥϦ ʢ.so, .dylib, .dllʣΛݺͿΈ • Python, Ruby, Java ͳͲͰ͢Ͱʹ࠾༻͞Ε ͍ͯΔ
Slide 14
Slide 14 text
PHP ͔ΒωΠςΟϒϥΠϒϥ ϦΛݺͿΈ • PHP extension • Zend extension
Slide 15
Slide 15 text
FFI fib(40); var_dump($ret); // int(102334155)
Slide 16
Slide 16 text
FFI // for/if Λͬͯ N ·ͰͷۮͷΛܭࢉ͢Δ # php index.php loop --php 1000000 0.056366920471191 # php index.php loop --ffi 1000000 0.037209987640381 // N ൪ͷϑΟϘφονΛ࠶ؼͰܭࢉ͢Δ # php index.php fib --php 40 4.6368939876556 # php index.php fib --ffi 40 0.28206396102905 // MySQL ʹ N ݅σʔλΛૠೖ͢Δ # php index.php mysql --php 1000 0.47904992103577 # php index.php mysql --ffi 1000 0.57981204986572
Slide 17
Slide 17 text
FFI // for/if Λͬͯ N ·ͰͷۮͷΛܭࢉ͢Δ # php index.php loop --php 1000000 0.056366920471191 # php index.php loop --ffi 1000000 0.037209987640381 // N ൪ͷϑΟϘφονΛ࠶ؼͰܭࢉ͢Δ # php index.php fib --php 40 4.6368939876556 # php index.php fib --ffi 40 0.28206396102905 // MySQL ʹ N ݅σʔλΛૠೖ͢Δ # php index.php mysql --php 1000 0.47904992103577 # php index.php mysql --ffi 1000 0.57981204986572
Slide 18
Slide 18 text
FFI // for/if Λͬͯ N ·ͰͷۮͷΛܭࢉ͢Δ # php index.php loop --php 1000000 0.056366920471191 # php index.php loop --ffi 1000000 0.037209987640381 // N ൪ͷϑΟϘφονΛ࠶ؼͰܭࢉ͢Δ # php index.php fib --php 40 4.6368939876556 # php index.php fib --ffi 40 0.28206396102905 // MySQL ʹ N ݅σʔλΛૠೖ͢Δ # php index.php mysql --php 1000 0.47904992103577 # php index.php mysql --ffi 1000 0.57981204986572
Slide 19
Slide 19 text
FFI // for/if Λͬͯ N ·ͰͷۮͷΛܭࢉ͢Δ # php index.php loop --php 1000000 0.056366920471191 # php index.php loop --ffi 1000000 0.037209987640381 // N ൪ͷϑΟϘφονΛ࠶ؼͰܭࢉ͢Δ # php index.php fib --php 40 4.6368939876556 # php index.php fib --ffi 40 0.28206396102905 // MySQL ʹ N ݅σʔλΛૠೖ͢Δ # php index.php mysql --php 1000 0.47904992103577 # php index.php mysql --ffi 1000 0.57981204986572
Slide 20
Slide 20 text
FFI - Foreign Function Interface • ͍ॴΛݟۃΊΔͷ͕͍͕͠ɺہॴతʹ εϐʔυΞοϓͤ͞Δબࢶͷͻͱͭ • େྔͷܭࢉΛͤ͞Δͷʹ͍͍ͯΔ • ͢ͰʹΤΫεςϯγϣϯ͕͋ΔͷͰ͋Ε ͦͪΒΛ͏΄͏͕͍
Slide 21
Slide 21 text
ʢ͓·͚ʣNim ͷհ
Slide 22
Slide 22 text
Nim • γεςϜϓϩάϥϛϯά͚੩తܕ͚ݴޠ • ϚϧνύϥμΠϜ • Python ʹࣅͨߏจΛ࣋ͭ • C/C++/JavaScript ʹτϥϯεύΠϧ͢Δ͜ͱ͕Ͱ͖Δ • 20199݄ʹ 1.0 ͕ϦϦʔε͞Ε͔ͨΓ
Slide 23
Slide 23 text
Nim proc fib(a: cint): cint {.exportc, cdecl, dynlib.} = if a <= 2: result = 1 else: result = fib(a - 1) + fib(a - 2)
Slide 24
Slide 24 text
Nim $ nim c -d:release --noMain --header --app:lib fib.nim $ ls libfib.so libfib.so
Slide 25
Slide 25 text
Nim fib(40); var_dump($ret);
Slide 26
Slide 26 text
ڵຯͷ͋Δํ Nim + FFI Ͱ ॏ͍ॲཧͷߴԽʹ νϟϨϯδͯ͠Έ͍ͯͩ͘͞
Slide 27
Slide 27 text
JIT in PHP 8.0 is coming on Sep. 23, 2021 !
Slide 28
Slide 28 text
͞Βʹ͘ͳΔ PHP ࠓޙͱΑΖ͓͘͠ئ͍͠·͢