- common_util_spreadsheet_node.ts · common_util_spreadsheet.py · build:spreadsheet — [저장] 때 화면과 같은 TS 엔진을 Node 로 돌려 계산값 정본(브라우저 값 버림 · 못 풀면 503) - M02 새 종류 basis — resources/master_template/basis/<열 id>.json(구조물집계표 열마다) · 층 복사 · 뼈대 검사 · 옛 구조물 문서 산출근거 49 벌 옮김(migrate_basis) · 새 열도 같이 만듦 - 상세 산출근거 카드 = 새 스프레드시트(import() 로 늦게 받음) · basis 읽기 · 저장 - ⚠ 임시 [스프레드시트 시험] 단추 — 빈 통합문서(시트 셋) · 저장 자리 tmp/spreadsheet_trial.json · 1단계 검증 뒤 지움 - 시험 resources/tester/spreadsheet/ — 저장 · 서버 다리 · 크기 예산 · M02 만 늦게 불러옴 · 실무 구조도 xlsx 세 벌 수식 2,699 칸 엑셀 캐시값 대조(엔진 빈 몸이면 건너뜀) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168FQuoV7vDh5nhnSowW5cp
57 lines
2.0 KiB
JavaScript
57 lines
2.0 KiB
JavaScript
// 스프레드시트 크기 재기 — vite 로 줄여 묶은 뒤 gzip 크기(바이트). `test_spreadsheet_size.py` 가 부름.
|
|
// node spreadsheet_size.mjs <저장소 뿌리> → {"engine": {js, css}, "total": {js, css}}
|
|
// 앱 번들에 이미 있는 `@ui/ui_template_elements*` 는 빼고 잼(스프레드시트가 새로 더하는 몫만).
|
|
import path from "node:path";
|
|
import { pathToFileURL } from "node:url";
|
|
import { gzipSync } from "node:zlib";
|
|
|
|
const root = path.resolve(process.argv[2] ?? ".");
|
|
const dir = path.join(root, "A00_Common", "spreadsheet");
|
|
const { build } = await import(
|
|
pathToFileURL(path.join(root, "config/node_modules/vite/dist/node/index.js")).href
|
|
);
|
|
|
|
const ENGINE = [
|
|
"spreadsheet_address",
|
|
"spreadsheet_parser",
|
|
"spreadsheet_eval",
|
|
"spreadsheet_graph",
|
|
"spreadsheet_refshift",
|
|
"spreadsheet_commands",
|
|
"spreadsheet_history",
|
|
"spreadsheet_recalc",
|
|
"spreadsheet_functions",
|
|
"spreadsheet_numfmt",
|
|
"spreadsheet_fill",
|
|
];
|
|
|
|
async function measure(entries) {
|
|
const out = await build({
|
|
configFile: false,
|
|
logLevel: "silent",
|
|
root,
|
|
resolve: { alias: { "@ui": path.join(root, "ui_template") } },
|
|
build: {
|
|
write: false,
|
|
minify: true,
|
|
target: "es2022",
|
|
cssCodeSplit: false,
|
|
lib: { entry: entries, formats: ["es"] },
|
|
rollupOptions: { external: [/ui_template_elements/] },
|
|
},
|
|
});
|
|
const outputs = (Array.isArray(out) ? out : [out]).flatMap((o) => o.output);
|
|
const size = { js: 0, css: 0 };
|
|
for (const o of outputs) {
|
|
const body = o.type === "chunk" ? o.code : o.source;
|
|
const gz = gzipSync(typeof body === "string" ? body : Buffer.from(body)).length;
|
|
if (o.fileName.endsWith(".css")) size.css += gz;
|
|
else if (o.fileName.endsWith(".js")) size.js += gz;
|
|
}
|
|
return size;
|
|
}
|
|
|
|
const engine = await measure(ENGINE.map((name) => path.join(dir, `${name}.ts`)));
|
|
const total = await measure([path.join(dir, "spreadsheet.ts")]);
|
|
console.log(JSON.stringify({ engine, total }));
|