Hacker News new | ask | show | jobs
by bachmeier 1887 days ago
A bit of a tangent, but Notion is performing well for a post on the HN front page, even with equations.
2 comments

They just shipped a performance-related change: https://www.notion.so/blog/faster-page-load-navigation

It is also mentioned on today's changelog: https://www.notion.so/What-s-New-157765353f2c4705bd45474e5ba...

That engineering blog post is a bit ambiguous to whether or not SQLite is also used in the browser web-app, which I'm presume is being used for most people who clicked on the link.

So that could mean two things:

- SQLite is being used in-memory, but things are still being flushed to IndexedDB for persistence? shouldn't help with faster page navigation here

- SQLite is not being used, so it can't explain the performance increase

I think the answer is more in the second link (changelog):

> - *Your workspace is now more reliable after Apr 16, 2021's scheduled maintenance — we upgraded from a single database instance to a sharded deployment, which means Notion is now capable of serving 3x as much traffic as before*

Do you think the equations are generated on the fly? I thought they are getting cached.
I feel like they're either cached or generated client-side with MathJax. No chance they're being generated every single time.
They're generated client-side using KaTeX[1]. That said the entire page is generated using JS meaning that someone visiting the site with JS disabled or using a text web browser will be greeted with a blank page. Nevertheless no-JS versions seem to be shown to bots since Google caches a plain HTML version of the same page[2].

[1]: https://www.notion.so/Math-equations-b4e9e4e03677413481a4910...

[2]: https://webcache.googleusercontent.com/search?q=cache:afS5a6...

Maybe it's just an oversight then when inline and block math was rolled out. KaTeX has a `renderToString` function that can be used to server-side render the LaTeX.

On an other hand, Notion doesn't seem built to serve read-only webpages like a static blog or Medium.com: the expectation is that you'll use the editor, so assumption is javascript is enabled and the editor itself can be used to render a read-only view from JSON or however they're keeping document state.

Opening dev tools on the website, it looks like they're just using Webpack (like React CRA?); not sure if they're changing the javascript bundle per page like with Next.js. It would make sense to not have server-side rendering if you're building both browser and desktop apps, since that would mean avoiding a separate framework only for the browser.

Another clue is that people who try to use Notion as a CMS for their blogs had to build out a React library to emulate the feel of Notion itself: https://github.com/splitbee/react-notion https://github.com/NotionX/react-notion-x.

They use KaTeX which is faster than MathJax