add caching for cdata.js

This commit is contained in:
Woody 2024-01-07 00:55:56 +01:00
parent e778b02c0c
commit 0a9145cd3c
No known key found for this signature in database
GPG Key ID: 9872D7F5072789B2
2 changed files with 46 additions and 2 deletions

2
.gitignore vendored
View File

@ -22,3 +22,5 @@ wled-update.sh
/wled00/my_config.h
/wled00/Release
/wled00/wled00.ino.cpp
/tools/cdataCache.json

View File

@ -22,6 +22,36 @@ const CleanCSS = require("clean-css");
const MinifyHTML = require("html-minifier-terser").minify;
const packageJson = require("../package.json");
const CACHE_FILE = __dirname + "/cdataCache.json";
const cache = loadCache();
cache.version = 1;
function loadCache() {
try {
return JSON.parse(fs.readFileSync(CACHE_FILE));
} catch (e) {
return {};
}
}
function saveCache(file) {
const stat = fs.statSync(file);
cache[file] = {
mtime: stat.mtimeMs,
size: stat.size,
};
fs.writeFileSync(CACHE_FILE, JSON.stringify(cache));
}
function isCached(file) {
const stat = fs.statSync(file);
const cached = cache[file];
if (cached && cached.mtime >= stat.mtimeMs && cached.size == stat.size) {
return true;
}
return false;
}
/**
*
*/
@ -110,6 +140,10 @@ function filter(str, type) {
}
function writeHtmlGzipped(sourceFile, resultFile, page) {
if (isCached(sourceFile)) {
console.info(`Skipping ${resultFile} as it is cached`);
return;
}
console.info("Reading " + sourceFile);
new inliner(sourceFile, function (error, html) {
console.info("Inlined " + html.length + " characters");
@ -146,6 +180,7 @@ ${array}
`;
console.info("Writing " + resultFile);
fs.writeFileSync(resultFile, src);
saveCache(sourceFile);
});
});
}
@ -196,6 +231,11 @@ ${result}
}
function writeChunks(srcDir, specs, resultFile) {
if (specs.every(s => isCached(srcDir + "/" + s.file))) {
console.info(`Skipping ${resultFile} as all files are cached`);
return;
}
let src = `/*
* More web UI HTML source arrays.
* This file is auto generated, please don't make any changes manually.
@ -204,12 +244,14 @@ function writeChunks(srcDir, specs, resultFile) {
*/
`;
specs.forEach((s) => {
const file = srcDir + "/" + s.file;
try {
console.info("Reading " + srcDir + "/" + s.file + " as " + s.name);
console.info("Reading " + file + " as " + s.name);
src += specToChunk(srcDir, s);
saveCache(file);
} catch (e) {
console.warn(
"Failed " + s.name + " from " + srcDir + "/" + s.file,
"Failed " + s.name + " from " + file,
e.message.length > 60 ? e.message.substring(0, 60) : e.message
);
}