UNPKG

5.08 kBJavaScriptView Raw
1var Benchmark, COFFEE_CACHE_DIR, Promise, benchmarks, chalk, deRegister, exec, extend, fs, path, runClean, sample, suite, temp, theImporter,
2 slice = [].slice;
3
4Promise = require('bluebird');
5
6Benchmark = require('benchmark');
7
8benchmarks = require('beautify-benchmark');
9
10exec = require('child_process').execSync;
11
12fs = require('fs-jetpack');
13
14path = require('path');
15
16chalk = require('chalk');
17
18extend = require('extend');
19
20sample = function() {
21 return path.join.apply(path, [__dirname, 'samples'].concat(slice.call(arguments)));
22};
23
24temp = function() {
25 return path.join.apply(path, [__dirname, 'temp'].concat(slice.call(arguments)));
26};
27
28process.env.COFFEE_CACHE_DIR = COFFEE_CACHE_DIR = temp('.cache');
29
30fs.dir(temp(), {
31 empty: true
32});
33
34theImporter = null;
35
36runClean = function(type) {
37 deRegister();
38 switch (type) {
39 case 'coffee-script/register':
40 require('coffee-script/register');
41 break;
42 case 'coffee-register':
43 require('../');
44 }
45 return theImporter();
46};
47
48deRegister = function() {
49 var cached, cachedFile, i, item, j, k, largeModules, len, len1, len2, sampleFile, samples;
50 delete require.extensions['.coffee'];
51 delete require.extensions['.litcoffee'];
52 delete require.extensions['.coffee.md'];
53 delete require.cache[require.resolve('coffee-script/register')];
54 delete require.cache[require.resolve('coffee-script/lib/coffee-script/register')];
55 delete require.cache[require.resolve('../')];
56 samples = fs.list(sample());
57 for (i = 0, len = samples.length; i < len; i++) {
58 sampleFile = samples[i];
59 delete require.cache[sample(sampleFile)];
60 }
61 cached = fs.list(temp('.cache')) || [];
62 for (j = 0, len1 = cached.length; j < len1; j++) {
63 cachedFile = cached[j];
64 delete require.cache[temp('.cache', cachedFile)];
65 }
66 largeModules = Object.keys(require.cache).filter(function(path) {
67 return path.includes('simplyimport') || path.includes('simplywatch');
68 });
69 for (k = 0, len2 = largeModules.length; k < len2; k++) {
70 item = largeModules[k];
71 delete require.cache[item];
72 }
73};
74
75suite = function(name, options) {
76 return Benchmark.Suite(name, options).on('start', function() {
77 return console.log(chalk.dim(name));
78 }).on('cycle', function() {
79 return benchmarks.add(arguments[0].target);
80 }).on('complete', function() {
81 return benchmarks.log();
82 });
83};
84
85suite('3 small modules', {
86 onComplete: function() {
87 return fs.dir(temp(), {
88 empty: true
89 });
90 },
91 onStart: function() {
92 return theImporter = function() {
93 require('./samples/small1');
94 require('./samples/small2');
95 require('./samples/small3');
96 };
97 }
98}).add('coffee-script/register', function() {
99 return runClean('coffee-script/register');
100}).add('coffee-register (uncached)', function() {
101 process.env.COFFEE_NO_CACHE = true;
102 return runClean('coffee-register');
103}).add('coffee-register (cached)', function() {
104 delete process.env.COFFEE_NO_CACHE;
105 return runClean('coffee-register');
106}).run();
107
108suite('6 small modules', {
109 onComplete: function() {
110 return fs.dir(temp(), {
111 empty: true
112 });
113 },
114 onStart: function() {
115 return theImporter = function() {
116 require('./samples/small1');
117 require('./samples/small2');
118 require('./samples/small3');
119 require('./samples/small4');
120 require('./samples/small5');
121 return require('./samples/small6');
122 };
123 }
124}).add('coffee-script/register', function() {
125 return runClean('coffee-script/register');
126}).add('coffee-register (uncached)', function() {
127 process.env.COFFEE_NO_CACHE = true;
128 return runClean('coffee-register');
129}).add('coffee-register (cached)', function() {
130 delete process.env.COFFEE_NO_CACHE;
131 return runClean('coffee-register');
132}).run();
133
134suite('4 medium modules', {
135 onComplete: function() {
136 return fs.dir(temp(), {
137 empty: true
138 });
139 },
140 onStart: function() {
141 return theImporter = function() {
142 require('./samples/medium1');
143 require('./samples/medium2');
144 require('./samples/medium3');
145 return require('./samples/medium4');
146 };
147 }
148}).add('coffee-script/register', function() {
149 return runClean('coffee-script/register');
150}).add('coffee-register (uncached)', function() {
151 process.env.COFFEE_NO_CACHE = true;
152 return runClean('coffee-register');
153}).add('coffee-register (cached)', function() {
154 delete process.env.COFFEE_NO_CACHE;
155 return runClean('coffee-register');
156}).run();
157
158suite('2 large modules', {
159 onComplete: function() {
160 return fs.dir(temp(), {
161 empty: true
162 });
163 },
164 onStart: function() {
165 return theImporter = function() {
166 require('simplyimport/lib/simplyimport');
167 return require('simplywatch/lib/simplywatch');
168 };
169 }
170}).add('coffee-script/register', function() {
171 return runClean('coffee-script/register');
172}).add('coffee-register (uncached)', function() {
173 process.env.COFFEE_NO_CACHE = true;
174 return runClean('coffee-register');
175}).add('coffee-register (cached)', function() {
176 delete process.env.COFFEE_NO_CACHE;
177 return runClean('coffee-register');
178}).run();