Код Brython Python (на скриншоте версия 3.8.8)
Разработчики проекта Brython Python выпустили новый релиз, Brython 3.9. Сам проект позиционируется, как Python для браузера. Он основан на Python 3 и выполняется на стороне браузера, причем для разработки веб-скриптов вместо JavaScript используется Python.
Код проекта написан на Python и распространяется под лицензией BSD. Новый релиз совместим с Python 3.9, плюс обновлена стандартная библиотека.
Для того, чтобы определять логику работы сайта на стороне клиента, используя Python вместо JS, веб-разработчику необходимо подключить две библиотеки, brython.js и brython_stdlib.js. Для подключения Python-кода на странице, используется тег script с mime-типом text/python.
Со стороны Brython разрешено как встраивать код на страницу, так и загружать внешние скрипты. Пример:
<script type="text/python" src="test.py">
Из скрипта предоставляется полный доступ к элементам и событиям DOM. Кроме доступа к стандартной библиотеке Python есть и специализированные библиотеки для работы с DOM и JavaScript-библиотеками, такими как jQuery, D3, Highcharts и Raphael.
Поддерживается использование CSS-фреймворков JavaScript-библиотеками, такими как jQuery, D3, Highcharts и Raphael.
Python-блоки выполняются из блоков script через предварительную компиляцию кода, которая выполняется обработчиком Brython после загрузки страницы. Компиляция запускается при помощи вызова функции brython(), например через добавление
body onload="brython()"
.На основе кода Python формируется представление на языке JS, затем оно выполняется штатным JavaScript-движком браузера.
Что касается производительности, то большинство операций во встраиваемых в web-страницы Python-сценариях близка к производительности Cpython. Единственный момент, когда возникает задержка это этап компиляции. Но задержку можно устранить при помощи предварительно скомпилированного в JavaScript кода, которая используется для ускорения загрузки стандартной библиотеки.
<script type="text/python"> import timeimport math from browser import documentimport browser.timer content = document["content"] ... canvas = content.select_one(".clock") if hasattr(canvas, 'getContext'): ctx = canvas.getContext("2d") browser.timer.set_interval(set_clock, 100) show_hours()else: content.select_one('.navig_zone').html = "canvas is not supported" </script>
Подробнее о запуске Brython
Для того, чтобы Python для браузера мог как транслировать, так и исполнять Python-код подобно JS-коду, требуется вызывать Brython в момент загрузки тела документа.
<body onload="brython()">
В этом случае тег ищет теги script с типом text/python и запускает код. Для того, чтобы использовать API для работы с вебом, разработчики Brython реализовали простое решение импорт API, аналогичный импорту любого иного модуля на Python:
from browser import document, html, window
Brython справляется со всем сам, так что дополнительные команды выполнять не нужно.
Важный момент для работы с Brython необходим опыт работы с JavaScript, хотя бы базовый уровень. Без этого разобраться будет довольно сложно.