Bird
Raised Fist0
LangChainframework~8 mins

Directory loader for bulk documents in LangChain - Performance & Optimization

Choose your learning style10 modes available
Performance: Directory loader for bulk documents
MEDIUM IMPACT
This affects the initial page load speed and responsiveness by controlling how many documents are loaded and processed at once.
Loading many documents from a directory to process in bulk
LangChain
from langchain.document_loaders import DirectoryLoader
loader = DirectoryLoader('docs')
for doc in loader.lazy_load():
    process(doc)
Loads documents one by one lazily, allowing processing and rendering to start earlier.
📈 Performance Gainreduces blocking time, improves LCP by streaming documents
Loading many documents from a directory to process in bulk
LangChain
from langchain.document_loaders import DirectoryLoader
loader = DirectoryLoader('docs')
docs = loader.load()
Loads all documents at once, blocking the process until all files are read and parsed.
📉 Performance Costblocks rendering for hundreds of milliseconds or more depending on file count and size
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Load all documents at onceN/A (backend load)Blocks main thread causing delayed reflowsHigh paint cost due to delayed content[X] Bad
Lazy load documents one by oneN/A (backend load)Minimal blocking, allows incremental reflowsLower paint cost, faster content display[OK] Good
Rendering Pipeline
Bulk loading all documents triggers a long blocking task before rendering can proceed. Lazy loading breaks this into smaller chunks, allowing the browser to interleave rendering and processing.
→Script Execution
→Layout
→Paint
⚠️ BottleneckScript Execution blocking main thread
Core Web Vital Affected
LCP
This affects the initial page load speed and responsiveness by controlling how many documents are loaded and processed at once.
Optimization Tips
1Avoid loading all documents at once to prevent blocking rendering.
2Use lazy loading or batch processing to improve initial load speed.
3Monitor main thread blocking time to optimize document loading.
Performance Quiz - 3 Questions
Test your performance knowledge
What is the main performance issue when loading all documents from a directory at once?
AIt blocks the main thread causing delayed rendering
BIt increases CSS selector complexity
CIt causes layout shifts after rendering
DIt reduces network requests
DevTools: Performance
How to check: Record a performance profile while loading documents; look for long scripting tasks blocking rendering.
What to look for: Long tasks in the main thread timeline indicate blocking; shorter tasks with gaps show better lazy loading.

Practice

(1/5)
1. What is the main purpose of the DirectoryLoader in Langchain?
easy
A. To convert documents into text format
B. To save documents to a directory
C. To load multiple documents from a folder at once
D. To create a new directory for documents

Solution

  1. Step 1: Understand DirectoryLoader's role

    The DirectoryLoader is designed to read many files from a folder in one go.
  2. Step 2: Compare options with this role

    Only To load multiple documents from a folder at once describes loading multiple documents from a folder, matching DirectoryLoader's purpose.
  3. Final Answer:

    To load multiple documents from a folder at once -> Option C
  4. Quick Check:

    DirectoryLoader loads many files = A [OK]
Hint: DirectoryLoader reads many files from a folder at once [OK]
Common Mistakes:
  • Confusing loading with saving files
  • Thinking it converts file formats
  • Assuming it creates directories
2. Which of the following is the correct way to specify a glob pattern to load only text files using DirectoryLoader?
easy
A. glob='*.txt'
B. glob='text/*'
C. glob='**/*.doc'
D. glob='*.pdf'

Solution

  1. Step 1: Understand glob pattern for text files

    The pattern '*.txt' matches all files ending with .txt in the directory.
  2. Step 2: Evaluate each option

    glob='*.txt' correctly uses '*.txt' to select text files. Others select different or incorrect file types.
  3. Final Answer:

    glob='*.txt' -> Option A
  4. Quick Check:

    Use '*.txt' to pick text files [OK]
Hint: Use '*.txt' to select text files with glob [OK]
Common Mistakes:
  • Using folder names instead of file patterns
  • Using wrong file extensions
  • Confusing recursive patterns with simple glob
3. Given the code snippet:
loader = DirectoryLoader('docs', glob='*.md')
docs = loader.load()

What will docs contain?
medium
A. A list of all markdown (.md) documents in the 'docs' folder
B. A single markdown document from the 'docs' folder
C. An error because glob pattern is incorrect
D. A list of all files in 'docs' regardless of extension

Solution

  1. Step 1: Analyze DirectoryLoader usage

    The DirectoryLoader is set to load files from 'docs' folder with glob '*.md', meaning markdown files only.
  2. Step 2: Understand load() output

    The load() method returns a list of documents matching the glob pattern, so docs will be a list of markdown files.
  3. Final Answer:

    A list of all markdown (.md) documents in the 'docs' folder -> Option A
  4. Quick Check:

    load() returns list of files matching glob [OK]
Hint: load() returns list of files matching glob pattern [OK]
Common Mistakes:
  • Expecting a single document instead of a list
  • Assuming glob pattern is ignored
  • Thinking load() returns file paths instead of documents
4. What is wrong with this code snippet?
loader = DirectoryLoader('files', glob='*.txt')
docs = loader.load
medium
A. Incorrect glob pattern for text files
B. Missing parentheses after load method call
C. DirectoryLoader requires absolute path only
D. load method does not exist in DirectoryLoader

Solution

  1. Step 1: Check method call syntax

    The load method must be called with parentheses: load()
  2. Step 2: Verify other parts

    Glob pattern '*.txt' is correct, DirectoryLoader accepts relative paths, and load() method exists.
  3. Final Answer:

    Missing parentheses after load method call -> Option B
  4. Quick Check:

    Method calls need () to execute [OK]
Hint: Remember to add () when calling methods [OK]
Common Mistakes:
  • Forgetting parentheses on method calls
  • Assuming glob pattern is wrong
  • Thinking DirectoryLoader needs absolute paths
5. You want to load all PDF and text files from a folder named 'resources' using DirectoryLoader. Which code snippet correctly achieves this?
hard
A. loader = DirectoryLoader('resources', glob='*.pdf;*.txt')
B. loader = DirectoryLoader('resources') docs = loader.load() # loads all files
C. loader = DirectoryLoader('resources', glob='*.pdf|*.txt') docs = loader.load()
D. loader = DirectoryLoader('resources', glob='*.pdf') loader2 = DirectoryLoader('resources', glob='*.txt') docs = loader.load() + loader2.load()

Solution

  1. Step 1: Understand glob pattern limitations

    DirectoryLoader's glob does not support multiple patterns separated by ';' or '|'.
  2. Step 2: Check each option

    loader = DirectoryLoader('resources', glob='*.pdf') loader2 = DirectoryLoader('resources', glob='*.txt') docs = loader.load() + loader2.load() loads PDFs and text files separately and combines results, which works correctly. loader = DirectoryLoader('resources') docs = loader.load() # loads all files loads all files but not filtered. Options A and C use invalid glob patterns.
  3. Final Answer:

    loader = DirectoryLoader('resources', glob='*.pdf') loader2 = DirectoryLoader('resources', glob='*.txt') docs = loader.load() + loader2.load() -> Option D
  4. Quick Check:

    Use separate loaders for multiple file types [OK]
Hint: Use separate loaders and combine for multiple file types [OK]
Common Mistakes:
  • Trying to use multiple patterns in one glob string
  • Assuming glob supports ';' or '|' separators
  • Loading all files without filtering
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard