jsoniter_large_file_test.go 3.6 KB

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