Advertisement
Guest User

Untitled

a guest
Apr 30th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.45 KB | None | 0 0
  1. 'use strict';
  2.  
  3. var Benchmark = require('benchmark');
  4.  
  5. var strings = [
  6. /* 0 */ 'lastname',
  7. /* 1 */ 'firstname123@gmail.com',
  8. /* 2 */ 'line\nbreak',
  9. /* 3 */ '"supercalifra\r\ngilisticexpialidocious"',
  10. /* 4 */ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
  11. /* 5 */ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\nUt enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
  12. /* 6 */ JSON.stringify({name: 'John Brown', id: 123456789, now: new Date(), settings: {on: true, value: 5, defaultView: 'activity'}}),
  13. ];
  14. var string = strings[process.argv[2] || 0];
  15.  
  16. var chars_g = /[\0\b\t\n\r\x1a\"\'\\]/g;
  17.  
  18. function charReplacer(s) {
  19. switch (s) {
  20. case '\0': return '\\0';
  21. case '\n': return '\\n';
  22. case '\r': return '\\r';
  23. case '\b': return '\\b';
  24. case '\t': return '\\t';
  25. case '\x1a': return '\\Z';
  26. default: return '\\' + s;
  27. }
  28. }
  29.  
  30. function escapeString0(val) {
  31. return "'" + val.replace(chars_g, charReplacer) + "'";
  32. }
  33.  
  34. function escapeString1(val) {
  35. var escapedVal = '';
  36. var chunkIndex = 0;
  37.  
  38. for (var i = 0; i < val.length; i++) {
  39. switch (val.charCodeAt(i)) {
  40. case 0: // '\0'
  41. escapedVal += val.slice(chunkIndex, i) + '\\0';
  42. break;
  43. case 8: // '\b'
  44. escapedVal += val.slice(chunkIndex, i) + '\\b';
  45. break;
  46. case 9: // '\t'
  47. escapedVal += val.slice(chunkIndex, i) + '\\t';
  48. break;
  49. case 10: // '\n'
  50. escapedVal += val.slice(chunkIndex, i) + '\\n';
  51. break;
  52. case 13: // '\r'
  53. escapedVal += val.slice(chunkIndex, i) + '\\r';
  54. break;
  55. case 26: // '\x1a'
  56. escapedVal += val.slice(chunkIndex, i) + '\\Z';
  57. break;
  58. case 34: // '"'
  59. case 39: // '\''
  60. case 92: // '\\'
  61. escapedVal += val.slice(chunkIndex, i) + '\\' + val[i];
  62. break;
  63. default:
  64. continue;
  65. }
  66. chunkIndex = i + 1;
  67. }
  68.  
  69. if (chunkIndex === 0) { // Nothing was escaped
  70. return "'" + val + "'";
  71. }
  72. if (chunkIndex < val.length) {
  73. return "'" + escapedVal + val.slice(chunkIndex) + "'";
  74. }
  75. return "'" + escapedVal + "'";
  76. }
  77.  
  78. var chars = /[\0\b\t\n\r\x1a\"\'\\]/;
  79. function escapeString2(val) {
  80. if (!chars.test(val)) {
  81. return "'" + val + "'";
  82. }
  83.  
  84. var escapedVal = '';
  85. var chunkIndex = 0;
  86.  
  87. for (var i = 0; i < val.length; i++) {
  88. switch (val.charCodeAt(i)) {
  89. case 0: // '\0'
  90. escapedVal += val.slice(chunkIndex, i) + '\\0';
  91. break;
  92. case 8: // '\b'
  93. escapedVal += val.slice(chunkIndex, i) + '\\b';
  94. break;
  95. case 9: // '\t'
  96. escapedVal += val.slice(chunkIndex, i) + '\\t';
  97. break;
  98. case 10: // '\n'
  99. escapedVal += val.slice(chunkIndex, i) + '\\n';
  100. break;
  101. case 13: // '\r'
  102. escapedVal += val.slice(chunkIndex, i) + '\\r';
  103. break;
  104. case 26: // '\x1a'
  105. escapedVal += val.slice(chunkIndex, i) + '\\Z';
  106. break;
  107. case 34: // '"'
  108. case 39: // '\''
  109. case 92: // '\\'
  110. escapedVal += val.slice(chunkIndex, i) + '\\' + val[i];
  111. break;
  112. default:
  113. continue;
  114. }
  115. chunkIndex = i + 1;
  116. }
  117.  
  118. if (chunkIndex < val.length) {
  119. return "'" + escapedVal + val.slice(chunkIndex) + "'";
  120. }
  121. return "'" + escapedVal + "'";
  122. }
  123.  
  124. function escapeString3(val) {
  125. var chunkIndex = chars_g.lastIndex = 0;
  126. var escapedVal = '';
  127. var match;
  128.  
  129. while ((match = chars_g.exec(val))) {
  130. switch (match[0]) {
  131. case '\0':
  132. escapedVal += val.slice(chunkIndex, match.index) + '\\0';
  133. break;
  134. case '\b':
  135. escapedVal += val.slice(chunkIndex, match.index) + '\\b';
  136. break;
  137. case '\t':
  138. escapedVal += val.slice(chunkIndex, match.index) + '\\t';
  139. break;
  140. case '\n':
  141. escapedVal += val.slice(chunkIndex, match.index) + '\\n';
  142. break;
  143. case '\r':
  144. escapedVal += val.slice(chunkIndex, match.index) + '\\r';
  145. break;
  146. case '\x1a':
  147. escapedVal += val.slice(chunkIndex, match.index) + '\\Z';
  148. break;
  149. default:
  150. escapedVal += val.slice(chunkIndex, match.index) + '\\' + match[0];
  151. break;
  152. }
  153. chunkIndex = chars_g.lastIndex;
  154. }
  155.  
  156. if (chunkIndex === 0) { // Nothing was escaped
  157. return "'" + val + "'";
  158. }
  159. if (chunkIndex < val.length) {
  160. return "'" + escapedVal + val.slice(chunkIndex) + "'";
  161. }
  162. return "'" + escapedVal + "'";
  163. }
  164.  
  165. new Benchmark.Suite()
  166. .add('escapeString0', () => {
  167. escapeString0(string);
  168. })
  169. .add('escapeString1', () => {
  170. escapeString1(string);
  171. })
  172. .add('escapeString2', () => {
  173. escapeString2(string);
  174. })
  175. .add('escapeString3', () => {
  176. escapeString3(string);
  177. })
  178. .on('cycle', function(event) {
  179. console.log(String(event.target));
  180. })
  181. .on('complete', function() {
  182. console.log('Fastest is ' + this.filter('fastest').map('name'));
  183. })
  184. .run();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement