mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 23:02:27 +08:00
后端: - subset_queue.ts: Semaphore 并发控制器,排队超时返回 503 - subset.ts: fontSubset 调用包裹在 withConcurrencyLimit 中 - config.ts: 新增 SUBSET_CONCURRENCY 环境变量(默认 2) - routes/config.ts: 暴露 subsetConcurrency 到配置 API 前端: - api.ts: ServerConfig 新增 subsetConcurrency 字段 - webfont-sdk.js: 客户端并发池(默认 4),setMaxConcurrent API 通过 document.fonts.load 精确追踪字体加载完成释放槽位
35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
/**
|
||
* 从环境变量读取服务配置,启动时一次性加载
|
||
*/
|
||
const env = globalThis.process?.env ?? {};
|
||
|
||
/** 临时上传开关 */
|
||
export const enableTempUpload = env.ENABLE_TEMP_UPLOAD === "true";
|
||
|
||
/** 管理员 API Key,为空则管理员上传不可用 */
|
||
export const adminApiKey: string = env.ADMIN_API_KEY ?? "";
|
||
|
||
/** 临时上传目录最大文件数 */
|
||
export const tempMaxFiles = parseInt(env.TEMP_MAX_FILES ?? "10", 10) || 10;
|
||
|
||
/** 临时上传目录总体积上限(字节),默认 200MB */
|
||
export const tempMaxTotalSize = parseInt(env.TEMP_MAX_TOTAL_SIZE ?? `${200 * 1024 * 1024}`, 10) || 200 * 1024 * 1024;
|
||
|
||
/** 临时字体保留时限(秒),超过后若无人使用则自动删除 */
|
||
export const tempRetentionSeconds = parseInt(env.TEMP_RETENTION_SECONDS ?? "10800", 10) || 10800;
|
||
|
||
/** 字体裁剪结果内存缓存容量上限(字节),默认 10MB */
|
||
export const subsetCacheMaxSize = parseInt(env.SUBSET_CACHE_MAX_SIZE ?? `${10 * 1024 * 1024}`, 10) || 10 * 1024 * 1024;
|
||
|
||
/**
|
||
* 字体子集化最大并发数
|
||
*
|
||
* 字体裁剪是 CPU/内存密集操作,并发过多会导致 LLRT OOM 崩溃。
|
||
* 默认 2:在 900M 内存限制下安全运行。
|
||
* 服务器内存充足时可适当调大(如 4-8)。
|
||
*/
|
||
export const subsetConcurrency = Math.max(1, parseInt(env.SUBSET_CONCURRENCY ?? "2", 10) || 2);
|
||
|
||
/** 字体搜索目录(按优先级排序:admin > 普通 > 临时) */
|
||
export const fontDirs = ["font/admin", "font", "font/temp"] as const;
|