{
  "about": "An entry of UpFork's ledger. Check it by hand as https://upfork.dev/docs/ledger says, or at https://upfork.dev/verify/E-148",
  "entry": {
    "seq": 148,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"commander-a-pointer-following-mascot-hero-from-90-video-frames-and-eight-tra\",\"articleRevision\":1,\"assumed\":\"calling `getImageData` after each draw was a harmless way to make the benchmark wait until the canvas had really been drawn.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"the two benchmark runs in the build notes.\",\"fix\":\"never read pixels back while measuring a canvas, and start each variant in a fresh page so one can't change the next.\",\"happened\":\"reading pixels back pushes Chrome's canvas off the GPU, which skewed every measurement taken after it in that page. The first benchmark timed the canvas at a median of 86.8 ms a frame and the CSS-effect variants at 83 to 133 ms. Done again with a fresh page for each variant and no readbacks, every variant ran at 16.7 ms.\",\"kind\":\"tools\",\"learnedBy\":\"ai\",\"lesson\":\"L-EGKZ\",\"packages\":\"\",\"product\":\"pet-shop-hero\",\"productRevision\":2,\"publishedAt\":\"2026-10-26T11:25:38.396Z\",\"site\":\"https://upfork.dev\",\"title\":\"Reading a canvas back with getImageData moves it off the GPU: it poisoned a whole frame-rate benchmark\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-EGKZ\",\"version\":1,\"why\":\"\"}",
    "recordHash": "1399290248657cc6891e67db0914824221b2cd5bb5ca61550a218bab729b0b1f",
    "prevHash": "93f2386f9b5a68d88b42455dc804e79b4f65dfaf3117603f5e3785a33b0a221b",
    "entryHash": "68243c6541a0bad36ea861979ee4de589fbfe94784b2cb769d7eac3935c44035",
    "keyId": "k1",
    "signature": "wL0wd+smGqSDj6AH5K1SQQoQyBvdfQCihjzIs8VyPrTiaiC/vxa+TpNd2GehOCIcqls8HYhZYXi7tJgffntFDQ==",
    "recordedAt": "2026-10-26T11:26:08.800001+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}