Skip to content

Tối ưu hóa Hiệu suất Markdown

Khi nội dung Markdown của bạn tăng lên, hiệu suất trở nên quan trọng. Tìm hiểu cách tối ưu hóa xử lý và hiển thị Markdown để có trải nghiệm người dùng nhanh hơn.

Chiến lược Xử lý

1. Cache Kết quả Đã chuyển đổi

javascript
const cache = new Map();

function renderMarkdown(content, key) {
  if (cache.has(key)) {
    return cache.get(key);
  }
  
  const html = md.render(content);
  cache.set(key, html);
  return html;
}

2. Xử lý Lazy

javascript
// Chỉ xử lý nội dung hiển thị
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const content = entry.target.getAttribute('data-markdown');
      entry.target.innerHTML = md.render(content);
      observer.unobserve(entry.target);
    }
  });
});

3. Xử lý Thời gian Xây dựng

javascript
// Thời gian xây dựng (hiệu suất tốt nhất)
const fs = require('fs');
const marked = require('marked');

const markdown = fs.readFileSync('content.md', 'utf8');
const html = marked.parse(markdown);
fs.writeFileSync('output.html', html);

Tối ưu hóa Hình ảnh

Tải Lazy

markdown
![Mô tả hình ảnh](large-image.jpg){loading="lazy"}

Hoặc sử dụng HTML:

html
<img src="large-image.jpg" alt="Mô tả hình ảnh" loading="lazy">

Hình ảnh Đáp ứng

markdown
![Mô tả](image.jpg)

Với xử lý CSS:

css
img {
  max-width: 100%;
  height: auto;
}

Định dạng Hiện đại

html
<picture>
  <source srcset="image.webp" type="image/webp">
  <source srcset="image.jpg" type="image/jpeg">
  <img src="image.jpg" alt="Mô tả">
</picture>

Tối ưu hóa Tô màu Mã

Sử dụng Thư viện Nhẹ

javascript
// Thay vì highlight.js (lớn)
import Prism from 'prismjs';
import 'prismjs/components/prism-javascript';
import 'prismjs/components/prism-python';

// Chỉ tải các ngôn ngữ cần thiết

Tô màu Phía Server

javascript
// Xử lý trước khi gửi đến client
const marked = require('marked');
const Prism = require('prismjs');

marked.setOptions({
  highlight: function(code, lang) {
    if (Prism.languages[lang]) {
      return Prism.highlight(code, Prism.languages[lang], lang);
    }
    return code;
  }
});

Kỹ thuật Phân đoạn Nội dung

Phân chia Tài liệu Dài

javascript
// Chia Markdown thành các phần
function chunkMarkdown(content, chunkSize = 1000) {
  const sections = content.split(/^##\s/m);
  return sections.map(section => '## ' + section);
}

Tải Dần dần

javascript
async function loadChunks(chunks) {
  for (const chunk of chunks) {
    await new Promise(resolve => setTimeout(resolve, 0));
    const html = md.render(chunk);
    container.insertAdjacentHTML('beforeend', html);
  }
}

Đo lường Hiệu suất

Đo Thời gian Xử lý

javascript
console.time('Xử lý Markdown');
const html = md.render(largeMarkdownContent);
console.timeEnd('Xử lý Markdown');

Sử dụng Performance API

javascript
performance.mark('markdown-start');
const html = md.render(content);
performance.mark('markdown-end');

performance.measure('markdown-processing', 'markdown-start', 'markdown-end');
const measure = performance.getEntriesByName('markdown-processing')[0];
console.log(`Thời gian xử lý: ${measure.duration}ms`);

Danh sách Kiểm tra Hiệu suất

  • [ ] Bật cache cho HTML đã chuyển đổi
  • [ ] Sử dụng tải lazy cho hình ảnh
  • [ ] Tối ưu hóa hình ảnh (nén, định dạng hiện đại)
  • [ ] Xử lý tại thời gian xây dựng khi có thể
  • [ ] Phân đoạn tài liệu dài
  • [ ] Tải thư viện tối thiểu cần thiết
  • [ ] Sử dụng Web Workers cho xử lý nặng
  • [ ] Bật nén gzip/brotli
  • [ ] Thu nhỏ CSS và JavaScript
  • [ ] Sử dụng CDN cho tài nguyên tĩnh
  • [ ] Triển khai chiến lược cache phù hợp
  • [ ] Giám sát và đo lường hiệu suất thường xuyên

Kết luận

Tối ưu hóa hiệu suất Markdown đòi hỏi một cách tiếp cận toàn diện bao gồm cache thông minh, xử lý hiệu quả và tối ưu hóa tài nguyên. Bằng cách triển khai các chiến lược này, bạn có thể cải thiện đáng kể thời gian tải và cung cấp trải nghiệm người dùng mượt mà hơn.

Tài nguyên Bổ sung

Được xây dựng bởi www.markdownlang.com