feat(desktop): embed BoosAPI Desktop client as a subproject
Vendor the rebranded BoosAPI Desktop client (Tauri + Vue) into metapi as a monorepo subdirectory under desktop/. Source only — node_modules, dist, Cargo target and the upstream .git history are excluded. desktop/ keeps its own independent Cargo workspace (desktop/src-tauri with crates/*); it is not part of the backend boosapi crate, so a `cargo check` at the metapi root still compiles only the backend. Build the desktop app from desktop/src-tauri per desktop/README.md. Note: app icons are still placeholder assets pending the final BoosAPI logo. The updater signing keys live outside the repo and are not included.
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
# Performance Testing Tools
|
||||
|
||||
This directory contains tools and documentation for analyzing the performance of KaTeX Worker-based rendering.
|
||||
|
||||
## Files
|
||||
|
||||
### Benchmark Tests
|
||||
- **`katex-worker-vs-direct.test.ts`** - Comprehensive benchmark comparing Worker vs direct rendering
|
||||
- **`katex-performance-demo.html`** - Interactive visual demo for performance testing
|
||||
|
||||
### Documentation
|
||||
- **`katex-worker-performance-analysis.md`** - Complete guide on measuring performance
|
||||
- **`docs/zh/katex-cache-analysis.md`** - Quick summary (Chinese)
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Run Benchmarks
|
||||
|
||||
```bash
|
||||
# Run all performance tests
|
||||
pnpm test test/benchmark/
|
||||
|
||||
# Run specific test
|
||||
pnpm test test/benchmark/katex-worker-vs-direct.test.ts
|
||||
|
||||
# With detailed output
|
||||
pnpm test test/benchmark/katex-worker-vs-direct.test.ts -- --reporter=verbose
|
||||
```
|
||||
|
||||
### Visual Demo
|
||||
|
||||
Open `katex-performance-demo.html` in a browser to see an interactive performance comparison.
|
||||
|
||||
### Runtime Monitoring
|
||||
|
||||
Add to your application:
|
||||
|
||||
```typescript
|
||||
import { enablePerfMonitoring, getPerfReport } from 'markstream-vue/utils/performance-monitor'
|
||||
|
||||
enablePerfMonitoring()
|
||||
|
||||
// After some usage...
|
||||
setTimeout(() => getPerfReport(), 30000)
|
||||
```
|
||||
|
||||
Or use browser console:
|
||||
|
||||
```javascript
|
||||
window.__katexPerfReport()
|
||||
```
|
||||
|
||||
## Key Insights
|
||||
|
||||
### Cache is Critical
|
||||
- Cache hit: **~0.01ms**
|
||||
- Worker render: **5-50ms**
|
||||
- **Speedup: 500-5000x** 🚀
|
||||
|
||||
### Real-World Performance
|
||||
- Typical cache hit rate: **70-85%**
|
||||
- Performance improvement: **3-10x**
|
||||
- Memory overhead: **~36KB for 200 formulas**
|
||||
|
||||
### When Worker + Cache Wins
|
||||
✅ Complex formulas (>10ms render time)
|
||||
✅ Multiple formulas per page (>5)
|
||||
✅ Repeated formulas (cache hit rate >30%)
|
||||
✅ User interaction matters (scrolling, animations)
|
||||
|
||||
## Decision Matrix
|
||||
|
||||
| Scenario | Recommendation |
|
||||
|----------|----------------|
|
||||
| Complex formulas | ✅ Use Worker + Cache |
|
||||
| Many formulas per page | ✅ Use Worker + Cache |
|
||||
| High repetition | ✅✅ Cache is highly effective |
|
||||
| Simple formulas only | ⚠️ Worker overhead acceptable |
|
||||
| SSR/Node.js | ⚠️ Fallback to direct render |
|
||||
|
||||
## Current Architecture (Best Practice)
|
||||
|
||||
```typescript
|
||||
// 1. Check cache first (<0.01ms)
|
||||
const cached = cache.get(key)
|
||||
if (cached)
|
||||
return cached
|
||||
|
||||
// 2. Use Worker (non-blocking)
|
||||
return renderKaTeXInWorker(content)
|
||||
.then((html) => {
|
||||
cache.set(key, html) // Populate cache
|
||||
return html
|
||||
})
|
||||
.catch(() => {
|
||||
// 3. Fallback to direct render
|
||||
return katex.renderToString(content)
|
||||
})
|
||||
```
|
||||
|
||||
**This hybrid approach is optimal!** ✅
|
||||
Reference in New Issue
Block a user