当ブログで利用している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)#例外
今回の改修分を当サイトで反映して表示の測定をしてみたが、目立った差はなかった。
ただ、ブロックを多用して表示が重くなっているサイトであれば、今回の改修の影響は大きくなると信じている。
今回対応分を含んだパッケージは下記のサイトからダウンロード出来ます。