Pull to refresh

Как я сделал GovnoBrowser: легкий браузер на Python и QtWebEngine?

Level of difficultyEasy

Почему я решил создать свой браузер?

  • Все современные браузеры стандартные и однотипные

  • Желание создать свой продукт

  • Хотел создать что-то контролируемое и просто

  • Я хотел создать облегченный браузер для комфортной работы даже на старых устройствах

Технологии моего браузера

  • Python + PyQt6

    • PyQt6 - библиотека для GUI интерфейса

    • QtWebEngine - "мозг" браузера. Движок рендеринга на основе Chromium

  • Почему не CEF?

    • CEF мощнее, но за ним пришлось тащить весь Chromium.

    • CEF сложнее в сборке.

    • CEF написан на C++, следовательно для Python нужна обертка: cefpython, а она в свою очередь не поддерживает новейшую версию Python.

    • Высокое потребление ресурсов системы.

Хоть эти технологии не дают большего преимущества перед тем же Google Chrome, но они более ресурсоэффективны и будут производительнее но слабом железе.

Особенности браузера

  • Минималистичный интерфейс.

  • Отсутствие телеметрии - QtWebEngine по умолчанию не собирает данные, соответственно не нагружает ПК.

  • Поддержка всех современных веб-стандартов - HTML5, CSS36 JS. (Несмотря на его простоту)

  • Приватность - браузер не передает данные пользователей.

  • Браузер полностью бесплатный.

  • Полностью открытый код.

Дизайн

Я хотел сделать максимально лаконичный и удобный интерфейс, без лишней рекламы и прочих ненужных элементов, у  меня это получилось! Все элементы браузера выполнены в темных цветах, мне показалось, что это придаст стиля.  

  • Основные элементы интерфейса:

    • Поле для ввода поисков запроса либо URL

    • Кнопки навигации (назад, вперед, перезагрузить, домой)

    • Система вкладок (вкладки в современном стиле)

    • Меню специальных возможностей.

  • Начальная страница:

    Вместо стандартной "гугловской" стартовой страницы, я сделал свою. И старался сделать ее максимально минималистично.

    • Так-же в темной дизайне

    • На самой странице: поле для ввода запроса, выбор поисковой машины (Яндекс, Google, DuckDuckGo), кнопка найти.

    • Все элементы динамичные и реагируют на наведение курсора

    • Никакого трекинга.

Скриншот начальной страницы:
Скриншот начальной страницы:

Специальные функции

В моем браузере есть меню специальных функций, да, я понимаю что все из них есть и в других браузерах, но не могу обойти их стороной.

  1. Менеджер паролей - несложная система по добавлению паролей в сохраненные. Представляет собой меню с кнопками "Добавить пароль" и "Обновить". Все пароли отображаются в этом же окне, при нажатии на какой-то из них выпадает список с именем пользователя и скрытым паролем, с возможность показать либо скопировать. Сами пароли сохраняются в JSON файл, но, т.к система в разработке не имеют шифрования, но в скором времени я все переработаю.

  2. Прокси мастер - такая же несложная система прокси, с выпадающим списком. Про нее на данный момент сказать нечего, т.к она активно дорабатывается, и работает не так как задумывалось, но ее можно отключить и не пользоваться.

  3. Встроенная игра "Змейка" - максимально простая оффлайн игра встроенная в браузер. Ее знает каждый.

Проблемы и решения

  1. При запуске браузера (на ОС windows) на PyQt6 может возникнуть распространенная ошибка связанная с видеокартой, т.к движок рендерит страницы благодаря ей.

    Решение: Обновите драйвера видеокарты.

    В скором времени я выпущу версию как раз с исправлениям этой ошибки, страницы будут рендерится не на видеокарте, а на процессоре.

  2. Ошибки при использовании старой версии на PyQt5:

    Предисловие: на сайте доступна старая версия, содержащая ошибки

    1. Неверное отображение шрифтов и прочей инфомации, задействующей JavaScript

    2. Некорректная работа "ТулПанели" и системы вкладок

    3. Некоторые сайты не открываются, по причине отсутствия корректной системы вкладок

    Решение: Обновление браузера до PyQt6


Тест производительности

Все тесты проводились на MacBook air a1466: I5, 8гб ОЗУ, Intel HD Graphics 6000.

Chrome

Мой браузер

Запуск

примерно 2сек.

примерно 1.6 сек

Тест JS-производительности

49 баллов

62 балла

ОЗУ (1 вкладка)

191,4мб

88,1мб

ОЗУ (10 вкладок)

612,2мб

200,8мб

ЦП

28%

13%

Ключевые моменты:

Экономия ОЗУ - в пользу GovnoBrowser

Chrome выигрывает в JS-производительности, это не критично.

Мой браузер меньше нагружает систему из-за облегченного движка и прочих "Умных" функций Chrome.

Chrome быстрее в рендеринге, но разница не критична.

Планы по развитию

  • Выпуск версии браузера под Linux, MacOS, Android.

  • Улучшенная оптимизация.

  • Улучшение системы вкладок - переключение вкладок по горячим клавишам.

  • Простое восстановление сессии.

  • Локальная история — храниться она будет в локальном файле на компьютере пользователя, и отключается в меню спец. возможностей.

  • Небольшие «пасхалки».

Как скачать?

Браузер доступен для загрузки на официальном сайте, но напрямую загрузить получится только старую версию на PyQt5.

Для загрузки новой версии браузера перейдите на GitHub и следуйте инструкции в README.


Заключение

Создать браузер с нуля - реально, даже на Python. Да, GovnoBrowser не замена Chrome, но отличный вариант для тех, кто ценит минимализм, приватность и производетильнось.

Всем удачи!

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.