最近のSOY Shopの開発状況ですが、

月商数千万円のネットショップのメンテナンスの依頼が増え、管理画面の表示速度が気になるショップが増えてきました。


半年程前から管理画面にところどころに潜む無駄な処理を改修しています。


具体的にどの箇所の改修を行っているかを挙げると、


soyshop_order_imp


注文一覧ページの見直しが主です。

自由を求めてオープンソースのネットショップパッケージへ。軌道に乗った頃に遭遇する問題についてに記載してある通り、

ネットショップにおいてデータベースが肥大化しやすいのは注文であって、

ショップを運営していると注文一覧から顕著に表示速度が低下してきます。


コードを確認していると、

顧客名の箇所にあるように顧客IDからDAOを介して、顧客情報をすべて取得した後、名前だけ取り出すというコードの行数は大幅に減るけれども、計算量としては多くなるような処理がいくつかあった。

SOY2DAOでデータベースから値を取り出す


どのようなコードかというと、

$name = SOY2DAOFactory::create("user.SOYShop_UserDAO")->getById($userId)->getName();

こんな感じ。


これを、

$dao = new SOY2DAO();
$res = $dao->executeQuery("SELECT name FROM soyshop_user WHERE id = :id LIMIT 1;", array(":id" => $userId));
$name = (isset($res[0]["name"]) ? $res[0]["name"] : "";

行数は増えてしまったけれども、

確実に一つのデータを取得するように変更した。

※実際はもう少し工夫をして、SQLの実行数も減らしています。

SOY2DAOでプリペアードステートメントを利用する


SOY CMSの開発当初からあった普段はDAOだけど、書きたい時はSQLという開発理念がこういうところで生きてくる。

いつもDAOが良いとは限らない。


とりあえず、

これらの修正で体感でわかる程、表示速度は改善された。


他には@の例外処理を極力しようしなかったり、

テストコードの新調で発覚した諸々のエラーを修正しています。

さくらVPSにJenkinsを入れて、Selenium + php-webdriverを動かせるようにする


こんな感じで引き続き、処理速度の見直しを行っていく予定です。


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

https://saitodev.co/soycms/soyshop/