fix(web): искажение цветов в предпросмотре правок

Таблицы тональных кривых в WASM-модуле лежали в статическом массиве, который
линковщик помещал в сегмент .data — такой сегмент в wasm доступен только для
чтения, поэтому запись в него не срабатывала, и модуль считал по мусорным
данным (отсюда «каша» вместо плавного градиента).

Теперь таблицы считает и передаёт JS: модуль не хранит состояния и только
применяет правки к пикселям. Дополнительно клиент сверяет модуль с эталонной
JS-реализацией на маленьком образце и, если они расходятся, доверяет JS.

Service worker больше не кэширует .wasm: старый модуль в кэше ломал
предпросмотр даже после обновления сборки.
This commit is contained in:
iu
2026-10-21 01:19:45 +03:00
parent f8ee93777d
commit 2668d87347
7 changed files with 123 additions and 141 deletions
+12
View File
@@ -156,6 +156,18 @@ async function handleNavigation(request: Request): Promise<Response> {
/** Статика приложения: сначала кеш, затем сеть с дозаписью. */
async function handleAsset(request: Request): Promise<Response> {
const cache = await caches.open(SHELL_CACHE);
// wasm-модуль фильтров меняется вместе с ними: старый кеш сломал бы
// предпросмотр правок, поэтому его всегда берём из сети.
if (new URL(request.url).pathname.endsWith('.wasm')) {
try {
const fresh = await fetch(request, { cache: 'no-store' });
if (fresh.ok) await cache.put(request, fresh.clone());
return fresh;
} catch {
const stale = await cache.match(request);
if (stale) return stale;
}
}
const cached = await cache.match(request);
if (cached) return cached;
const response = await fetch(request);