Skip to content

Commit 800209f

Browse files
committed
improve rebuild performance in site builder
1 parent 8a63248 commit 800209f

File tree

4 files changed

+48
-10
lines changed

4 files changed

+48
-10
lines changed

resources/Site.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ async function readSite(siteRoot) {
4343
return site;
4444
}
4545

46-
function buildSite(buildRoot, site) {
47-
return Promise.all(site.files.map(file =>
48-
writer(buildRoot, file, site)
49-
));
46+
function buildSite(buildRoot, site, filter) {
47+
return Promise.all(site.files
48+
.filter(file =>
49+
!filter ||
50+
(filter.test ? filter.test(file.absPath) : filter === file.absPath))
51+
.map(file => writer(buildRoot, file, site))
52+
);
5053
}
5154

5255

resources/build.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ var buildDir = process.env.npm_package_site_build || './_build';
2424
var SITE_ROOT = path.resolve(pwd, sourceDir);
2525
var BUILD_ROOT = path.resolve(pwd, buildDir);
2626

27-
async function build() {
27+
async function build(filter) {
2828
console.log('building...');
2929
var site = await Site.readSite(SITE_ROOT);
30-
await Site.buildSite(BUILD_ROOT, site);
30+
await Site.buildSite(BUILD_ROOT, site, filter);
3131
console.log('built');
3232
}
3333

resources/watch.js

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,48 @@ function startWatch() {
5151
console.log('watching...');
5252
}
5353

54+
function changeFile(fileName) {
55+
enqueue(fileName);
56+
}
57+
5458
function deleteFile(fileName) {
55-
clearCache(fileName);
56-
build().catch(error => console.error(error.stack || error));
59+
enqueue(fileName);
5760
}
5861

59-
function changeFile(fileName) {
62+
const queue = [];
63+
64+
function enqueue(fileName) {
65+
queue.push(fileName);
66+
if (queue.length === 1) {
67+
rebuild();
68+
} else {
69+
console.log('queue', fileName);
70+
}
71+
}
72+
73+
function rebuild() {
74+
const fileName = queue[0];
75+
const filter =
76+
/_core\//.test(fileName) ? /\.(js|md)$/ :
77+
/\.less$/.test(fileName) ? /\.less$/ :
78+
fileName ? SITE_ROOT + '/' + fileName :
79+
null;
6080
clearCache(fileName);
61-
build().catch(error => console.error(error.stack || error));
81+
return build(filter).then(
82+
() => {
83+
queue.shift();
84+
if (queue.length) {
85+
return rebuild();
86+
}
87+
},
88+
error => {
89+
console.error(error.stack || error);
90+
queue.shift();
91+
if (queue.length) {
92+
return rebuild();
93+
}
94+
}
95+
);
6296
}
6397

6498
function clearCache(causeFileName) {

resources/writer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module.exports = writer;
2222

2323
async function writer(buildDir, file, site) {
2424
var writePath = getWritePath(buildDir, file);
25+
console.log(' writing', file.relPath);
2526

2627
// Render Less file
2728
if (endsWith(file.absPath, '.less')) {

0 commit comments

Comments
 (0)