Przejdź do głównej zawartości

Strategie dla dużych baz kodu: wydajność na dużą skalę

Strategie dla dużych baz kodu: wydajność na dużą skalę

Dział zatytułowany „Strategie dla dużych baz kodu: wydajność na dużą skalę”

Praca z dużymi bazami kodu (100K+ linii kodu) w Cursor wymaga konkretnych strategii do utrzymania wydajności i produktywności. Ten przewodnik obejmuje sprawdzone techniki od zespołów zarządzających milionami linii kodu.

Wydajność indeksowania

Początkowe indeksowanie może zająć 15+ minut dla bardzo dużych projektów

Limity okna kontekstu

Nawet z 200K tokenów nie można zmieścić wszystkiego

Użycie pamięci

Duże projekty mogą zużywać 8GB+ RAM podczas ciężkich operacji

Dokładność wyszukiwania

Znajdowanie odpowiedniego kodu staje się trudniejsze wraz ze wzrostem baz kodu

Skonfiguruj Cursor do indeksowania tylko tego, co ma znaczenie:

Okno terminala
# .cursorignore - wyklucz z indeksowania
# Artefakty budowy
dist/
build/
out/
.next/
target/
# Zależności
node_modules/
vendor/
packages/*/node_modules/
# Wygenerowane pliki
*.generated.ts
*.pb.go
schema.graphql
# Duże pliki danych
*.csv
*.json > 1MB
fixtures/
# Dokumentacja
docs/api/
*.pdf
# Snapshoty testów
__snapshots__/
*.snap

Dla monorepo lub architektur wieloserwisowych:

// workspace.code-workspace
{
"folders": [
{
"name": "Frontend",
"path": "./packages/frontend"
},
{
"name": "Backend API",
"path": "./packages/api"
},
{
"name": "Biblioteki współdzielone",
"path": "./packages/shared"
},
{
"name": "Infrastruktura",
"path": "./infrastructure"
}
],
"settings": {
"cursor.workspacePriority": {
"Frontend": 1,
"Backend API": 2,
"Biblioteki współdzielone": 3,
"Infrastruktura": 4
}
}
}

Strategie pracy w limitach tokenów:

// Poziom 1: kontekst bezpośredni (obecny plik + bezpośrednie zależności)
"@current @imports Zaktualizuj tę logikę uwierzytelniania"
// Poziom 2: kontekst modułu (powiązane pliki w tym samym module)
"@folder:src/auth Refaktoryzuj cały moduł uwierzytelniania"
// Poziom 3: kontekst podsystemu (szerszy widok architektoniczny)
"@folder:src/auth @folder:src/users @docs:architecture.md
Zaimplementuj SSO w systemach uwierzytelniania i użytkowników"
// Poziom 4: pełny system (używaj oszczędnie)
"Przeanalizuj całą bazę kodu pod kątem luk bezpieczeństwa"
  1. Zacznij wąsko Rozpocznij od najbardziej specyficznego możliwego kontekstu

  2. Rozwijaj stopniowo Dodawaj kontekst tylko gdy AI potrzebuje więcej informacji

  3. Używaj granic semantycznych Uwzględniaj całe moduły zamiast losowych plików

  4. Najpierw wykorzystaj tryb Ask Użyj trybu Ask do zrozumienia przed włączeniem kontekstu

  5. Czyść po zadaniach Rozpoczynaj świeże czaty dla nowych zadań, aby uniknąć zanieczyszczenia kontekstu

// Ustawienia wydajności Cursor
{
"cursor.performance.memoryLimit": "8GB",
"cursor.performance.maxWorkers": 4,
"cursor.performance.cacheSize": "2GB",
"cursor.performance.enableLazyLoading": true,
"cursor.performance.garbageCollection": "aggressive"
}
Typ zadaniaZalecany modelDlaczego
Szybkie edycjeClaude 4 SonnetSzybki, wydajny dla małych zmian
Duża refaktoryzacjaClaude 4 SonnetDobra równowaga możliwości i szybkości
Złożona analizaGemini 2.5 ProObsługuje masywne okna kontekstu
Planowanie architekturyClaude 4 OpusNajlepsze rozumowanie dla złożonych decyzji
Polowanie na błędyo3Głębokie rozumowanie dla trudnych problemów
// Wyszukiwanie semantyczne konceptów
"Gdzie jest zaimplementowane uwierzytelnianie użytkownika?"
// Połączone z regex dla precyzji
"@search('function.*Auth') Pokaż wszystkie funkcje uwierzytelniania"
// Wyszukiwania z zakresem dla wydajności
"@folder:src/payments Znajdź logikę przetwarzania płatności"
// Historyczne wyszukiwanie dla kontekstu
"@git Jakie zmiany zostały wprowadzone w uwierzytelnianiu w ostatnim miesiącu?"

Twórz i utrzymuj dokumentację wysokiego poziomu:

# Mapa architektury systemu
## Główne serwisy
- **Serwis uwierzytelniania** - `/src/auth` - obsługuje całe uwierzytelnianie
- **Serwis użytkowników** - `/src/users` - zarządzanie użytkownikami i profilami
- **Serwis płatności** - `/src/payments` - integracja Stripe
- **Serwis analityki** - `/src/analytics` - śledzenie zdarzeń
## Kluczowe wzorce
- Wszystkie serwisy używają dependency injection
- Uwierzytelnianie przez tokeny JWT
- Dostęp do bazy danych przez repozytoria
- Zdarzenia publikowane przez kolejkę wiadomości

Firma fintech skutecznie zarządza swoim masywnym monolitem Java:

banking-system/
├── core/ (500K LOC)
├── modules/ (800K LOC)
│ ├── accounts/
│ ├── transactions/
│ ├── compliance/
│ └── reporting/
├── integrations/ (400K LOC)
├── shared/ (200K LOC)
└── tests/ (300K LOC)

Scenariusz 2: konstelacja mikroserwisów (50+ serwisów)

Dział zatytułowany „Scenariusz 2: konstelacja mikroserwisów (50+ serwisów)”

Zarządzanie systemem rozproszonym z Cursor:

// Niestandardowy skrypt menedżera workspace
class WorkspaceManager {
async switchContext(feature: string) {
const requiredServices = await this.getFeatureDependencies(feature);
// Zamknij niepotrzebne workspace
await this.closeWorkspaces(
this.openWorkspaces.filter(w => !requiredServices.includes(w))
);
// Otwórz wymagane serwisy
await this.openWorkspaces(requiredServices);
// Przygotuj kontekst Cursor
await this.primeContext(feature);
}
async primeContext(feature: string) {
// Stwórz dokument kontekstu
const context = `
Pracuję nad: ${feature}
Zaangażowane serwisy: ${this.openWorkspaces.join(', ')}
Kluczowe pliki: ${await this.getKeyFiles(feature)}
Ostatnie zmiany: ${await this.getRecentChanges(feature)}
`;
// Zapisz do .cursor/context.md
await fs.writeFile('.cursor/context.md', context);
}
}

Scenariusz 3: projekt open source (Kubernetes - 1.5M+ LOC)

Dział zatytułowany „Scenariusz 3: projekt open source (Kubernetes - 1.5M+ LOC)”

Strategie używane przez kontrybutorów:

Skupienie na komponencie

Pracuj nad jednym komponentem na raz (np. tylko scheduler)

Kontrakty interfejsów

Zrozum interfejsy przed implementacjami

Eksploracja oparta na testach

Używaj testów do zrozumienia zachowania

Integracja dokumentacji

Zachowuj dokumenty projektowe w kontekście Cursor

// Nie ładuj wszystkiego na raz
class LazyContextLoader {
private loaded = new Set<string>();
async getContext(query: string) {
const relevant = await this.findRelevantModules(query);
for (const module of relevant) {
if (!this.loaded.has(module)) {
await this.loadModule(module);
this.loaded.add(module);
}
}
return this.buildContext(relevant);
}
}

Podziel swoją bazę kodu na logiczne partycje:

.cursor/partitions.yaml
partitions:
frontend:
paths: [src/ui, src/components, src/styles]
rules: frontend-rules.md
backend:
paths: [src/api, src/services, src/db]
rules: backend-rules.md
infrastructure:
paths: [deploy, terraform, k8s]
rules: infra-rules.md
shared:
paths: [src/shared, src/utils]
rules: shared-rules.md
# Używaj partycji w promptach:
# "@partition:frontend Zaktualizuj dashboard użytkownika"

Buduj zrozumienie przyrostowo:

  1. Zmapuj terytorium

    "Stwórz mapę architektury tej bazy kodu na wysokim poziomie"
  2. Zidentyfikuj punkty wejścia

    "Jakie są główne punkty wejścia dla tej aplikacji?"
  3. Śledź kluczowe przepływy

    "Śledź przepływ logowania użytkownika od początku do końca"
  4. Zrozum wzorce

    "Jakie wzorce są używane konsekwentnie w tej bazie kodu?"
  5. Dokumentuj odkrycia

    "Stwórz przewodnik architektury na podstawie naszej eksploracji"
// Monitoruj wydajność Cursor
interface PerformanceMetrics {
indexingTime: number; // Indeksowanie początkowe
searchLatency: number; // Średni czas wyszukiwania
tokenUsage: number; // Tokeny na zadanie
memoryUsage: number; // Zużycie RAM
responseTime: number; // Opóźnienie odpowiedzi AI
}
// Loguj i analizuj
class PerformanceMonitor {
logMetric(metric: keyof PerformanceMetrics, value: number) {
console.log(`[Cursor Perf] ${metric}: ${value}`);
// Alarmuj o degradacji
if (this.isDegraded(metric, value)) {
this.alert(`Degradacja wydajności w ${metric}`);
}
}
}
  • Skonfiguruj .cursorignore dla swojego projektu
  • Ustaw workspace wielokorzeniowe, jeśli dotyczy
  • Dostraj ustawienia pamięci na podstawie specyfikacji maszyny
  • Stwórz definicje partycji dla dużych baz kodu
  • Dokumentuj kluczowe wzorce architektoniczne
  • Ustaw monitorowanie wydajności
  • Przeszkol zespół w zarządzaniu kontekstem
  • Regularne czyszczenie nieużywanych workspace

Wolne indeksowanie

Rozwiązanie: Sprawdź .cursorignore, zmniejsz indeksowane ścieżki, uruchom ponownie Cursor

Brak pamięci

Rozwiązanie: Zwiększ limit pamięci, zamknij nieużywane workspace, użyj wykluczeń

Niedokładne sugestie

Rozwiązanie: Popraw wybór kontekstu, zaktualizuj dokumentację, używaj konkretnych trybów

Przekroczono limit tokenów

Rozwiązanie: Podziel na mniejsze zadania, użyj ukierunkowanego kontekstu, wykorzystaj tryb Ask

Opanuj te techniki dla dużych baz kodu:

  1. Audytuj obecną konfigurację - sprawdź indeksowanie i wydajność
  2. Zaimplementuj partycjonowanie - zdefiniuj logiczne granice
  3. Optymalizuj użycie kontekstu - ćwicz ukierunkowany wybór kontekstu
  4. Eksploruj przepływy pracy multi-repo - kontynuuj do następnej sekcji

Pamiętaj: cel to nie załadowanie wszystkiego do Cursor, ale załadowanie właściwych rzeczy we właściwym czasie. Opanuj to, a nawet milionowe bazy kodu staną się zarządzalne.