どurakuの作ったもの、作ろうとしているもの、作ろうとしていたものの近況。軽量・軽快で高速なフレームワークですが、今時の高速化トレンドに対応して更に速くしていきましょう。有効にしておきましょう。gzip圧縮にするGoogleのアドバイスツールでも指摘してくるやつですね。CodeIgniter、というよりはPHPの標準的な機能になるのですが、以下のコード(冒頭4行)をビューのアウトプットをする前に入れておくだけでPHPの透過的なgzip圧縮が有効になります。$data));※このコードではビューの組み立てにTwigを使っています。注意点として、画像であったりZIPファイルをバイナリで返したりであるような際に透過的な圧縮が有効になっているとファイルが壊れてしまったりします。いう出力をするURLが有る場合は、全てのURLで常に適用されるような書き方は避けるのが無難です。組み合わせてあげましょう。MPM)にする事が必要になりますので、その辺りも適宜チューニングしていきましょう。3は同じクライアントから同時に複数URLを叩かれるような場合に、同時に処理せず逐次処理のような挙動をします。これはPHPのセッションが有効になっている際の制限なのですが、セッションの機能を使い終わったタイミングでセッションを書き込み・クローズさせてあげる事で並列度が上がります。同ユーザー・セッションからの連続アクセスの為にセッションのロックを解除する。これを実行した後はセッション関連の機能が使えない事に注意。session_write_close();そもそもAPIでセッションを利用しているのがよくないという話も有りますが、必要な場合にはこの対策をどうぞ。Redisでキャッシュとかも使っていきたいMemcachedとか、AWSのElastiCacheとか。CodeIgniterにはそれらを利用するための機能が標準で用意されています。扱ってしまっているのでCodeIgniter側の機能は使った事が無いのですが。キャッシュしましょう。最新のMySQLやPostgreSQL使いたいよねMySQLにしてもPostgreSQLにしてもバージョンが上がるたびに様々な改善が有り、高速化が有り、新機能が有ります。8.0にも更なる期待が持てるこの頃。CodeIgniterには重厚なORマッパーが有りません。QueryBuilderは本当にクエリのビルダですし、生のSQLを直接実行する事も容易です。8.0のウィンドウ関数、CTEであったり、JSON型、配列型など、RDBの強力な機能を積極的に使っていけます。実際、PostgreSQLの配列型をタグの実装として使っていてなかなか便利だったりします。blog配列型はCodeIgniterからは「配列っぽい文字列」として扱う事になるので、適当な変換関数を作ってオブジェクトだったり連想配列だったりでやり取り出来るようにすると便利です。RDSが便利だよねといっても一応フェイルオーバーには数十秒かかります。以下の過去記事で「数秒間のDB接続不可に耐えるための方法」をまとめてあります。CodeigniterのDB接続不可をハンドリングして再接続するまた、CodeIgniterのデータベース接続には「1つ目の接続先が繋がらなかった場合に2つ目の接続先に繋ぐ」という機能が有ります。これからのマルチマスター時代のフェイルオーバーに容易に対応出来ちゃったりするのでしょうか。出来るのかは分かりませんが、試してみると面白いかもしれません。終わり他にもいろいろあるかもしれませんがこの辺で。色々な話題が有ります(その辺も勉強しないとなぁ)が、CodeIgniterも高速化していきましょう。AMIが先日バージョン2017.09となりました。1.0.2k)等、それなりに変更点の大きいリリースとなっており、これによりディストリビューション標準のパッケージのみでApache/Nginxのhttp/2に対応できるようになりました。ソースコンパイルを伴うミドルウェアは実運用においては、メンテナンス性に難が有りましたが、今後は簡単に導入が可能なはずです。「今こそ」、なタイミングかと思いますので対応していきます。updateしてください。古いリリースはセキュリティ修正も行われません。7.1を使っています。Webサイトは(常時)SSL/TLS対応になっているものとして進めます。Encryptなど各種方法で対応して下さい。ロードバランサELB(ALB/CLB/NLB)は未導入のものとして話を進めます。MPMではなく別のMPMを使う必要が有るからです※1。その為、PHPをApacheモジュール版ではなく、php-fpmで動作させる必要があります。導入手順php-fpmをyumからインストール。preforkpreforkで動いています。OKスレッド数の部分で警告が出ていますが、これは後で修正します。バーチャルホストの設定PHPファイルの実行をphp-fpmに渡すための設定を追加する。Apache(やNginx)とphp-fpmの接続は、UNIXドメインソケットと127.0.0.1:9090へのTCP/IP接続が選べますが、ApacheとPHPを同じサーバーで実行する場合は、応答速度の速いUNIXドメインソケットの方で設定します。対象のバーチャルホスト設定に以下を追記。拡張子がphpのファイルをphp-fpmに渡します。"proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"&amp;amp;amp;amp;amp;amp;lt;/FilesMatch&amp;amp;amp;amp;amp;amp;gt;FilesMatchにマッチしたファイルしかphp-fpmに渡されない事に注意。OKphp-fpm側の設定ユーザーの設定やソケットファイル名の設定など修正。apache,nginxphp-fpmのログレベルをnoticeからwarningに変更する。]まずはこの時点でWebサイトが正常に表示されることを確認する。eventあとはドキュメントルートに適当にphpinfoを実行するファイルを置いて確認。2.0」ではなく「FPM/FastCGI」と表示されていればOK。phpinfo();※確認後はこのファイルの消し忘れにご注意ください。MPMかつ、php-fpmでPHPが動作する環境になりました。MPMがeventになった事により、多数のアクセスに対しても(適切にチューニングをすれば)preforkよりもスケールする事が出来ると思われます。http2/対応ここまでくればhttp/2対応は簡単です。restartこれでもうhttp2対応です。Apacheで出ている、MaxRequestWorkersやThreadsPerChildのワーニングについては、MaxRequestWorkersがThreadsPerChildの整数倍になるように、各自調整を行ってください。ここの調整はアクセス数などによっても異なります。