benchmark.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /* IMPORT */
  2. const fs = require ( 'fs' ),
  3. os = require ( 'os' ),
  4. path = require ( 'path' ),
  5. delay = require ( 'promise-resolve-timeout' ),
  6. writeFileAtomic = require ( 'write-file-atomic' ),
  7. {writeFile, writeFileSync} = require ( '../dist' );
  8. /* BENCHMARK */
  9. const TEMP = os.tmpdir (),
  10. DST = i => path.join ( TEMP, `atomically-temp-${i}.txt` ),
  11. ITERATIONS = 250;
  12. const runSingleAsync = async ( name, fn, buffer, options ) => {
  13. console.time ( name );
  14. for ( let i = 0; i < ITERATIONS; i++ ) {
  15. await fn ( DST ( i ), buffer, options );
  16. }
  17. console.timeEnd ( name );
  18. await delay ( 1000 );
  19. };
  20. const runSingleSync = async ( name, fn, buffer, options ) => {
  21. console.time ( name );
  22. for ( let i = 0; i < ITERATIONS; i++ ) {
  23. fn ( DST ( i ), buffer, options );
  24. }
  25. console.timeEnd ( name );
  26. await delay ( 1000 );
  27. };
  28. const runAllDummy = () => { // Preparation run
  29. runSingleSync ( 'dummy', fs.writeFileSync, '' );
  30. };
  31. const runAllAsync = async ( name, buffer ) => {
  32. await runSingleAsync ( `${name} -> async -> write-file-atomic`, writeFileAtomic, buffer );
  33. await runSingleAsync ( `${name} -> async -> write-file-atomic (fastest)`, writeFileAtomic, buffer, { fsync: false } );
  34. await runSingleAsync ( `${name} -> async -> atomically`, writeFile, buffer );
  35. await runSingleAsync ( `${name} -> async -> atomically (faster)`, writeFile, buffer, { mode: false, chown: false, fsyncWait: false } );
  36. await runSingleAsync ( `${name} -> async -> atomically (fastest)`, writeFile, buffer, { mode: false, chown: false, fsync: false } );
  37. };
  38. const runAllSync = ( name, buffer ) => {
  39. runSingleSync ( `${name} -> sync -> write-file-atomic`, writeFileAtomic.sync, buffer );
  40. runSingleSync ( `${name} -> sync -> write-file-atomic (fastest)`, writeFileAtomic.sync, buffer, { fsync: false } );
  41. runSingleSync ( `${name} -> sync -> atomically`, writeFileSync, buffer );
  42. runSingleSync ( `${name} -> sync -> atomically (faster)`, writeFileSync, buffer, { mode: false, chown: false, fsyncWait: false } );
  43. runSingleSync ( `${name} -> sync -> atomically (fastest)`, writeFileSync, buffer, { mode: false, chown: false, fsync: false } );
  44. };
  45. const runAll = async ( name, buffer ) => {
  46. await runAllAsync ( name, buffer );
  47. console.log ( '-------------------' );
  48. runAllSync ( name, buffer );
  49. };
  50. const run = async () => {
  51. runAllDummy ();
  52. console.log ( '===================' );
  53. await runAll ( '100kb', Buffer.allocUnsafe ( 100 * 1024 ) );
  54. console.log ( '===================' );
  55. await runAll ( '10kb', Buffer.allocUnsafe ( 10 * 1024 ) );
  56. console.log ( '===================' );
  57. await runAll ( '1kb', Buffer.allocUnsafe ( 1024 ) );
  58. console.log ( '===================' );
  59. };
  60. run ();