Submit Search
Upload
PHP7で変わること ——言語仕様とエンジンの改善ポイント
•
175 likes
•
170,993 views
Yoshio Hanawa
Follow
PHPカンファレンス関西2015にて発表
Read less
Read more
Technology
Report
Share
Report
Share
1 of 51
Download now
Download to read offline
Recommended
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
Shintarou Okada
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
こわくない Git
こわくない Git
Kota Saito
Marp Tutorial
Marp Tutorial
Rui Watanabe
Recommended
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
Shintarou Okada
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
こわくない Git
こわくない Git
Kota Saito
Marp Tutorial
Marp Tutorial
Rui Watanabe
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
php-src の歩き方
php-src の歩き方
do_aki
これからの「async/await」の話をしよう
これからの「async/await」の話をしよう
Kouji Matsui
JIT のコードを読んでみた
JIT のコードを読んでみた
y-uti
コールバックと戦う話
コールバックと戦う話
torisoup
async/await のしくみ
async/await のしくみ
信之 岩永
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
PHPの今とこれから2022
PHPの今とこれから2022
Rui Hirokawa
すごいConstたのしく使おう!
すごいConstたのしく使おう!
Akihiro Nishimura
【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター
Unity Technologies Japan K.K.
C言語なWebSocketの遊び方。
C言語なWebSocketの遊び方。
Masahiko Hashimoto
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
例外設計における大罪
例外設計における大罪
Takuto Wada
目grep入門 +解説
目grep入門 +解説
murachue
MagicOnion入門
MagicOnion入門
torisoup
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
Unityと.NET
Unityと.NET
AimingStudy
IL2CPPに関する軽い話
IL2CPPに関する軽い話
Wooram Yang
PHP7はなぜ速いのか
PHP7はなぜ速いのか
Yoshio Hanawa
PHPNGの動向
PHPNGの動向
Yoshio Hanawa
More Related Content
What's hot
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
php-src の歩き方
php-src の歩き方
do_aki
これからの「async/await」の話をしよう
これからの「async/await」の話をしよう
Kouji Matsui
JIT のコードを読んでみた
JIT のコードを読んでみた
y-uti
コールバックと戦う話
コールバックと戦う話
torisoup
async/await のしくみ
async/await のしくみ
信之 岩永
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
PHPの今とこれから2022
PHPの今とこれから2022
Rui Hirokawa
すごいConstたのしく使おう!
すごいConstたのしく使おう!
Akihiro Nishimura
【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター
Unity Technologies Japan K.K.
C言語なWebSocketの遊び方。
C言語なWebSocketの遊び方。
Masahiko Hashimoto
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
例外設計における大罪
例外設計における大罪
Takuto Wada
目grep入門 +解説
目grep入門 +解説
murachue
MagicOnion入門
MagicOnion入門
torisoup
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
Unityと.NET
Unityと.NET
AimingStudy
IL2CPPに関する軽い話
IL2CPPに関する軽い話
Wooram Yang
What's hot
(20)
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
php-src の歩き方
php-src の歩き方
これからの「async/await」の話をしよう
これからの「async/await」の話をしよう
JIT のコードを読んでみた
JIT のコードを読んでみた
コールバックと戦う話
コールバックと戦う話
async/await のしくみ
async/await のしくみ
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
PHPの今とこれから2022
PHPの今とこれから2022
すごいConstたのしく使おう!
すごいConstたのしく使おう!
【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター
C言語なWebSocketの遊び方。
C言語なWebSocketの遊び方。
インタフェース完全に理解した
インタフェース完全に理解した
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
例外設計における大罪
例外設計における大罪
目grep入門 +解説
目grep入門 +解説
MagicOnion入門
MagicOnion入門
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Unityと.NET
Unityと.NET
IL2CPPに関する軽い話
IL2CPPに関する軽い話
Similar to PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7はなぜ速いのか
PHP7はなぜ速いのか
Yoshio Hanawa
PHPNGの動向
PHPNGの動向
Yoshio Hanawa
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
Yoshio Hanawa
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
Shohei Tai
Phpのはなし
Phpのはなし
Serverworks Co.,Ltd.
Phpでアプリケーションサーバー
Phpでアプリケーションサーバー
k-motoyan
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
Masashi Shinbara
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
PHPの今とこれから2007
PHPの今とこれから2007
Rui Hirokawa
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
Yoshio Hanawa
PHPの今とこれから2006
PHPの今とこれから2006
Rui Hirokawa
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Yuta Ohashi
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
Yoshio Hanawa
[TechLION] PHP Conference Japan 2014
[TechLION] PHP Conference Japan 2014
Yuki MAEJIMA
RFC: "var" Deprecation
RFC: "var" Deprecation
y-uti
PHPの今と未来を語る
PHPの今と未来を語る
Rui Hirokawa
CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料
Takako Miyagawa
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
y-uti
PHP選んで良かったこと
PHP選んで良かったこと
Wataru Terada
Similar to PHP7で変わること ——言語仕様とエンジンの改善ポイント
(20)
PHP7はなぜ速いのか
PHP7はなぜ速いのか
PHPNGの動向
PHPNGの動向
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
Phpのはなし
Phpのはなし
Phpでアプリケーションサーバー
Phpでアプリケーションサーバー
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩く
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPの今とこれから2007
PHPの今とこれから2007
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
PHPの今とこれから2006
PHPの今とこれから2006
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
[TechLION] PHP Conference Japan 2014
[TechLION] PHP Conference Japan 2014
RFC: "var" Deprecation
RFC: "var" Deprecation
PHPの今と未来を語る
PHPの今と未来を語る
CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
PHP選んで良かったこと
PHP選んで良かったこと
More from Yoshio Hanawa
自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
Yoshio Hanawa
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Yoshio Hanawa
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Yoshio Hanawa
ぼくのかんがえる さいきょうの銀行振込
ぼくのかんがえる さいきょうの銀行振込
Yoshio Hanawa
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」
Yoshio Hanawa
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話
Yoshio Hanawa
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
Yoshio Hanawa
GitHubからお金をもらった話
GitHubからお金をもらった話
Yoshio Hanawa
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
Yoshio Hanawa
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
Yoshio Hanawa
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
Yoshio Hanawa
Laungage Update PHP編
Laungage Update PHP編
Yoshio Hanawa
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
Yoshio Hanawa
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
PHPの正規表現と最長一致
PHPの正規表現と最長一致
Yoshio Hanawa
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
Yoshio Hanawa
zval をダイエットしてみた
zval をダイエットしてみた
Yoshio Hanawa
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版
Yoshio Hanawa
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
Yoshio Hanawa
More from Yoshio Hanawa
(20)
自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Zend VMにおける例外の実装
ぼくのかんがえる さいきょうの銀行振込
ぼくのかんがえる さいきょうの銀行振込
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
GitHubからお金をもらった話
GitHubからお金をもらった話
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
Laungage Update PHP編
Laungage Update PHP編
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
PHPの正規表現と最長一致
PHPの正規表現と最長一致
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
zval をダイエットしてみた
zval をダイエットしてみた
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP7で変わること ——言語仕様とエンジンの改善ポイント
1.
What’s new in
PHP7 PHP7で変わること ̶̶言語仕様とエンジンの改善ポイント hnw PHPカンファレンス関西2015 (2015/5/30)発表資料
2.
自己紹介 ❖ @hnw ❖ 勤務先:KLab株式会社 ❖
カレーとバグが大好物 ❖ PHP歴15年 ❖ PHPや周辺エクステンションにバグレポ・PR多数
3.
アジェンダ ❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
4.
まずはアンケート
5.
PHP7って 聞いたことがある人?
6.
実際にPHP7を 動かしたことがある人?
7.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
8.
PHP7? ❖ PHP 5.6.xの次のバージョンがPHP
7.0.0 ❖ PHP6はスキップ ❖ 約10年ぶりのメジャーバージョンアップ
9.
さいきんのPHP7 ❖ 予定通り3月に新機能の導入を凍結 ❖ RFCが大量に出ていたので個人的に心配していた ❖
そろそろalpha1を出す予定だったが、遅延ぎみ ❖ まだ議論が残っているため ❖ 11月にPHP7リリース予定
10.
PHPのRFCシステム ❖ 新機能の導入にはRFCと呼ばれる説明ページが必要 ❖ 提案内容や変更による影響などを書く ❖
MLで議論後、投票によって採用・不採用が決まる ❖ 過半数または2/3以上の同意が必要(内容による) ❖ スピード感は無いが、十分機能している印象
11.
PHP7に対するRFC ❖ PHP7で採択されたRFCは48個 ❖ 参考:PHP
5.6は17個、PHP 5.5は20個 →普段のマイナーバージョンアップよりは変化が大きい
12.
PHP7で変わらないこと ❖ PHPは言語仕様の変更に対して非常に保守的 ❖ PHP7でも後方互換性は重視されている ❖
移行コストは十分低いはず
13.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
14.
致命的エラーが例外になった ❖ PHP5までの致命的エラー ❖ エラーハンドリングできず、即座に終了していた ❖
PHP7の致命的エラー ❖ EngineExceptionという新しい例外になった ❖ トップレベルに到達すると今まで通りのエラーになる →ユニットテストで致命的エラーから復帰できる
15.
??演算子の新設 ❖ nullでなければその値を、nullなら右オペランドを返す ❖ isset()と同様に未定義値に対しても使える ❖
ようやくisset()地獄から解放されるぞ!
16.
無名クラスの導入 ❖ クラス定義と同時にインスタンス化できる構文を導入 ❖ その場限りのインスタンスを作りたいときに便利
17.
AST(抽象構文木)の導入 ❖ 解釈フェーズが 1段増えた ❖ 文法解釈の柔軟性が 上がった ❖
opcode最適化 Zend VM opcode Parser Lexer token PHP Zend VM opcode Parser Lexer token PHP Opcode Compiler AST PHP 5 PHP 7
18.
返り値のタイプヒントをサポート ❖ 関数の返り値に型が指定できるようになった ❖ 抽象クラスやインターフェースで指定すると便利
19.
スカラ型のタイプヒントをサポート ❖ 以下の型が引数・返り値で指定できるようになった ❖ int型 ❖
float型 ❖ string型 ❖ bool型 ❖ ようやく落としどころが見つかった
20.
非推奨だった機能を廃止 ❖ PHP5.6までに非推奨になった機能をPHP7で廃止 ❖ ereg関数(preg関数使ってね) ❖
mysql関数(mysqli関数かPDO使ってね) ❖ その他
21.
非推奨だった機能を廃止 ❖ 今までもdeprecated(非推奨)エラーが出ていたはず ❖ いま開発環境が
E_DEPRECATEDの人は注意 ❖ php.iniが空だとdeprecatedエラーは出ません
22.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
23.
PHP7は速いらしい ❖ 「PHP5より倍速い」 ❖ 「HHVMとほぼ互角」 ❖
ホントに?
24.
PHP7の性能(1) Zeevのブログ記事(2014/7)より
25.
PHP7の性能(2) DmitryのZendCon 2014での発表(2014/10)より
26.
PHP7の性能(3) RasmusのFluent 2015での発表(2015/4)より
27.
PHP7の性能(4) ❖ ごく最近まで性能改善が続いている
28.
速くなりすぎ? ❖ PHP7は確かに速い ❖ この1年で倍の高速化(WordPressで比較) ❖
今までも性能改善をサボっていたわけじゃない ❖ 10年間(PHP5.0→5.6)で倍の高速化 ❖ 5.4以降は頭打ちの感さえあった
29.
何があったのか? ❖ 現代のCPUに合わせて大幅なデータ構造変更を行った ❖ データ量の削減・データ局所性の改善 ❖
高速化チームの裁量が大きかった ❖ RFC「Move the phpng branch into master」 ❖ 様々なアイデアを約1年間に渡って実現
30.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
31.
データ構造の変更 ❖ PHP7で見直したデータ構造 ❖ PHPの変数(zval) ❖
文字列(zend_string) ❖ 配列(HashTable / Bucket) ❖ 特にzvalの見直しは非常に大胆だが有効だった
32.
データ構造変更の必要性(1) ❖ これまでのデータ構造は32bit CPUの頃の設計 ❖
16bytes中14bytesを使う構造だった ❖ 64bit CPUでは24bytes中6bytesが未使用 ❖ 64bit時代に対応したデータ構造が必要
33.
データ構造変更の必要性(2) ❖ キャッシュを効率的に使う発想が無い頃の設計 ❖ メモリやキャッシュが相対的に速かった ❖
現代のCPUではキャッシュを有効活用する必要性 ❖ CPU速度に比べるとメモリ速度の改善は鈍い ❖ キャッシュサイズもあまり増えていない
34.
PHP5のzval(int型) ❖ 計24bytes ❖ 常にポインタ参照される ❖
参照カウント&コピーオンライト
35.
PHP7のzval(int型) ❖ 計16bytes ❖ 参照カウントしない、代入では常にコピー
36.
新zvalへの評価 ❖ どの環境でも16bytes →64bit時代に対応 ❖ ポインタ参照が1段減った ❖
int型・float型・bool型でコピーオンライト廃止 →メモリ消費量減少 →キャッシュに優しくなった
37.
❖ PHP7で我々は本物の配列を手に入れた! 配列にも大改革
38.
❖ PHP7で我々は本物の配列を手に入れた! 配列にも大改革
39.
配列とは ❖ (典型的には)連続するメモリ領域を確保する ❖ インデックスは0から連続する数字 ❖
読み書きが高速 リンゴ バナナ トマト ニンジン 0 1 2 3
40.
連想配列とは ❖ 文字列をキーにできる ❖ そこそこ読み書きも速い(配列よりは遅い) "apple" 0 "banana"
"carrot" 1 2 3 4 5 6 7 キーのハッシュ値を計算 "apple"=>リンゴ"banana"=>バナナ "tomato"=>トマト "tomato" "carrot"=>ニンジン
41.
PHP5の配列 ❖ PHP5までは連想配列しか無かった ❖ $array[1]でも連想配列アクセスしていた ❖
他の言語の配列に比べると遅かった
42.
PHP7の配列 ❖ PHP7から配列と連想配列が作れるようになった ❖ 内部で自動的に選択される ❖
キーが0から連続する数字なら配列になる →for文での配列のループ処理が高速になった
43.
PHP7の配列 arData flagsrefcount type gc_info zend_array u
nTableMask nNumUsed nNumOfElements nTableSize nInternalPointer nNextFreeElement pDestructor zval Bucket[] h (hash value) key (キーへのポインタ) h key 0 1 h key 2 zval zval ❖ 他言語の配列と同じ構造 (数字キーのみの場合)
44.
Bucket構造体の改善 ❖ Bucket構造体:配列の要素1個に対応するデータ構造 ❖ PHP5(72bytes)→PHP7(32bytes) ❖
メモリ使用量が劇的に減った →配列のメモリ効率が良くなった
45.
Bucket構造体の改善 ❖ PHP7ではBucketの配列を連続領域に確保 ❖ PHP5では1個ずつメモリ確保していた →foreach文でのアクセス速度が有利に
46.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
47.
HHVMとは ❖ Facebookが自社向けに開発したPHPの実装 ❖ PHP5より断然高速 ❖
PHPコアコミッターがフルタイムでHHVMにコミット ❖ OSS開発もうまく回っている →PHPでは初の「もう一つの選択肢」
48.
HHVMの評価 ❖ PHP7の登場で速度面のアドバンテージは失った ❖ JITコンパイルが効く状況では速い ❖
実アプリケーションでの差は縮まった ❖ 魅力は多い ❖ 開発の活発さ、フットワークの軽さ ❖ Hack言語の仕様面での挑戦(例:async)
49.
選択肢があることの価値 ❖ HHVMはPHPに新しい価値を与えてくれた ❖ 必要に応じて別の実装を選べる状況 ❖
PHP7での速度改善のモチベーション ❖ PythonやRubyでは当たり前の状況 ❖ お互いに良い影響を与え続ける関係が望ましい
50.
まとめ ❖ PHP7への移行のハードルは低い ❖ 便利そうな新機能が実装された ❖
高速化のため大胆なリファクタリングが行われた ❖ 現代のアーキテクチャに合わせた最適化をした ❖ 他の選択肢があることに価値がある ❖ PHPもHHVMも盛り上がっていってほしい
51.
ご静聴 ありがとう ございました
Download now