当ブログで利用しているSOY CMSでフロントコントローラ内の例外処理の大幅な見直しを行い、各ページの表示の省力化を行った。
SOY CMSではPHPのコードでよく見られる
try{
//ページの出力に関する処理が延々と続く
}catch(Exception $e){
//404 notfoundの出力に関する処理
}
といった処理を大域の例外処理があり、パフォーマンスに大きな影響を与えていた。
例外処理は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)#例外
今回の改修分を当サイトで反映して表示の測定をしてみたが、目立った差はなかった。
ただ、ブロックを多用して表示が重くなっているサイトであれば、今回の改修の影響は大きくなると信じている。
今回対応分を含んだパッケージは下記のサイトからダウンロード出来ます。





