Przejdź do głównej zawartości

Optymalizacja wydajności

Pracujesz nad monorepo z 400 000 linii kodu w 12 pakietach. Cursor potrzebuje 30 sekund, zanim zacznie sugerować uzupełnienia. Tryb Agent wstrzymuje się na 10 sekund, zanim zacznie przeglądać pliki. Wskaźnik indeksowania kręci się od godziny. Zaczynasz się zastanawiać, czy Cursor po prostu nie działa w dużych projektach.

Działa. Ale duże projekty wymagają dostrojenia. Domyślnie Cursor indeksuje wszystko, ładuje każde rozszerzenie i używa domyślnych limitów pamięci zaprojektowanych dla małych projektów. Kilka celowanych zmian robi różnicę między powolnym doświadczeniem a natychmiastowymi odpowiedziami.

  • Konfigurację .cursorignore eliminującą szum indeksowania
  • Ustawienia pamięci i wydajności dostrojone dla dużych baz kodu
  • Techniki audytu rozszerzeń do identyfikowania i wyłączania rozszerzeń pochłaniających zasoby
  • Strategie redukcji narzutu kontekstowego bez utraty jakości AI

Indeksowanie jest zwykle głównym wąskim gardłem wydajności. Wyszukiwanie semantyczne Cursora indeksuje każdy plik, który widzi. W projekcie z 50 000 plików (wliczając node_modules, wyniki budowania i wygenerowany kod) większość indeksu to szum.

Utwórz plik .cursorignore w katalogu głównym projektu. Działa jak .gitignore, ale kontroluje konkretnie to, co Cursor indeksuje i przeszukuje:

Dla projektów Python dodatkowo wyklucz:

.venv/
venv/
__pycache__/
*.pyc
.mypy_cache/
.pytest_cache/
htmlcov/
*.egg-info/

Otwórz Cursor Settings > Indexing & Docs i sprawdź status Codebase Indexing. Jeśli pokazuje dużą liczbę indeksowanych plików, twój .cursorignore nie jest wystarczająco agresywny. Po aktualizacji pliku ignorowania wymuś świeży przebieg przyciskiem Resync Index w tym miejscu (lub poprzez paletę poleceń, jeśli twoja wersja udostępnia polecenie ponownego indeksowania).

Rozszerzenia to drugi co do wielkości czynnik obniżający wydajność. Każde zainstalowane rozszerzenie VS Code działa wewnątrz Cursora i konkuruje o pamięć i CPU.

  1. Otwórz panel Rozszerzenia (Cmd/Ctrl+Shift+X)
  2. Posortuj według “Installed”
  3. Dla każdego rozszerzenia zadaj pytanie: “Czy używam tego co tydzień?”
  4. Wyłącz rozszerzenia, których aktywnie nie używasz
  5. Zwróć szczególną uwagę na rozszerzenia uruchamiające serwery językowe (Python, Java, C++)

Te kategorie rozszerzeń zazwyczaj zużywają znaczne zasoby:

  • Serwery językowe dla języków, których nie używasz — Jeśli pracujesz w projekcie TypeScript, wyłącz rozszerzenia Java, Python i C++
  • Rozszerzenia lintujące duplikujące wbudowane możliwości Cursora
  • Rozszerzenia wizualizacji git ze śledzeniem plików w czasie rzeczywistym
  • Rozszerzenia formatowania kodu uruchamiające się przy każdym zapisie

Użyj ustawień workspace Cursora, aby włączać rozszerzenia tylko tam, gdzie są potrzebne:

{
"extensions.autoUpdate": false,
"extensions.ignoreRecommendations": true
}

Możesz również wyłączyć konkretne rozszerzenia dla danego workspace za pomocą przełącznika workspace w panelu Rozszerzenia.

Dla dużych projektów Cursor może potrzebować więcej pamięci niż domyślna alokacja. Dodaj te ustawienia do settings.json:

{
"files.maxMemoryForLargeFilesMB": 4096,
"search.maxResults": 20000,
"editor.maxTokenizationLineLength": 20000
}

W dużych projektach obserwatorzy systemu plików zużywają znaczne zasoby:

{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/coverage/**": true
}
}

Wyklucz te same katalogi z wbudowanego wyszukiwania VS Code:

{
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true,
"**/coverage": true,
"**/*.min.js": true,
"**/*.map": true
}
}

Jeśli uzupełnianie Tab wydaje się wolne, te ustawienia pomogą:

{
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
},
"editor.suggestOnTriggerCharacters": true,
"editor.acceptSuggestionOnCommitCharacter": false
}

Jeśli używasz równoległych agentów z worktree, zoptymalizuj inicjalizację. Ta konfiguracja żyje we własnym pliku — .cursor/worktrees.json — nie w settings.json. Czytelnik, który wklei ją do settings.json, zobaczy, że jest po cichu ignorowana.

Zedytuj .cursor/worktrees.json:

{
"setup-worktree": [
"pnpm install --frozen-lockfile",
"cp $ROOT_WORKTREE_PATH/.env .env"
]
}

Forma tablicy poleceń uruchamia każde polecenie sekwencyjnie w nowym worktree, a $ROOT_WORKTREE_PATH wskazuje z powrotem na twoje główne drzewo robocze (przydatne do kopiowania nieśledzonych plików takich jak .env). Używaj pnpm, bun lub uv zamiast npm install — są znacznie szybsze przy inicjalizacji worktree, ponieważ wykorzystują globalny cache pakietów. Cursor odradza dowiązywanie symboliczne zależności do worktree, ponieważ może to uszkodzić główny worktree.

Klucze czyszczenia są natomiast naprawdę kluczami settings.json (i wymagają Cursora 2.1 lub nowszego). Każdy workspace dopuszcza maksymalnie 20 worktree; ustawienie niższego limitu szybciej odzyskuje miejsce na dysku:

{
// tylko 2.1 i nowsze
"cursor.worktreeCleanupIntervalHours": 6,
"cursor.worktreeMaxCount": 10
}

Indeksowanie nadal wolne po zmianach w .cursorignore. Przeindeksuj jawnie przez paletę poleceń. Zmiany w pliku ignorowania mogą nie zadziałać do następnego pełnego przeindeksowania.

Uzupełnianie Tab całkowicie znika. Sprawdź, czy nie wyłączyłeś serwera języka TypeScript. Zweryfikuj również, czy twój projekt ma poprawny tsconfig.json — uzupełnianie Tab opiera się na serwisie języka TypeScript.

Odpowiedzi agenta są wolne, ale indeksowanie jest w porządku. Wąskim gardłem może być opóźnienie sieciowe do modelu AI, a nie lokalna wydajność. Spróbuj innego modelu (Claude Sonnet 4.6 jest szybszy niż Claude Opus 4.8) lub sprawdź swoje połączenie internetowe.

Worktree pochłaniają miejsce na dysku. Zmniejsz wartości cursor.worktreeMaxCount i cursor.worktreeCleanupIntervalHours w ustawieniach. Uruchom git worktree list, aby zobaczyć wszystkie aktywne worktree i git worktree prune, aby wyczyścić przestarzałe.