# FoxBrowser FoxBrowser — Windows-first браузерний shell на **C# / .NET 8 WPF / WebView2**, оптимізований під фонову роботу з мінімальною кількістю живих renderer-ів. Правила прихованих елементів зберігаються у `blocked-elements.json` поруч із `FoxBrowser.exe`, щоб portable-версія не створювала для них окремі файли в профілі користувача. ## Поточна архітектура пам'яті FoxBrowser використовує **один WebView2 на весь застосунок**. Логічні вкладки є лише metadata-об'єктами: URL, назва, scroll position, позиція медіа і прапор Audio Mode. ```text 20 логічних вкладок = 1 живий WebView2 + 19 записів стану ``` При перемиканні вкладки поточний документ зберігає базовий стан, а єдиний WebView2 переходить на URL нової вкладки. Це свідомий компроміс: вкладка відновлюється через навігацію, зате не тримає окремий renderer у пам'яті. ## Реалізовані оптимізації - один спільний `WebView2` замість WebView2 на кожну вкладку; - ресурсний firewall через `WebResourceRequested`; - блокування відомих рекламних і аналітичних доменів; - Audio/Minimized режим блокує images і fonts; - у Audio/Minimized режимі блокуються сторонні iframe; - прибираються `preload`, `prefetch` і `next` посилання; - невидимі зображення, canvas та відеовізуалізація прибираються CSS-ін'єкцією; - при згортанні у трей нові навігації блокуються, а візуальний шар стискається; - watchdog кожні 30 секунд перевіряє Working Set процесу; - якщо процес перевищує 850 МБ, виконується soft-reload активної сторінки зі збереженням URL, scroll position і позиції медіа; - стан активного відео/аудіо відновлюється після reload настільки, наскільки це дозволяє сам сайт. ## YouTube Minimal Mode Кнопка **♫ Audio** вмикає режим, який додатково ховає непотрібний YouTube UI: рекомендації, коментарі, chat, Shorts, зайві полиці та engagement-панелі. Video element залишається для відтворення аудіо, але його візуальний шар стискається до невидимого розміру. Це зменшує трафік, GPU і кількість зайвих DOM-вузлів, але не може видалити базовий JavaScript runtime YouTube або audio/video decoder. Для цього потрібен окремий аудіоплеєр. ## Native audio backend Винесення YouTube у native player залишено окремим наступним модулем. WPF/Windows Media Foundation може відтворювати **прямий URL аудіопотоку**, але FoxBrowser не вбудовує нестабільний універсальний YouTube extractor у core браузера: YouTube змінює внутрішні протоколи, частина потоків має DRM, а авторизовані потоки потребують обережної роботи з cookies. Реалістичний порядок для цього модуля: 1. додати `INativeAudioSession` для прямого audio URL; 2. підключити обраний користувачем extractor як окремий optional-компонент; 3. після отримання audio URL закривати YouTube WebView2; 4. відтворювати звук через Windows Media Foundation, залишаючи вкладку лише як metadata. ## Запуск у Windows Потрібні Windows 10 версії 1809 або новіше, .NET 8 SDK та Microsoft Edge WebView2 Runtime Evergreen. У Visual Studio відкрийте `FoxBrowser.sln` і виконайте: ```powershell dotnet restore dotnet build -c Debug dotnet run --project .\\FoxBrowser.csproj ``` Поточне Linux-середовище агента не має Windows/.NET SDK, тому фінальну компіляцію і вимірювання RAM потрібно виконати на Windows-машині. ## Як вимірювати результат Порівнювати потрібно однаковий сценарій: однакові URL, однакова тривалість роботи, однаковий WebView2 Runtime. Зафіксуйте Working Set процесу FoxBrowser через 1, 5 і 20 хвилин у трьох режимах: звичайний, Audio Mode, Audio Mode зі згорнутим вікном. Окремо перевірте, чи не переривається звук після soft-reload.