Logging into the console while it’s closed still works
(But yup, somewhat annoying 🙈)
Logging into the console while it’s closed still works
(But yup, somewhat annoying 🙈)
(which was pretty hard to tell because the only way to tell was to close DevTools lol)
Just opening DevTools makes all timers 5-100× slower, due to the overhead of capturing stack traces. Even if you do nothing else (don’t record performance, etc)!
Guess who accidentally spent a weekend optimizing this 😅
(h/t @paul.irish for explaining why)
(which was pretty hard to tell because the only way to tell was to close DevTools lol)
(“1000 levels deep” might seem like a lot, but it’s pretty realistic with React’s recursivelyTraversePassiveMountEffects. That’s how I ran into it – in TanStack Query!)
(“1000 levels deep” might seem like a lot, but it’s pretty realistic with React’s recursivelyTraversePassiveMountEffects. That’s how I ran into it – in TanStack Query!)
So I tried to profile this, and apparently setTimeout calls are much (10×) slower if you do them deep within a call stack (eg React’s recursivelyTraversePassiveMountEffects)? bsky.app/profile/did:...
gist.github.com/iamakulov/85...
So I tried to profile this, and apparently setTimeout calls are much (10×) slower if you do them deep within a call stack (eg React’s recursivelyTraversePassiveMountEffects)? bsky.app/profile/did:...
fresh from @perfnow.nl: it will ship v soon, in Chrome 143 <3
fresh from @perfnow.nl: it will ship v soon, in Chrome 143 <3
This part of the project isn’t *fully* complete. But hopefully we’ll wrap it up soon 🙌
This part of the project isn’t *fully* complete. But hopefully we’ll wrap it up soon 🙌
This wasn’t always easy! Some things, like stripping unnecessary <b>s that come from Google Docs, were simple:
This wasn’t always easy! Some things, like stripping unnecessary <b>s that come from Google Docs, were simple:
👎 <pre><code> will only get converted during export, not on copy-paste
👎 Google Docs would get sanitized only on paste, but not during import
👎 If both code paths did implement similar logic, they’d often implement it somewhat differently
👎 <pre><code> will only get converted during export, not on copy-paste
👎 Google Docs would get sanitized only on paste, but not during import
👎 If both code paths did implement similar logic, they’d often implement it somewhat differently
• ⌘V would do extra sanitization for Google Docs (to strip e.g. <b>s that it puts around everything ↓)
• HTML import/export would convert code blocks from <pre><code> into <template> (and back)
• etc
• ⌘V would do extra sanitization for Google Docs (to strip e.g. <b>s that it puts around everything ↓)
• HTML import/export would convert code blocks from <pre><code> into <template> (and back)
• etc
• You can type something, adding images or tables with a button
• You can ⌘V something from Notion, Google Docs, etc.
• You can import HTML with plugins
• You can type something, adding images or tables with a button
• You can ⌘V something from Notion, Google Docs, etc.
• You can import HTML with plugins
We’d still serialize code blocks into <template></template> that Framer uses. But inside that <template>, we’d put a <pre><code> tag that all other editors understand ↓
We’d still serialize code blocks into <template></template> that Framer uses. But inside that <template>, we’d put a <pre><code> tag that all other editors understand ↓
A month ago, if you tried to copy a code block from Framer to Notion, it would just not paste. It would be missing!
Reason? We serialized code blocks into our internal format, which other editors did not understand:
A month ago, if you tried to copy a code block from Framer to Notion, it would just not paste. It would be missing!
Reason? We serialized code blocks into our internal format, which other editors did not understand: