惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Comments on: Blog
GbyAI
GbyAI
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
人人都是产品经理
人人都是产品经理
F
Full Disclosure
IT之家
IT之家
Know Your Adversary
Know Your Adversary
Engineering at Meta
Engineering at Meta
K
Kaspersky official blog
T
Tor Project blog
V
Visual Studio Blog
S
SegmentFault 最新的问题
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
T
True Tiger Recordings
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Hacker News
The Hacker News
MyScale Blog
MyScale Blog
Latest news
Latest news
Blog — PlanetScale
Blog — PlanetScale
Cyberwarzone
Cyberwarzone
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Martin Fowler
Martin Fowler
F
Fox-IT International blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
C
Check Point Blog
博客园 - Franky
P
Proofpoint News Feed
S
Securelist
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
U
Unit 42
P
Privacy & Cybersecurity Law Blog
NISL@THU
NISL@THU
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
D
Docker
Hacker News - Newest:
Hacker News - Newest: "LLM"
WordPress大学
WordPress大学
李成银的技术随笔
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Schneier on Security
N
Netflix TechBlog - Medium

Streamdown Documentation

Migrate from react-markdown Custom renderers @streamdown/mermaid @streamdown/math Built-in Plugins @streamdown/code @streamdown/cjk Usage Typography Unterminated Block Parsing Styling Security Animation Link Safety Internationalization Interactivity Introduction GitHub Flavored Markdown Getting Started FAQ Configuration Components Code Blocks Carets
Memoization
Vercel · 2026-04-11 · via Streamdown Documentation

Performance optimization through intelligent memoization and caching.

Streamdown is built with performance in mind, utilizing React's memoization capabilities to ensure efficient rendering even with large amounts of streaming content. The library intelligently caches computations and prevents unnecessary re-renders, making it ideal for real-time AI streaming applications.

Streamdown implements memoization at multiple levels to maximize performance:

Component-Level Memoization

The main Streamdown component is wrapped with React.memo, which prevents re-renders when props haven't changed:

import { Streamdown } from 'streamdown';

export default function Page() {
  const markdown = "# Hello World\n\nThis is **streaming** markdown!";

  return <Streamdown>{markdown}</Streamdown>;
}

The component only re-renders when one of these props changes:

  • children (markdown content)
  • shikiTheme
  • isAnimating
  • animated
  • mode
  • plugins
  • className
  • linkSafety
  • normalizeHtmlIndentation

All other prop changes are ignored, ensuring optimal performance.

Block-Level Memoization

Streamdown parses markdown content into individual blocks, with each block memoized separately. This means:

  • Only blocks with changed content are re-rendered
  • Unchanged blocks remain memoized, even if new blocks are added
  • Parsing is cached per block for efficiency

Expensive computations are also cached using useMemo.

Streaming Efficiency

When content is streaming in, Streamdown's memoization strategy ensures:

  1. Incremental Rendering - Only new or changed blocks are processed
  2. Stable Output - Completed blocks remain stable and don't re-render
  3. Minimal Overhead - Parsing and rendering work is minimized

Example with streaming content:

'use client';

import { useChat } from '@ai-sdk/react';
import { Streamdown } from 'streamdown';

export default function Chat() {
  const { messages, sendMessage, status } = useChat();

  return (
    <>
      {messages.map(message => (
        <div key={message.id}>
          {message.parts.filter(part => part.type === 'text').map((part, index) => (
            <Streamdown
              isAnimating={status === 'streaming'}
              key={index}
            >
              {part.text}
            </Streamdown>
          ))}
        </div>
      ))}
    </>
  );
}

In this example:

  • As new tokens arrive, only the affected blocks are re-rendered
  • Previous blocks remain memoized and stable
  • The rendering performance stays consistent regardless of content length

Syntax Highlighting Cache

The syntax highlighter maintains an internal cache of loaded languages and themes. This means:

  • Languages are loaded once and cached for reuse
  • Theme changes don't require reloading languages
  • Multiple code blocks in the same language share the highlighter instance