PHPという概念が存在しない退屈な世界_速度改善編

23

Transcript of PHPという概念が存在しない退屈な世界_速度改善編

Page 1: PHPという概念が存在しない退屈な世界_速度改善編
Page 2: PHPという概念が存在しない退屈な世界_速度改善編

whoami

• 大須賀 義浩

• PHPエンジニア@株式会社 Loco Partners

• twitter @oh_sky

• facebook http://fb.com/ohsky

Page 3: PHPという概念が存在しない退屈な世界_速度改善編

ここまでのあらすじ

• PHPをアップロードすればAWS LambdaでもPHPが使える • API Gateway経由でアクセスすれば、PHPのWebアプリケーションが動かせる

Page 4: PHPという概念が存在しない退屈な世界_速度改善編

http://qiita.com/oh-sky/items/646d326ee23ae640153f

ここまでのあらすじ

Page 5: PHPという概念が存在しない退屈な世界_速度改善編

気になったこと

Page 6: PHPという概念が存在しない退屈な世界_速度改善編

やたら遅い

Page 7: PHPという概念が存在しない退屈な世界_速度改善編

01.24 01.37 01.26 01.46 01.51 01.28 01.39 01.36 01.40 01.34

平均 1.36秒

以前作成した構成 Node.JS -> sh -> PHP BS

Page 8: PHPという概念が存在しない退屈な世界_速度改善編

シェルスクリプトでPHP BSを起動し curlでアクセスするという回りくどいことをしているから遅いのでは?

Page 9: PHPという概念が存在しない退屈な世界_速度改善編

CGI SAPIを使おう

Page 10: PHPという概念が存在しない退屈な世界_速度改善編

#!/bin/sh export LD_LIBRARY_PATH=`pwd`'/lib:'$LD_LIBRARY_PATH ./php/php -S localhost:8080 -t ./cakeapp/webroot & mkdir -p /tmp/cakephp/logs mkdir -p /tmp/cakephp/tmp/cache mkdir /tmp/cakephp/tmp/cache/models mkdir /tmp/cakephp/tmp/cache/persistent mkdir /tmp/cakephp/tmp/cache/views curl http://localhost:8080/$1 kill $!

Built-in Serverの起動

CakePHPを動かすための設定

Built-in ServerにリクエストBuit-in Serverの停止 (停止しないとLambdaのTimeoutまで動き続ける)

Builtin Serverの場合

Page 11: PHPという概念が存在しない退屈な世界_速度改善編

#!/bin/sh export LD_LIBRARY_PATH=`pwd`'/lib:'$LD_LIBRARY_PATH mkdir -p /tmp/cakephp/logs mkdir -p /tmp/cakephp/tmp/cache mkdir /tmp/cakephp/tmp/cache/models mkdir /tmp/cakephp/tmp/cache/persistent mkdir /tmp/cakephp/tmp/cache/views export SCRIPT_FILENAME=./cakeapp/webroot/index.php export REDIRECT_STATUS=true export REQUEST_URI='/'$1 ./php/php-cgi --no-header

ENV設定

CGI-SAPIの場合

Page 12: PHPという概念が存在しない退屈な世界_速度改善編

01.22 01.19 01.23 01.29 01.14 01.33 01.21 01.19 01.24 01.23

平均 1.23秒

Node.JS -> sh -> PHP CGI

Page 13: PHPという概念が存在しない退屈な世界_速度改善編

ちょっと速くなったかも でも遅い

Page 14: PHPという概念が存在しない退屈な世界_速度改善編

Node.JSからシェルスクリプト経由で PHPを起動しているから遅いのではないか

Page 15: PHPという概念が存在しない退屈な世界_速度改善編

exports.handler = function(event, context) { var exec = require('child_process').exec; var uri_path = "undefined" == typeof event.uri_path ? '' : event.uri_path; exec( "export LD_LIBRARY_PATH=`pwd`'/lib:'$LD_LIBRARY_PATH;" + "mkdir -p /tmp/cakephp/logs;" + "mkdir -p /tmp/cakephp/tmp/cache;" + "mkdir /tmp/cakephp/tmp/cache/models;" + "mkdir /tmp/cakephp/tmp/cache/persistent;" + "mkdir /tmp/cakephp/tmp/cache/views;" + "export REQUEST_METHOD=POST;" + "export SCRIPT_FILENAME=./cakeapp/webroot/index.php;" + "export REDIRECT_STATUS=true;" + "export REQUEST_URI='/'" + uri_path + ";" + "./php/php-cgi --no-header;", function (error, stdout, stderr) { context.succeed(stdout); }); };

Node.JSから直接起動するように修正

Page 16: PHPという概念が存在しない退屈な世界_速度改善編

01.22 01.33 01.20 01.29 01.40 01.25 01.38 01.21 01.21 01.17

平均 1.27秒

Node.JS -> PHP CGI

Page 17: PHPという概念が存在しない退屈な世界_速度改善編

全く変わらない

Page 18: PHPという概念が存在しない退屈な世界_速度改善編

もしかして

Page 19: PHPという概念が存在しない退屈な世界_速度改善編
Page 20: PHPという概念が存在しない退屈な世界_速度改善編

AWS LambdaのMemoryを増やしてみた

Page 21: PHPという概念が存在しない退屈な世界_速度改善編

00.39 00.23 00.23 00.36 00.23 00.22 00.22 00.28 00.21 00.30

平均 0.27秒

Page 22: PHPという概念が存在しない退屈な世界_速度改善編

やったー速くなったよー

Page 23: PHPという概念が存在しない退屈な世界_速度改善編

まとめ

• 安心してください、(AWS LambdaでPHP)使えますよ

• AWS Lambdaはメモリを増やせば速く動く