IntroductionInstallationLimitations of the "file" protocolFrequently asked questionsSyntax, keywords and built-in functionsStandard distributionimport implementationBrython packagesBrowser interface
Introduction - DOM API
Creating a document Accessing elements Attributes, properties and methods Events Mouse events Keyboard events Focus events Drag events Query string Interactions with Javascript Brython-specific built-in modules
browser
browser.aio browser.ajax browser.html browser.local_storage browser.markdown browser.object_storage browser.session_storage browser.svg browser.template browser.timer browser.webcomponent browser.websocket browser.worker Widgets browser.widgets.dialog browser.widgets.menu interpreter javascript Working with BrythonCookbook |
Frequently asked questionsQ : what does "Brython" mean ? A : Browser Python. It's also the Welsh word for "brittonic-speaking Celt". Q : which browsers support Brython ? A : all modern browsers, including on smartphones. The generated Javascript purposely avoids using new syntax until it is supported by most browsers. Note that performance is usually better (sometimes much better) with Firefox than with Chrome. Q : what is the performance of Brython compared to CPython ? R : this page compares the execution time of a number of elementary operations between the latest version of Brython on Firefox and CPython. The results vary depending on operations, but overall the order of magnitude is the same. The Brython repository includes a script, at address localhost:8000/speed, that compares the speed of Brython and CPython on the local machine for a variety of elementary operations. Q : what is the performance of Brython compared to Javascript ? A : compared to Javascript, the ratio is naturally very different from one program to another. A Javascript console is provided in the distribution or on the Brython site, it can be used to measure the execution time of a Javascript program compared to its equivalent in Python in the editor (unchecking the "debug" box) The difference is due to two factors :
ImportError if all paths have been tried with no
result
Q : why does this message show in the browser console : "Synchronous
XMLHttpRequest on the main thread is deprecated because of its detrimental
effects to the end user's experience. For more help
http://xhr.spec.whatwg.org/" ?
A : this is also related to imports, or to file reading. To achieve these
operations, Brython uses blocking Ajax calls : an imported module must be
loaded before it can be used. Browser vendors should normally not remove
blocking calls any time soon.
Q : is it possible to precompile Brython scripts, in order to reduce
execution time ?
A : Brython is designed to be as simple to run as Javascript : put Python
code in a <script> section of an HTML page, load the page, edit the code,
reload the page, etc. It is not like other projects where the Python code is
translated to Javascript by a CPython script, so for each modification you
have to run this script before reloading the page.
Another reason why it is a not a good idea to precompile Brython is that the
generated code is typically 10 times bigger than the original Python source -
this is the price to pay for compliance with the language specification. The
page would take longer to load, and we haven't found that this would be faster
than compiling on the fly.
However, since version 3.6.0, a precompiled version of the scripts in the
standard library is stored in an indexedDB database attached to the browser
where the code is executed. The compilation is performed the first time a
script is imported, or if the Brython version changed since the last
compilation. This improves dramatically the imports loading time.
Q : I am trying to import a module from the Brython standard distribution
and I get an error message, why ?
R : the most likely reason is that the script brython_stdlib.js
has not been included in the page.
Q : can I import all the modules / packages that run with CPython ?
R : no, only those that are completely written in Python. The programs
that use extensions written in C are not supported. For instance, Numpy,
Matplotlib, Pandas cannot work with Brython.
It is the same for modules / packages that call primitives of the operating
system that are not available in the browser context: for instance requests,
which uses the IP stack to execute HTTP requests to arbitrary urls, when a
browser can only send Ajax requests to the same domain, or the the (rare)
sites that support cross-origin requests.
Q : why use the operator <= to build the tree of DOM elements ? This
is not pythonic !
A : Python has no built-in structure to manipulate trees, ie to add
"child" or "sibling" nodes to a tree node. For these operations, functions
can be used ; the syntax proposed by Brython is to use operators : this is
easier to type (no parenthesis) and more readable
To add a sibling node, the operator + is used.
To add a child, the operator <= was chosen for these reasons :
attach() of DOM elements instead.
|