/
minify.rs
91 lines (77 loc) · 2.67 KB
/
minify.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/// Explicit extern crate to use allocator.
extern crate swc_node_base;
use std::{path::PathBuf, sync::Arc};
use criterion::{black_box, criterion_group, criterion_main, Bencher, Criterion};
use swc::{config::JsMinifyOptions, try_with_handler, BoolOrDataConfig};
use swc_common::{FilePathMapping, SourceMap};
use swc_ecma_utils::swc_common::GLOBALS;
fn mk() -> swc::Compiler {
let cm = Arc::new(SourceMap::new(FilePathMapping::empty()));
swc::Compiler::new(cm)
}
fn bench_minify(b: &mut Bencher, filename: &str) {
let c = mk();
b.iter(|| {
let _guard = testing::init();
let fm = black_box(
c.cm.load_file(
&PathBuf::from("..")
.join("swc_ecma_minifier")
.join("benches")
.join("full")
.join(filename),
)
.unwrap(),
);
let res = try_with_handler(c.cm.clone(), Default::default(), |handler| {
GLOBALS.set(&Default::default(), || {
c.minify(
fm,
handler,
&JsMinifyOptions {
compress: BoolOrDataConfig::from_bool(true),
mangle: BoolOrDataConfig::from_bool(true),
format: Default::default(),
ecma: Default::default(),
keep_classnames: Default::default(),
keep_fnames: Default::default(),
module: Default::default(),
safari10: Default::default(),
toplevel: true,
source_map: BoolOrDataConfig::from_bool(true),
output_path: Default::default(),
inline_sources_content: true,
emit_source_map_columns: true,
},
)
})
})
.unwrap();
black_box(res);
// assert_eq!(res.map, None);
})
}
fn files_group(c: &mut Criterion) {
let mut group = c.benchmark_group("es/full/minify/libraries");
group.sample_size(10);
let mut bench_file = |name: &str| {
group.bench_function(name, |b| {
bench_minify(b, &format!("{}.js", name));
});
};
bench_file("antd");
bench_file("d3");
bench_file("echarts");
bench_file("jquery");
bench_file("lodash");
bench_file("moment");
bench_file("react");
bench_file("terser");
bench_file("three");
bench_file("typescript");
bench_file("victory");
bench_file("vue");
// bench_file("large");
}
criterion_group!(benches, files_group);
criterion_main!(benches);