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