Compare commits
14
Commits
07d771220a
..
1.2.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
055665ecd9 | ||
|
|
b4e861f739 | ||
|
|
d03aacf042 | ||
|
|
a1fff09097 | ||
|
|
3abaa4665d | ||
|
|
63be149caf | ||
|
|
195360dc47 | ||
|
|
85df7949e2 | ||
|
|
b6d40deffd | ||
|
|
752c7b4305 | ||
|
|
e1ef325b3a | ||
|
|
54a3e81109 | ||
|
|
809474eac4 | ||
|
|
256bb084c5 |
@@ -0,0 +1,63 @@
|
||||
# FoxBrowser
|
||||
<img width="1174" height="757" alt="FoxBrowser_biC8dmC1Y2" src="https://github.com/user-attachments/assets/dca5f580-bd7e-4a8b-aa2f-864eaa017bfe" />
|
||||
|
||||
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.
|
||||
Reference in new issue
Block a user