The N-min-read chip derived reading time via LENGTH(content) over the full article-body TEXT column on every listing render. LENGTH can't use an index, so SQLite read each row's whole body per request on the hottest path. Cache the character count in a content_chars column filled at insert time (backfilled for existing rows), and point StoryContentLengths at it.
7.8 KiB
7.8 KiB