前回に引き続きPHP8.1へのアップデートの効果を確かめてみることにします。
前回の記事 CentOS8のPHP8.0をPHP8.1に切り替えてみる
WordPress5.8.3が警告の嵐
さっそくWordPressにアクセスしてみると・・・Deprecated出まくり!!!!あまりの量にコンテンツがファーストビュー外に追いやられてます。
そういえば検証環境はWP_DEBUGを常時オンにしていました。ひとまずdebugをオフにして見なかったことにしてベンチを回します。
/var/www/html/wp-config.php
- define('WP_DEBUG', true);
+ define('WP_DEBUG', false);
ApacheBenchの結果がこちら。
# ab -c 1000 -n 1000 https://192.0.2.128/ Requests per second: 78.07 [#/sec] (mean) Time per request: 12809.385 [ms] (mean) Time per request: 12.809 [ms] (mean, across all concurrent requests) Transfer rate: 2164.47 [Kbytes/sec] received
13.257ms/12.809ms=1.035と3.5%の速度上昇を確認。数回試してみても同様の数値が出るので若干早くなっているのは確かなようです。
ApacheBench ab -c 1000 -n 1000 |
PHP 8.0.14 |
PHP 8.1.1(最適化前) |
---|---|---|
Requests per second | 75.43/sec | 78.07/sec |
Time per request | 13.257ms | 12.809ms |
WordPress 5.8.3のPHP8.1 Deprecatedを力技で直してみる
Deprecatedが出ている状態で高速化しているのですから、解消したらもっと早くなるのでは?との思い付きでコードを修正することにします。
先ほどのDeprecatedの画面に対処法も表示されていたので、WP_DEBUGを元に戻してサイトにアクセスしDeprecatedが消えるまで修正を繰り返えすことにします。
/var/www/html/wp-config.php
- define('WP_DEBUG', false);
+ define('WP_DEBUG', true);
再度アクセスして表示された警告は主にこの2種類。
Deprecated: Return type of WP_Block_List::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/html/wp-includes/class-wp-block-list.php on line 151 Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/html/wp-includes/class-wp.php on line 173
前者はレコメンドの通り型宣言を追加するだけ。
/var/www/html/wp-includes/class-wp-block-list.php #151行目のcurrent()に: mixedを追加する
- public function current() {
+ public function current(): mixed {
return $this->offsetGet( $this->key() );
}
後者は修正するにはがっつりとテコ入れが必要なので、wordpress-developからコードを借用するか、WordPress5.9が出るまで待つのがよいかと思います。
Deprecated修正後のベンチ結果
最後にWP_DEBUGをオフにしてもう一度ApacheBenchを回します。
# ab -c 1000 -n 1000 https://192.0.2.128/ Requests per second: 80.85 [#/sec] (mean) Time per request: 12369.230 [ms] (mean) Time per request: 12.369 [ms] (mean, across all concurrent requests) Transfer rate: 2241.50 [Kbytes/sec] received
ApacheBench ab -c 1000 -n 1000 |
PHP 8.0.14 |
PHP 8.1.1(最適化前) |
PHP 8.1.1(最適化後) |
---|---|---|---|
Requests per second | 75.43/sec | 78.07/sec | 80.85/sec |
Time per request | 13.257ms | 12.809ms | 12.369ms |
結果Time per requestが12.369ms。13.257ms/12.369ms=1.072とPHP8.0比で7%強の高速化という結果になりました。
体感できるような変化ではないと思いますが、WordPressでも一定の効果があったということで今回の検証を締めます。