エンジニア日記

日々の開発あれこれ

PHPでAPIを作成し、画面が表示されるときに非同期で2つ以上のAPIを呼ぶ

表題の実装を行った。
APIを1つだけしか呼ばない場合だと問題は表面化しなかったのだが、
2つ以上を呼び出すと先に呼び出したAPIの処理が終わってから次のAPIが実行されるという
処理動作になっていた。
そのため、画面表示に少し時間がかかる。

原因

APIでは session_start() 処理が記述されていた。
session_start() 処理が走るとセッションに排他ロックがかかるため
次のAPIが書き込み待ちになり実行が遅れるというものだった。

対応策

セッションへの書き込みが完了したら(セッションに対する処理が終われば)

1
session_write_close()

を呼び出し、排他ロックを解除する。

参考URL

http://unsolublesugar.com/20121103/113321/ http://www.objective-php.net/blog/detail/20110813 http://blog2.elephantech.net/php/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E7%B5%82%E4%BA%86%E3%81%99/