PHP製APIと通常PHPサイト、どちらが軽い?メモリ消費量を調べてみた
新サイトをSPAで作るかPHPで作るかを悩んでいたので、どちらが軽量なのか、メモリ消費量を比べてみました。
公開日:2019年4月8日
前提条件
どちらもPHPスクリプトで、
- API版(単純にデータを出力するパターン)
- HTML版(PHP処理は同じでHTMLも一緒に出力するパターン)
で比べました。
環境はローカル環境でPHPバージョンは7.3.2です。
テストスクリプト
API版
PHP起動時
まずは、PHPを呼び出した時点
<?php
$mem = memory_get_usage();
$mem = number_format($mem);
print("Memory:{$mem}");
Memory:391,464
391KBでした。
データを読み込み
$data = '[{"id":1, .....]';
echo $data;
$mem = memory_get_usage();
$mem = number_format($mem);
print("Memory:{$mem}");
Memory:391,944
データの分だけ増えた感じですね。
HTML版
PHP起動時
<?php
$mem = memory_get_usage();
$mem = number_format($mem);
print("Memory:{$mem}");
Memory:389,992
データ出力時
//データ保存処理
.
.
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
.
.
.
<?php
$mem = memory_get_usage();
$mem = number_format($mem);
print("Memory:{$mem}");
Memory:442,088
HTMLファイルのサイズが5KBほどだったので、その分増えているような感じです。HTMLの容量はそこまで大きくならないケースが多いので、APIでもHTML出力でもメモリ消費量の差は誤差レベルな気がします。
## 何がメモリを食うのか
メモリを食うというイメージがあったのですが、プレーンなPHPだとあまり消費量は多くないみたいなので、何が消費するのかオリジナルのフレームワークで検証してみました。
ファイルの読み込み
$req_dir = [
__DIR__ . '/../models/',
__DIR__ . '/../modules/',
__DIR__ . '/../controllers/',
];
+数10KBくらいで、ファイルを読み込んだ分だけ重くなったイメージでした。
ライブラリの読み込み
routerに以前ノートに書いたAltRouter、ORMマッパーにEloquentを使っているんですが、どちらもライブラリを読み込んだだけではそこまでメモリを消費されませんでした。
ライブラリの実行
AltRouterは、そもそも軽量なのでライブラリを起動させてもそこまで変化はなかったんですが、Eloquentはインスタンスを読み込んだだけで1MB近くメモリ使用量が増加しました。
PHPサイトが重い理由はフレームワーク??
PHPサイトといえば、フレームワークを使うことが多いと思いますが、フレームワークはライブラリの集合体みたいになっているので、ライブラリを多く読み込むことで1リクエストあたりのメモリ消費量が増えると想定できます。
PHP製APIと通常PHPサイトのどちらがメモリ消費量が少ないのかを調べてみました。
SPA + APIなのか、通常PHPなのかをよく悩むんですが、メモリ消費量という観点では、どちらというと「フレームワークを使うのか」で判断基準を決めるのが良さそうです。
新着ノート
-
Gitlabの2段階認証下でコンテナレジストリにPushする方法
gitlab
公開日:2020年12月23日
-
HUGO
公開日:2020年4月27日
新着コード
-
cURLでCloudflare APIでキャッシュを削除する
cloudflare
公開日:2020年5月1日
-
iOS Safariでselectを含む要素にoverflow-y:scrollすると横にスクロールする時の対応
iOS
公開日:2020年4月15日