performance.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var util = require('util')
  2. , diff = require('..')
  3. , data = require('./practice-data')
  4. ;
  5. var cycle = -1
  6. , i
  7. , len = data.length
  8. , prior = {}
  9. , comparand
  10. , records
  11. , roll = []
  12. , stat
  13. , stats = []
  14. , mark, elapsed, avg = { diff: { ttl: 0 }, apply: { ttl: 0 } }, ttl = 0
  15. ;
  16. mark = process.hrtime();
  17. while (++cycle < 10) {
  18. i = -1;
  19. while (++i < len) {
  20. stats.push(stat = { mark: process.hrtime() });
  21. comparand = roll[i] || data[i];
  22. stat.diff = { mark: process.hrtime() };
  23. records = diff(prior, comparand);
  24. stat.diff.intv = process.hrtime(stat.diff.mark);
  25. if (records) {
  26. stat.apply = { count: diff.length, mark: process.hrtime() };
  27. records.forEach(function (ch) {
  28. diff.applyChange(prior, comparand, ch);
  29. });
  30. stat.apply.intv = process.hrtime(stat.apply.mark);
  31. prior = comparand;
  32. }
  33. stat.intv = process.hrtime(stat.mark);
  34. }
  35. }
  36. function ms(intv) {
  37. return (intv[0] * 1e9 + intv[1] / 1e6);
  38. }
  39. elapsed = ms(process.hrtime(mark));
  40. stats.forEach(function (stat) {
  41. stat.elapsed = ms(stat.intv);
  42. stat.diff.elapsed = ms(stat.diff.intv);
  43. avg.diff.ttl += stat.diff.elapsed;
  44. if (stat.apply) {
  45. stat.apply.elapsed = ms(stat.apply.intv);
  46. ttl += stat.apply.count;
  47. avg.apply.ttl += stat.apply.elapsed;
  48. }
  49. });
  50. avg.diff.avg = avg.diff.ttl / ttl;
  51. avg.apply.avg = avg.apply.ttl / ttl;
  52. console.log('Captured '.concat(stats.length, ' samples with ', ttl, ' combined differences in ', elapsed, 'ms'));
  53. console.log('\tavg diff: '.concat(avg.diff.avg, 'ms or ', (1 / avg.diff.avg), ' per ms'));
  54. console.log('\tavg apply: '.concat(avg.apply.avg, 'ms or ', (1 / avg.apply.avg), ' per ms'));