Performance: Metadata preservation during splitting
This affects how quickly and smoothly the application processes and renders split data chunks while keeping metadata intact.
chunks = [] for part in text.split('. '): chunks.append({'content': part, 'metadata': original_metadata.copy()}) # metadata preserved
chunks = [] for part in text.split('. '): chunks.append({'content': part}) # metadata lost # Later metadata must be reconstructed separately
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Discard metadata during splitting | Extra DOM updates to reattach metadata | Multiple reflows per chunk | Higher paint cost due to layout shifts | [X] Bad |
| Preserve metadata during splitting | Minimal DOM updates, metadata included | Single reflow after splitting | Lower paint cost with stable layout | [OK] Good |
split_documents.preserve_metadata, chunk_text, and split_text are not valid Langchain methods for this purpose.docs = [Document(page_content='Hello world', metadata={'source': 'file1'})]
splitter = RecursiveCharacterTextSplitter(chunk_size=5, chunk_overlap=0)
chunks = splitter.split_documents(docs)
print(chunks[0].metadata)split_documents method keeps metadata for each chunk, so the first chunk keeps {'source': 'file1'}.docs = [Document(page_content='Test text', metadata={'id': 123})]
splitter = RecursiveCharacterTextSplitter(chunk_size=4, chunk_overlap=1)
chunks = splitter.split_texts(docs)
print(chunks[0].metadata)split_texts which only splits text strings, not Document objects with metadata.split_texts works on strings, metadata is lost. The correct method to preserve metadata is split_documents.split_documents method, not split_texts.Pass the test and this pattern moves unknown