github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/jsoni/benchmarks/jsoniter_large_file_test.go (about)

     1  package test
     2  
     3  import (
     4  	"encoding/json"
     5  	"io/ioutil"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/bingoohuang/gg/pkg/jsoni"
    10  )
    11  
    12  //func Test_large_file(t *testing.T) {
    13  //	file, err := os.Open("/tmp/large-file.json")
    14  //	if err != nil {
    15  //		t.Fatal(err)
    16  //	}
    17  //	iter := Parse(file, 4096)
    18  //	count := 0
    19  //	for iter.ReadArray() {
    20  //		iter.Skip()
    21  //		count++
    22  //	}
    23  //	if count != 11351 {
    24  //		t.Fatal(count)
    25  //	}
    26  //}
    27  
    28  func init() {
    29  	ioutil.WriteFile("/tmp/large-file.json", []byte(`[{
    30    "person": {
    31      "id": "d50887ca-a6ce-4e59-b89f-14f0b5d03b03",
    32      "name": {
    33        "fullName": "Leonid Bugaev",
    34        "givenName": "Leonid",
    35        "familyName": "Bugaev"
    36      },
    37      "email": "leonsbox@gmail.com",
    38      "gender": "male",
    39      "location": "Saint Petersburg, Saint Petersburg, RU",
    40      "geo": {
    41        "city": "Saint Petersburg",
    42        "state": "Saint Petersburg",
    43        "country": "Russia",
    44        "lat": 59.9342802,
    45        "lng": 30.3350986
    46      },
    47      "bio": "Senior engineer at Granify.com",
    48      "site": "http://flickfaver.com",
    49      "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/d50887ca-a6ce-4e59-b89f-14f0b5d03b03",
    50      "employment": {
    51        "name": "www.latera.ru",
    52        "title": "Software Engineer",
    53        "domain": "gmail.com"
    54      },
    55      "facebook": {
    56        "handle": "leonid.bugaev"
    57      },
    58      "github": {
    59        "handle": "buger",
    60        "id": 14009,
    61        "avatar": "https://avatars.githubusercontent.com/u/14009?v=3",
    62        "company": "Granify",
    63        "blog": "http://leonsbox.com",
    64        "followers": 95,
    65        "following": 10
    66      },
    67      "twitter": {
    68        "handle": "flickfaver",
    69        "id": 77004410,
    70        "bio": null,
    71        "followers": 2,
    72        "following": 1,
    73        "statuses": 5,
    74        "favorites": 0,
    75        "location": "",
    76        "site": "http://flickfaver.com",
    77        "avatar": null
    78      },
    79      "linkedin": {
    80        "handle": "in/leonidbugaev"
    81      },
    82      "googleplus": {
    83        "handle": null
    84      },
    85      "angellist": {
    86        "handle": "leonid-bugaev",
    87        "id": 61541,
    88        "bio": "Senior engineer at Granify.com",
    89        "blog": "http://buger.github.com",
    90        "site": "http://buger.github.com",
    91        "followers": 41,
    92        "avatar": "https://d1qb2nb5cznatu.cloudfront.net/users/61541-medium_jpg?1405474390"
    93      },
    94      "klout": {
    95        "handle": null,
    96        "score": null
    97      },
    98      "foursquare": {
    99        "handle": null
   100      },
   101      "aboutme": {
   102        "handle": "leonid.bugaev",
   103        "bio": null,
   104        "avatar": null
   105      },
   106      "gravatar": {
   107        "handle": "buger",
   108        "urls": [
   109        ],
   110        "avatar": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510",
   111        "avatars": [
   112          {
   113            "url": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510",
   114            "type": "thumbnail"
   115          }
   116        ]
   117      },
   118      "fuzzy": false
   119    },
   120    "company": "hello"
   121  }]`), 0o666)
   122  }
   123  
   124  /*
   125  200000	      8886 ns/op	    4336 B/op	       6 allocs/op
   126  50000	     34244 ns/op	    6744 B/op	      14 allocs/op
   127  */
   128  func Benchmark_jsoniter_large_file(b *testing.B) {
   129  	b.ReportAllocs()
   130  	for n := 0; n < b.N; n++ {
   131  		file, _ := os.Open("/tmp/large-file.json")
   132  		iter := jsoni.Parse(jsoni.ConfigDefault, file, 4096)
   133  		count := 0
   134  		iter.ReadArrayCB(func(iter *jsoni.Iterator) bool {
   135  			// Skip() is strict by default, use --tags jsoniter-sloppy to skip without validation
   136  			iter.Skip()
   137  			count++
   138  			return true
   139  		})
   140  		file.Close()
   141  		if iter.Error != nil {
   142  			b.Error(iter.Error)
   143  		}
   144  	}
   145  }
   146  
   147  func Benchmark_json_large_file(b *testing.B) {
   148  	b.ReportAllocs()
   149  	for n := 0; n < b.N; n++ {
   150  		file, _ := os.Open("/tmp/large-file.json")
   151  		bytes, _ := ioutil.ReadAll(file)
   152  		file.Close()
   153  		result := []struct{}{}
   154  		err := json.Unmarshal(bytes, &result)
   155  		if err != nil {
   156  			b.Error(err)
   157  		}
   158  	}
   159  }