2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel コレクション型のmapとpluckはどちらが早いのか

Posted at

概要

Laravelで特定のコレクション型の変数から「idがkeyで名前がvalueの値を抽出したい」というケースがありました。

その時にmappluckで両方の書き方がある(厳密にいうと全く同じ形式の値にはならないが、その後の使い方は似ることが多い)が、どちらの方がパフォーマンス的には良いのか疑問に思ったので検証してみました。

検証方法

・測定する項目は「メモリ使用量」と「処理時間」とする。
・対象のコレクション型の変数は100個のオブジェクトが入っているものを使用する。
・10回の測定を終えて、それぞれの平均値を比較する。

対象データの例

今回使用するのは下記のようなオブジェクトが100個ほどあるコレクション型の値である。
そこから「idがkeyで名前がvalueの値を抽出したい」というケースを実践する。

{
    "id":1,
    "name":"hogehoge",
    "birthday":"2022-11-05",
    "department":"Sales"
}

関数それぞれの使い方

map
$fuga = $hoge->map(function ($value) {
    return [$value['id'] => $value['name']];
});
pluck
$fuga = $hoge->pluck('name', 'id');

結果

関数名 メモリ使用量(MB) [平均値] 処理速度(秒)
map 0.108... 0.001070356369
pluck 0.073... 0.001692199707

計測データ

[n回目] 関数名 処理時間(秒)
1 map 0.0026521682739258
1 pluck 0.0014410018920898 
2 map 0.00081801414489746
2 pluck 0.0017158985137939
3 map 0.00068807601928711
3 pluck 0.0018410682678223
4 map 0.0010271072387695
4 pluck 0.002047061920166
5 map 0.00060510635375977
5 pluck 0.0014269351959229
6 map 0.00087904930114746
6 pluck 0.0018661022186279
7 map 0.00098681449890137
7 pluck 0.0016438961029053
8 map 0.0010371208190918
8 pluck 0.0013530254364014
9 map 0.00086712837219238
9 pluck 0.0017991065979004
10 map 0.0011429786682129
10 pluck 0.0017879009246826

まとめ

Laravelで特定の値から「idだけ抽出したコレクション型の値を作りたい」「idがkeyで名前がvalueの値を抽出したい」などのケースにおいて、

処理速度ではmapの方が速そうだが、メモリ使用量ではpluckの方が優った。
結局、どっちを使ったら良いかはケースバイケースですね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?