当ブログで利用しているSOY CMSでフロントコントローラ内の例外処理の大幅な見直しを行い、各ページの表示の省力化を行った。

【SEO対策】最終産物のHTMLのキャッシュで高速化


SOY CMSではPHPのコードでよく見られる

try{
	//ページの出力に関する処理が延々と続く
}catch(Exception $e){
	//404 notfoundの出力に関する処理
}

といった処理を大域の例外処理があり、パフォーマンスに大きな影響を与えていた。

PHP: 例外(exceptions) - Manual


例外処理はtryで囲ったコードの実行中に常にエラーの判定を行うという処理を行ってしまうため、PHPの中で重い処理だとされていて、コードの行数が多くなればなる程、その影響は大きくなり、ずっと気になっていた。


今回の改修では、例外処理中のthrowを廃止し、

$e = null;
//ページの出力に関する処理

$err = true; //何らかのエラー
if($err){
	$e = new Exception("failed");
}

//ページの出力に関する処理の続き

if($e instanceof Exception){
	//404 notfoundの出力に関する処理
	exit;
}

※実際は関数を使って、Exceptionを使ったところで関数の実行を止めている。


のようにエラー判定を丁寧に行い、エラーがあればcatchで行っていた処理を行うという処理に変更した。

この処理はgolangの例外処理の廃止の思想を参考にしての改修となっている。

Google C++ スタイルガイド(日本語全訳) Google C++ Style Guide (Japanese)#例外


今回の改修分を当サイトで反映して表示の測定をしてみたが、目立った差はなかった。

ただ、ブロックを多用して表示が重くなっているサイトであれば、今回の改修の影響は大きくなると信じている。


今回対応分を含んだパッケージは下記のサイトからダウンロード出来ます。

https://saitodev.co/soycms/