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

推荐订阅源

博客园_首页
I
InfoQ
The Register - Security
The Register - Security
L
LangChain Blog
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
Schneier on Security
博客园 - 【当耐特】
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
IT之家
IT之家
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
雷峰网
雷峰网
N
Netflix TechBlog - Medium
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
Visual Studio Blog
博客园 - 聂微东
PCI Perspectives
PCI Perspectives
Last Week in AI
Last Week in AI
A
Arctic Wolf
宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
SecWiki News
SecWiki News
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
Schneier on Security
Schneier on Security
P
Proofpoint News Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AI
AI
Engineering at Meta
Engineering at Meta

Streamdown Documentation

Configuration FAQ Getting Started Introduction Security Animation Carets Code Blocks Components GitHub Flavored Markdown Interactivity Internationalization Link Safety Migrate from react-markdown Styling Unterminated Block Parsing Typography Usage @streamdown/cjk @streamdown/code Built-in Plugins @streamdown/math @streamdown/mermaid Custom renderers
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