No Description

benchmark.js 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. import RNTest from './react-native-testkit/'
  2. import React from 'react'
  3. import RNFetchBlob from 'react-native-fetch-blob'
  4. import {
  5. Text,
  6. View,
  7. Platform,
  8. Dimensions,
  9. Image,
  10. } from 'react-native';
  11. const fs = RNFetchBlob.fs
  12. const { Assert, Comparer, Info, prop } = RNTest
  13. const describe = RNTest.config({
  14. group : '0.8.0',
  15. run : true,
  16. expand : true,
  17. timeout : 999999999,
  18. })
  19. const { TEST_SERVER_URL, TEST_SERVER_URL_SSL, FILENAME, DROPBOX_TOKEN, styles } = prop()
  20. const dirs = RNFetchBlob.fs.dirs
  21. false && describe('upload BASE64 v.s. Storage', (report, done) => {
  22. let b64data = null
  23. let storageFile = dirs.DocumentDir + '/benchmark-cache'
  24. let b64res, storageRes
  25. let iteration = 50
  26. let target = `${TEST_SERVER_URL}/public/1mb-dummy`
  27. RNFetchBlob
  28. .config({ path : storageFile })
  29. .fetch('GET', target)
  30. .then((res) => res.readFile('base64'))
  31. .then((data) => {
  32. b64data = data
  33. report(
  34. <Info key="test data should correct">
  35. <Text>size of b64data = {data.length}</Text>
  36. </Info>)
  37. b64Test()
  38. })
  39. // base64 upload benchmark
  40. function b64Test() {
  41. let p = Promise.resolve()
  42. let begin = Date.now()
  43. let count = 0
  44. for(let i=0; i< iteration; i++) {
  45. p = p.then(() => {
  46. if(++count <iteration){
  47. report(
  48. <Info key="benchmark progress" uid="report">
  49. <Text style={{textAlign:'center'}}>BASE64 {count}/{iteration}</Text>
  50. </Info>)
  51. return RNFetchBlob.fetch('POST', `${TEST_SERVER_URL}/echo`, {}, b64data)
  52. }
  53. else {
  54. b64res = Date.now() - begin
  55. storageTest()
  56. }
  57. })
  58. }
  59. }
  60. // storage upload benchmark
  61. function storageTest() {
  62. let p = Promise.resolve()
  63. let begin = Date.now()
  64. let count = 0
  65. for(let i=0; i< iteration; i++) {
  66. p = p.then(() => {
  67. if(++count < iteration){
  68. report(
  69. <Info key="benchmark progress" uid="report">
  70. <Text style={{textAlign:'center'}}>Storage {count}/{iteration}</Text>
  71. </Info>)
  72. return RNFetchBlob.fetch('POST', `${TEST_SERVER_URL}/echo`, {}, RNFetchBlob.wrap(storageFile))
  73. }
  74. else {
  75. storageRes = Date.now() - begin
  76. summary()
  77. }
  78. })
  79. }
  80. }
  81. function summary() {
  82. report(
  83. <Info key="BASE64">
  84. <Text>{`BASE64 ${b64res/iteration} ms/req`}</Text>
  85. </Info>,
  86. <Info key="Storage">
  87. <Text>{`Storage ${storageRes/iteration} ms/req`}</Text>
  88. </Info>)
  89. done()
  90. }
  91. })
  92. false && describe('write file BASE64 v.s. URI', (report, done) => {
  93. let iteration = 200
  94. let target = `${TEST_SERVER_URL}/public/6mb-dummy`
  95. let sourceURI = dirs.DocumentDir + '/benchmark2-source'
  96. let sourceBASE64 = null
  97. let b64Res = 0
  98. let uriRes = 0
  99. RNFetchBlob.fetch('GET', target)
  100. .then((res) => {
  101. sourceBASE64 = res.base64()
  102. return fs.writeFile(sourceURI, res.base64(), 'base64')
  103. })
  104. .then(() => {
  105. let p = Promise.resolve()
  106. let begin = Date.now()
  107. let count = 0
  108. for(let i=0; i< iteration; i++) {
  109. p = p.then(() => {
  110. if(++count < iteration){
  111. report(
  112. <Info key="benchmark progress" uid="report2">
  113. <Text style={{textAlign:'center'}}>BASE64 {count}/{iteration}</Text>
  114. </Info>)
  115. return fs.writeFile(dirs.DocumentDir +'/benchmark2-target', sourceBASE64, 'base64')
  116. }
  117. else {
  118. b64Res = Date.now() - begin
  119. uriTest()
  120. }
  121. })
  122. }
  123. })
  124. function uriTest() {
  125. let p = Promise.resolve()
  126. let begin = Date.now()
  127. let count = 0
  128. for(let i=0; i< iteration; i++) {
  129. p = p.then(() => {
  130. if(++count < iteration){
  131. report(
  132. <Info key="benchmark progress" uid="report2">
  133. <Text style={{textAlign:'center'}}>URI {count}/{iteration}</Text>
  134. </Info>)
  135. return fs.writeFile(dirs.DocumentDir +'/benchmark2-target', sourceURI, 'uri')
  136. }
  137. else {
  138. uriRes = Date.now() - begin
  139. summary()
  140. }
  141. })
  142. }
  143. }
  144. function summary() {
  145. report(
  146. <Info key="BASE64 - writeFile">
  147. <Text>{`BASE64 ${b64Res/iteration} ms/req`}</Text>
  148. </Info>,
  149. <Info key="URI - writeFile">
  150. <Text>{`URI ${uriRes/iteration} ms/req`}</Text>
  151. </Info>)
  152. done()
  153. }
  154. })
  155. describe('read file benchmark', (report, done) => {
  156. let iteration = 50
  157. let target = `${TEST_SERVER_URL}/public/1mb-dummy`
  158. let source = dirs.DocumentDir + '/benchmark3-source'
  159. let res = {}
  160. RNFetchBlob.fetch('GET', target)
  161. .then((res) => {
  162. return fs.writeFile(source, res.base64(), 'base64')
  163. })
  164. .then(() => {
  165. test('base64', () => {
  166. test('ascii', () => {
  167. test('utf8', summary)
  168. })
  169. })
  170. })
  171. function test(encode, cb) {
  172. let p = Promise.resolve()
  173. let begin = Date.now()
  174. let count = 0
  175. for(let i=0; i< iteration; i++) {
  176. p = p.then(() => {
  177. if(++count < iteration){
  178. report(
  179. <Info key="benchmark progress" uid="report3">
  180. <Text style={{textAlign:'center'}}>{encode} {count}/{iteration}</Text>
  181. </Info>)
  182. return fs.readFile(source, encode)
  183. }
  184. else {
  185. res[encode] = Date.now() - begin
  186. cb()
  187. }
  188. })
  189. }
  190. }
  191. function summary() {
  192. report(
  193. <Info key="BASE64 - readFile">
  194. <Text>{`BASE64 ${res['base64']/iteration} ms/req`}</Text>
  195. </Info>,
  196. <Info key="ASCII - readFile">
  197. <Text>{`ASCII ${res['ascii']/iteration} ms/req`}</Text>
  198. </Info>,
  199. <Info key="UTF8 - readFile">
  200. <Text>{`UTF8 ${res['utf8']/iteration} ms/req`}</Text>
  201. </Info>)
  202. done()
  203. }
  204. })