Skip to content

Commit 3fe1fcc

Browse files
committed
add test sourcemaps benchmark
1 parent 422cc0d commit 3fe1fcc

File tree

5 files changed

+78
-0
lines changed

5 files changed

+78
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ node_modules
1818
/coverage/
1919
/coverage.lcov
2020
/test/*/samples/_
21+
/test/sourcemaps/samples/benchmark/input.svelte
2122
/yarn-error.log
2223
_actual*.*
2324
_output

test/sourcemaps/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ describe("sourcemaps", () => {
2323

2424
(solo ? it.only : skip ? it.skip : it)(dir, async () => {
2525
const { test } = require(`./samples/${dir}/test.js`);
26+
const genInputFile = `${__dirname}/samples/${dir}/generate_input.js`;
27+
if (fs.existsSync(genInputFile)) require(genInputFile).generateInput();
2628
const inputFile = path.resolve(`${__dirname}/samples/${dir}/input.svelte`);
2729
const outputName = '_actual';
2830
const outputBase = path.resolve(`${__dirname}/samples/${dir}/${outputName}`);
@@ -33,17 +35,21 @@ describe("sourcemaps", () => {
3335

3436
let preprocessed;
3537
try {
38+
const t1 = Date.now();
3639
preprocessed = await svelte.preprocess(
3740
input.code,
3841
config.preprocess, {
3942
filename: "input.svelte"
4043
});
44+
const t2 = Date.now();
45+
preprocessed.deltaT = t2 - t1;
4146
} catch (error) {
4247
preprocessed = { error };
4348
// run test without js, css
4449
return test({ assert, input, preprocessed });
4550
}
4651

52+
const t1 = Date.now();
4753
const { js, css } = svelte.compile(
4854
preprocessed.code, {
4955
filename: "input.svelte",
@@ -52,6 +58,8 @@ describe("sourcemaps", () => {
5258
outputFilename: `${outputName}.js`,
5359
cssOutputFilename: `${outputName}.css`,
5460
});
61+
const t2 = Date.now();
62+
js.deltaT = css.deltaT = t2 - t1;
5563

5664
js.code = js.code.replace(
5765
/generated by Svelte v\d+\.\d+\.\d+/,
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import MagicString from 'magic-string';
2+
3+
import { line_max, column_max, block_count } from './generate_input';
4+
5+
const options = {};
6+
options.preprocess = [];
7+
8+
for (let column = 0; column < column_max; column++) {
9+
// add one preprocessor per column
10+
options.preprocess.push({
11+
script: ({ content, filename }) => {
12+
const src = new MagicString(content);
13+
for (let line = 0; line < line_max; line++) {
14+
// replace all lines of one column
15+
const original = `original_${line}_${column}`;
16+
const replace = `replace_${line}_${column}`;
17+
let idx = -1;
18+
while ((idx = content.indexOf(original, idx + 1)) != -1) {
19+
src.overwrite(idx, idx + original.length, replace);
20+
}
21+
}
22+
return {
23+
code: src.toString(),
24+
map: src.generateDecodedMap({
25+
source: filename,
26+
hires: true,
27+
includeContent: false
28+
})
29+
};
30+
}
31+
});
32+
}
33+
34+
export default options;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as fs from 'fs';
2+
3+
// result size is TODO MB
4+
5+
export const line_max = 20;
6+
export const column_max = 5;
7+
export const block_count = 5;
8+
9+
export function generateInput() {
10+
const outFile = __dirname+'/input.svelte';
11+
12+
let out = '<script>';
13+
14+
for (let line = 0; line < line_max * block_count; line++) {
15+
for (let column = 0; column < column_max; column++) {
16+
out += `original_${(line % line_max)}_${column}; `;
17+
}
18+
out += '\n';
19+
}
20+
21+
out += '</script>\n';
22+
23+
fs.writeFileSync(outFile, out, 'utf-8');
24+
}
25+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
export function test({ assert, preprocessed, js }) {
2+
3+
const prefix = ' benchmark: ';
4+
5+
console.log(prefix + preprocessed.deltaT + ' ms in svelte.preprocess');
6+
console.log(prefix + js.deltaT + ' ms in svelte.compile');
7+
8+
assert.equal(js.locate('original'), undefined, 'all "original" strings should be replaced');
9+
10+
}

0 commit comments

Comments
 (0)