perf: load the QR libraries only for device verification (bundle budget)
CI / Build & Quality Checks (push) Successful in 2m0s
CI / Docker image build & smoke test (push) Skipped
CI / Secret scan (gitleaks) (push) Successful in 7s
CI / Trigger Desktop Build (push) Successful in 9s
CI / Playwright smoke (e2e) (push) Successful in 10m51s
CI / Build & Quality Checks (push) Successful in 2m0s
CI / Docker image build & smoke test (push) Skipped
CI / Secret scan (gitleaks) (push) Successful in 7s
CI / Trigger Desktop Build (push) Successful in 9s
CI / Playwright smoke (e2e) (push) Successful in 10m51s
The main chunk had crept to 356.9 kB gzip against a 349.9 kB budget (a hard gate on pull requests, only a warning on pushes, so it went unnoticed until PR #241). jsQR (camera scanning) and qrcode (drawing the QR) were statically imported by the device-verification components, so every startup loaded them. Both are now dynamic imports: jsQR when the scanner opens (fetched in parallel with the camera permission), qrcode when a QR is drawn. Main chunk 356.9 → 302.5 kB gzip (largest chunk is now matrix-sdk at 304.7 kB, within budget); chromium e2e 19 passed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
27c6dacc60
commit
6bb3f2af27
@@ -8,7 +8,6 @@ import {
|
||||
import React, { CSSProperties, useCallback, useEffect, useRef, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { VerificationMethod } from 'matrix-js-sdk/lib/types';
|
||||
import QRCode from 'qrcode';
|
||||
import {
|
||||
Box,
|
||||
Button,
|
||||
@@ -221,12 +220,16 @@ function QrCodeImage({ data }: { data: Uint8ClampedArray }) {
|
||||
const canvas = canvasRef.current;
|
||||
if (!canvas) return;
|
||||
// Byte-mode so the raw verification bytes round-trip (a string value would
|
||||
// mangle high bytes via UTF-8).
|
||||
QRCode.toCanvas(canvas, [{ data: new Uint8Array(data), mode: 'byte' }], {
|
||||
width: 220,
|
||||
margin: 2,
|
||||
color: { dark: '#000000', light: '#ffffff' },
|
||||
}).catch(() => undefined);
|
||||
// mangle high bytes via UTF-8). The QR library is loaded on demand.
|
||||
import('qrcode')
|
||||
.then(({ default: QRCode }) =>
|
||||
QRCode.toCanvas(canvas, [{ data: new Uint8Array(data), mode: 'byte' }], {
|
||||
width: 220,
|
||||
margin: 2,
|
||||
color: { dark: '#000000', light: '#ffffff' },
|
||||
}),
|
||||
)
|
||||
.catch(() => undefined);
|
||||
}, [data]);
|
||||
return (
|
||||
<Box justifyContent="Center">
|
||||
|
||||
Reference in New Issue
Block a user