1 | var Benchmark, COFFEE_CACHE_DIR, Promise, benchmarks, chalk, deRegister, exec, extend, fs, path, runClean, sample, suite, temp, theImporter,
|
2 | slice = [].slice;
|
3 |
|
4 | Promise = require('bluebird');
|
5 |
|
6 | Benchmark = require('benchmark');
|
7 |
|
8 | benchmarks = require('beautify-benchmark');
|
9 |
|
10 | exec = require('child_process').execSync;
|
11 |
|
12 | fs = require('fs-jetpack');
|
13 |
|
14 | path = require('path');
|
15 |
|
16 | chalk = require('chalk');
|
17 |
|
18 | extend = require('extend');
|
19 |
|
20 | sample = function() {
|
21 | return path.join.apply(path, [__dirname, 'samples'].concat(slice.call(arguments)));
|
22 | };
|
23 |
|
24 | temp = function() {
|
25 | return path.join.apply(path, [__dirname, 'temp'].concat(slice.call(arguments)));
|
26 | };
|
27 |
|
28 | process.env.COFFEE_CACHE_DIR = COFFEE_CACHE_DIR = temp('.cache');
|
29 |
|
30 | fs.dir(temp(), {
|
31 | empty: true
|
32 | });
|
33 |
|
34 | theImporter = null;
|
35 |
|
36 | runClean = 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 |
|
48 | deRegister = 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 |
|
75 | suite = 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 |
|
85 | suite('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 |
|
108 | suite('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 |
|
134 | suite('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 |
|
158 | suite('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();
|