0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PerlAdvent Calendar 2024

Day 7

JSON::PPのdecodeメソッドの速度比較

Last updated at Posted at 2024-12-07

この記事はPerl Advent Calendar 2024の7日目になります。

概要

JSON::PPのdecode_jsonメソッドの説明ではこれらは一緒だけど、速さが違うとありましたので、どの程度違うのか調べることにします。
ただし、検証に使用するJSON文字列には日本語は含まず半角英数のみとします〔特定条件での調査〕。

$perl_scalar = decode_json $json_text
$perl_scalar = JSON::PP->new->utf8->decode($json_text)

比較するメソッド

  • decode_json
  • JSON::PP->new->utf8->decode
    • 以上2つは与えられた文字列がutf8文字列としてデコード
  • JSON::PP->new->utf8(0)->decode
    • 内部コードとしてデコード

方法とコード

1レコード当たり〔36項目 700バイト〕を5000レコードの文字列としそれを50回デコードすることとし、その速度を比較します。

#!perl
use v5.40;
use JSON::PP;
use utf8;
use Time::HiRes qw/gettimeofday tv_interval/;

my $jsonstr = 'JSON文字列'
my $c = "[" . $jsonstr;
for (my $i=1; $i<5000; $i++){
    $c .= "," . $jsonstr;
}
$c .=  "]";

for(my $i=0; $i<50; $i++){
    &pGo;
}

sub pGo{
    my $starttime = [gettimeofday];

    my $x1 = decode_json($c);
    my $raptime1 = tv_interval($starttime);
    
    my $x2 = JSON::PP->new->utf8->decode($c);
    my $raptime2 = tv_interval($starttime);
    
    my $x3 = JSON::PP->new->utf8(0)->decode($c);
    my $raptime3 = tv_interval($starttime);;
    
    printf("A:%0.6f\n",$raptime1);
    printf("B:%0.6f\n",$raptime2-$raptime1);
    printf("C:%0.6f\n",$raptime3-$raptime2);
}

1;

結果

メソッド 50回処理時間(秒)
decode_json 50.96774
JSON::PP->new->utf8->decode 50.99066
JSON::PP->new->utf8(0)->decode 50.97722

私の端末では、3.5MByte程度の文字列のデコードにいずれも50回で50秒程でした。

まとめ

 1件あたりの速度の違いはについては微々たるものであるとわかりました。
(12月13日追加)追加の実証実験が必要かもしれません。正しい結果が出ているか不安が大きいです。
 use utf8;を使用していて、JSON文字列に日本語が含まれるときは、上記2つにおいてはEncodeモジュールでencode_utf8()を行う必要があるため、速度的には、3番目のJSON::PP->new->utf8(0)->decodeが一番早いのかもしれません。
 思い立って実施したので、不備不足等、コメント欄で指摘いただけるとありがたいです。
 以上です。ありがとうございました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?