123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- package test
- import (
- "encoding/json"
- "github.com/json-iterator/go"
- "io/ioutil"
- "os"
- "testing"
- )
- //func Test_large_file(t *testing.T) {
- // file, err := os.Open("/tmp/large-file.json")
- // if err != nil {
- // t.Fatal(err)
- // }
- // iter := Parse(file, 4096)
- // count := 0
- // for iter.ReadArray() {
- // iter.Skip()
- // count++
- // }
- // if count != 11351 {
- // t.Fatal(count)
- // }
- //}
- func init() {
- ioutil.WriteFile("/tmp/large-file.json", []byte(`[{
- "person": {
- "id": "d50887ca-a6ce-4e59-b89f-14f0b5d03b03",
- "name": {
- "fullName": "Leonid Bugaev",
- "givenName": "Leonid",
- "familyName": "Bugaev"
- },
- "email": "leonsbox@gmail.com",
- "gender": "male",
- "location": "Saint Petersburg, Saint Petersburg, RU",
- "geo": {
- "city": "Saint Petersburg",
- "state": "Saint Petersburg",
- "country": "Russia",
- "lat": 59.9342802,
- "lng": 30.3350986
- },
- "bio": "Senior engineer at Granify.com",
- "site": "http://flickfaver.com",
- "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/d50887ca-a6ce-4e59-b89f-14f0b5d03b03",
- "employment": {
- "name": "www.latera.ru",
- "title": "Software Engineer",
- "domain": "gmail.com"
- },
- "facebook": {
- "handle": "leonid.bugaev"
- },
- "github": {
- "handle": "buger",
- "id": 14009,
- "avatar": "https://avatars.githubusercontent.com/u/14009?v=3",
- "company": "Granify",
- "blog": "http://leonsbox.com",
- "followers": 95,
- "following": 10
- },
- "twitter": {
- "handle": "flickfaver",
- "id": 77004410,
- "bio": null,
- "followers": 2,
- "following": 1,
- "statuses": 5,
- "favorites": 0,
- "location": "",
- "site": "http://flickfaver.com",
- "avatar": null
- },
- "linkedin": {
- "handle": "in/leonidbugaev"
- },
- "googleplus": {
- "handle": null
- },
- "angellist": {
- "handle": "leonid-bugaev",
- "id": 61541,
- "bio": "Senior engineer at Granify.com",
- "blog": "http://buger.github.com",
- "site": "http://buger.github.com",
- "followers": 41,
- "avatar": "https://d1qb2nb5cznatu.cloudfront.net/users/61541-medium_jpg?1405474390"
- },
- "klout": {
- "handle": null,
- "score": null
- },
- "foursquare": {
- "handle": null
- },
- "aboutme": {
- "handle": "leonid.bugaev",
- "bio": null,
- "avatar": null
- },
- "gravatar": {
- "handle": "buger",
- "urls": [
- ],
- "avatar": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510",
- "avatars": [
- {
- "url": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510",
- "type": "thumbnail"
- }
- ]
- },
- "fuzzy": false
- },
- "company": "hello"
- }]`), 0666)
- }
- /*
- 200000 8886 ns/op 4336 B/op 6 allocs/op
- 50000 34244 ns/op 6744 B/op 14 allocs/op
- */
- func Benchmark_jsoniter_large_file(b *testing.B) {
- b.ReportAllocs()
- for n := 0; n < b.N; n++ {
- file, _ := os.Open("/tmp/large-file.json")
- iter := jsoniter.Parse(jsoniter.ConfigDefault, file, 4096)
- count := 0
- iter.ReadArrayCB(func(iter *jsoniter.Iterator) bool {
- // Skip() is strict by default, use --tags jsoniter-sloppy to skip without validation
- iter.Skip()
- count++
- return true
- })
- file.Close()
- if iter.Error != nil {
- b.Error(iter.Error)
- }
- }
- }
- func Benchmark_json_large_file(b *testing.B) {
- b.ReportAllocs()
- for n := 0; n < b.N; n++ {
- file, _ := os.Open("/tmp/large-file.json")
- bytes, _ := ioutil.ReadAll(file)
- file.Close()
- result := []struct{}{}
- err := json.Unmarshal(bytes, &result)
- if err != nil {
- b.Error(err)
- }
- }
- }
|