python

Вышел новый релиз «Python для браузеров», встречаем Brython 3.9

  • понедельник, 12 октября 2020 г. в 00:29:19
https://habr.com/ru/company/selectel/blog/522968/
  • Блог компании Selectel
  • Python
  • Программирование
  • Софт



Код 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 time
import math
 
from browser import document
import 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, хотя бы базовый уровень. Без этого разобраться будет довольно сложно.