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 }