PHP8.0→8.1の高速化を確認

前回に引き続きPHP8.1へのアップデートの効果を確かめてみることにします。

前回の記事 CentOS8のPHP8.0をPHP8.1に切り替えてみる
CentOS8のPHP8.0をPHP8.1に切り替えてみる
PHP8.1が正式リリースされていたのをすっかり忘れていました。今回は8.0から一部処理の速度が上がっているらしいですね。Word...
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でも一定の効果があったということで今回の検証を締めます。