Files
FoxBrowser/README.md
T
2026-10-01 04:38:11 +03:00

63 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.