Чи буде Python занадто повільним для використання на стороні клієнта в браузерах?


17

Я чув повідомлення про те, що Python буде занадто повільним, щоб не мати користі в браузерах.

Я вважаю, що JavaScript у цьому аспекті є вищим лише завдяки таким компаніям, як Google, яким він потрібен швидко (і зробив це швидко), оскільки їм він потрібен, щоб вижити, але я можу помилитися.

Чи є якісь відмінності в тому, як розроблені Python та Javascript, які впливають на їх роботу в браузерах?

Оскільки на даний момент у Python не існує клієнтської реалізації, моє запитання випливає із заяви, яку хтось зробив, тому, можливо, це має щось спільне з самими мовами (хоча я не вірю в це).


2
Python у браузері? Коли це сталося?
янніс

6
Це не сталося. Помічаєте would?
Profpatsch

16
Ну якщо цього не сталося, я не бачу, про що йдеться. Коли ми говоримо про продуктивність, ми говоримо не про мови, а про реалізацію мов (а для Python існує декілька реалізацій, як і для Javascript). Якщо немає клієнтської реалізації Python, про що тут говорити?
янніс

1
Теоретична наука! : D Моє запитання пов'язане із твердженням, який хтось зробив, тому, можливо, це має щось спільне з самими мовами (хоча я не вірю в це).
Profpatsch

1
Колись тут була реалізація інтеграції Python для Internet Explorer через інтерфейс COM, який також давав можливість VBScript для сценарію DOM. Я думаю, що MS відмовилася від можливості використовувати інтеграцію COM у версії 5 або 6, не можу згадати.
Martijn Pieters

Відповіді:


23

Для початку ми повинні зробити чітке розмежування між мовами та реалізаціями . Мова - це абстрактна річ, реалізація - конкретна річ, яка може оцінювати продуктивність. Наприклад, Lisp колись вважався занадто неефективним для практичного використання, але компілятори продовжували дозрівати і, врешті-решт, для нього було розроблено спеціальне обладнання; в один момент у 1980-х роках це була платформа для вибору для розвитку високопродуктивних робочих станцій.

Однак, найпростіша відповідь полягає в тому, що швидка реалізація Javascript, як V8 від Google, виводить стандартну реалізацію Python (CPython) з води . V8 - це оптимізована віртуальна машина з JITer, яка надзвичайно швидка, а CPython - порівняно простий VM порівняно. Існує реалізація Python з JIT, але це все-таки приблизно в 5-6 разів швидше.

П’ять років тому це була б інша історія. Браузери мали спрощену реалізацію Javascript, оскільки швидкість не викликала занепокоєння, оскільки ніхто не будував із цим «справжнього» програмного забезпечення, і Python був би рівним, якби не швидшим.


Це найбільш прониклива відповідь поки. Тож це не потенціал, а час і гроші.
Profpatsch

7
"П'ять років тому це була б інша історія" ... а через п'ять років це може бути знову по-іншому.
Брайан Оуклі

1
>> Мова - це абстрактна річ, реалізація - конкретна річ, яка може оцінювати продуктивність. << Так, реалізація мови програмування - конкретна річ. Ні, реалізація мови програмування не має вимірюваної продуктивності властивості. Продуктивність є властивістю конкретних програм, які використовують мовну реалізацію, у певному контексті.
igouy

2
@igouy Отже, якби я писав дві функціонально однакові програми, одну на C і одну на Python, ви б вважали, що різниця в продуктивності є властивістю програми, а не мовною реалізацією?
ConditionRacer

1
@ConditionRacer: Існує багато різних способів написання однієї програми, тому навіть якщо версія python програми мала різні характеристики продуктивності від версії C, це не доведе, що жодна версія python не може бути еквівалентною версії C. Дивіться такі речі, як asm.js ... на будь-якій мові ви можете використовувати гігантський масив для зберігання всього стану вашої програми, а також можете використовувати невеликий легко оптимізується підмножина примітивних операцій мови. (Як кажуть, "можна писати С будь-якою мовою".)
Манкарсе

5

У старіші часи Інтернету, коли Java-аплети, де основна єдина форма інтерактивного контенту на стороні клієнта, люди зрозуміли, що потрібен спосіб отримати форми на веб-сторінці, щоб мати можливість взаємодіяти з аплетами на веб-сторінці.

З цього було створено мову сценаріїв для зв’язку аплету Java на веб-сторінці з назвою ... javascript.

Ви можете побачити залишки цієї спадщини за допомогою таких питань, як [ 1 ], [ 2 ], [ 3 ] - і двох офіційних документів: виклик JavaScript коду з аплету та виклику методів аплета з коду JavaScript

З такою мовою доступні браузери того часу (переважаючий Netscape) забезпечили доступ до javascript як конкурентну перевагу (javascript розроблений на Netscape - Netscape був першим на сервері javascript на своєму сервері ще в 94-му - майже за два десятиліття до вузла .js). Інші браузери дотримувались його відповідності. Люди писали сторінки, які використовували JavaScript, інші спроби сценаріїв на стороні клієнта означали б абсолютно незрівнянні сторінки між речами, які працюють, і речами, які не виконують, - або дублювання коду (ось блок {вставте мову тут}, який робить це для не-JavaScript браузери і ось блок javascript для всіх інших).

Оскільки Netscape був домінуючим браузером протягом певного періоду, javascript узявся. Хоча спадщина Netscape втрачається до виноски вихідних файлів Mozilla, JavaScript живе і нічого не вдається перекинути.

Проблема залишається для будь-якої іншої мови сценаріїв слайдів клієнта. Javascript підтримується у кожному браузері. Якби створити браузер, який підтримує python (наприклад), а не JavaScript, він не зможе використовувати переважну більшість веб-сайтів. Крім того, якщо цей веб-переглядач не зміг отримати значну частку трафіку браузера, веб-дизайнери не хочуть створювати два набори сторінок з різними мовами сценаріїв для однієї сторінки.

Можна спробувати зробити плагін для сценарію python для якогось браузера, який включив сценарій python на сторінці ... схожий на те, як працює vrml сьогодні. Але якщо ви не чули та не бачили веб-сторінки, яка використовує vrml, однакова ймовірність знайти іншу веб-сторінку для іншої мови сценаріїв.


1
Це дуже хороший огляд "як це сталося ..." і наскільки я хотів би відзначити це правильною відповіддю, він відповідає на питання "Чому Javascript використовується на мові клієнта сьогодні?", А не " Чи є проблема дизайну, яка зробить Python занадто повільним для використання на стороні клієнта? ”
Profpatsch

VRML ... вау, що мене забирає назад!
FrustratedWithFormsDesigner

1
@Profpatsch не існує жодної проблеми з технічним дизайном з javascript, що робить його неприйнятним для того, щоб бути мовою на стороні клієнта - крім того, що він нічого не використовує, і якщо тільки він не надає якоїсь суттєвої переваги (ймовірно, включаючи інтерактивність з Java-аплетами), нічого ніколи не буде. Проблеми не є технічними, і якщо ніхто не розуміє історію "чому javascript", не можна відповісти "чому б не python".

2
@MichaelT: Ви писали: "Немає проблем з технічним дизайном з JavaScript, що робить його неприйнятним для мови клієнта". Ви маєте на увазі Python не JS ??
Карл Сміт

@CarlSmith Ага так. Моя помилка ... і я не можу редагувати коментарі за певний час. Дякую за виправлення

4

Я не думаю, що Python взагалі був би надто повільним. Ніщо про мову, що не заважає їй працювати досить швидко, щоб принаймні відповідати JavaScript. Його можна компілювати в JavaScript, тому, якщо нічого іншого, ви можете включити компілятор у браузер і лише потенційно збільшити час завантаження сторінки.

ОНОВЛЕННЯ: Будь ласка, дивіться коментарі нижче, де обговорюється, чому компіляція Python до JS буде значно дорожчою, ніж тут мається на увазі.

Проблема намагається переконати постачальників браузера та W3C спершу вибрати Python, через Ruby або будь-яку іншу приємну мову сценаріїв, а потім визначити стандартизовану підмножину, оскільки вони не можуть дозволити системні дзвінки тощо, а потім добре її впроваджувати весь час підтримка JavaScript досі. Це не відбудеться, але якби це сталося, я сумніваюся, що швидкість виявиться серйозною проблемою.


7
Ваша перша точка не випливає. Все можна скласти майже до всього (включаючи машинний код), але це не означає, що програма, написана якоюсь мовою L та компільована якоюсь мовою C, настільки ж швидка, як еквівалентна програма, написана мовою C.

1
Ну, CoffeeScript - це по суті інший синтаксис для тих же основних понять, що і JavaScript, а C - по суті, портативна мова складання. Python та Javascript, з іншого боку, відрізняються досить сильно. Щоб правильно реалізувати Python, вам потрібно підтримати (серед мільярдів інших речей) модель класу, перевантаження оператора, метакласи тощо, і більшість із них не відображається на JavaScript легко та ефективно. Та ж проблема з компілюванням будь-якого з них до C або машинного коду. Спеціалізований JIT може бути вашою єдиною надією, але компілятори JIT, орієнтовані на JS, ще не доведені на практиці.

3
Одним із питань буде той факт, що ви не можете стиснути Python так, як можете JS - усуньте всі ці пробіли та нові рядки, і там буде зроблено ваш показник! Таким чином, ви збираєтеся закінчити триваліші навантаження для будь-яких значних фрагментів Python.
TMN

1
@TMN цікавий момент, хоча можна сподіватися, що виразність Python пройде довгий шлях, щоб пом’якшити це (і так, це підрахунок рядків, а не символів, але все ж, Python - досить виразна мова).
Даніель Б

2
@TMN Що сказав Даніел Б, а також gzip має зменшити різницю. О, і Python не потребує більшості цих нових ліній і пробілів. Багато (хоча і не всі) рядків можуть бути об'єднані просто добре в Python, наприклад, a = something(); frobincate(a); return quuxі if condition: react()є по одному рядку. І n рівнів відступу потребує лише n пробілів, а не n * 4 пробілів.

2

Я думаю, що у Python є своя віртуальна машина. У мене немає великого досвіду роботи з Python, але я не бачу причин, чому він не працюватиме так добре, як і неоптимізований механізм JavaScript.

Кілька випадкових думок:

(1) Ви, ймовірно, можете запустити Python локально через аплет Java за допомогою Jython. Важке, що я бачу тут, полягає в тому, що аплети є дуже обмежуючими, тому вам може знадобитися модифікувати Jython, щоб він вписався в обмеження доступу. Наприклад, якщо він записує у файл журналу, можливо, вам доведеться видалити код журналу. Аплет не потрібно помітно видно.

(2) Хтось може створити "компілятор" / конвертер Python для JavaScript. Це було б багато роботи.


5
Someone could build a Python-to-JavaScript "compiler"/converterНу, хтось уже зробив .
янніс


Мені ніколи не доводилося цього робити самому, але мені відомо, що люди писали Java-аплети за допомогою Jython. Це не те саме, що замінити Javascript у браузері на Python.
Martijn Pieters

Brythonпрацює цікаво швидко, принаймні для досить ізольованих частин на сторінках (низька взаємодія з DOM tree).
Profpatsch

@Profpatsch З моменту, коли я останній раз переглядав, він навіть не реалізує дуже великі частини мови Python. Зручно, серед безпроблемних функцій є ті, які важко реалізувати на вершині JavaScript. Перефразовуючи одного з авторів PyPy: Неважко зробити нетривіальну підмножину Python швидко, повний Python - це там, де стає важко.

1

Це залежить від реалізації мови, а не обов'язково самої мови. Більшість інтерпретаторів JavaScript набагато швидше, ніж майже всі реалізації Python.

Це не означає, що мовою Python не можна користуватися майже з тією ж швидкістю, що і JavaScript. Opal реалізує майже повну мову Ruby та стандартну бібліотеку у браузері, компілюючи Ruby-код у код JavaScript, загорнутий у закриття. Якщо відкинути накладні витрати на включення бібліотеки Opal, її швидкість набагато ближче до швидкості прямого JavaScript, ніж будь-який інший інтерпретатор Ruby, про який я знаю.

Я не знаю, чи існує еквівалент Python Opal, але такий проект, мабуть, означав би, що відповідь на ваше запитання - «ні». Зі збільшенням використання JavaScript як "мови складання для Інтернету", мене не здивує, якщо він буде все більше використовуватися як платформа для інших мов, особливо, оскільки мобільна обчислювальна потужність збільшується та витрачається на володіння мовою реалізована в JavaScript стає все більш недбалою.

EDIT: Ось список реалізацій Python для браузера, який компілює / запускає на JavaScript.

https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js#python

І якщо вам це цікаво, ви можете перевірити опал, який мені дуже подобається.

http://opalrb.org/

Оскільки я сумніваюся, що браузери коли-небудь прийматимуть підтримку окремих перекладачів, такі компілятори, мабуть, є способом майбутнього з точки зору використання інших мов, ніж JavaScript. Навіть зараз ви отримаєте порівнянні показники в більшості областей. Це, на мою думку, однак, майте це на увазі.


0

Навіть коли ви задавали це питання, у JavaScript вже було доступно декілька реалізацій python, які сьогодні можна використовувати на веб-сторінках.

Погляньте на сторінку http://www.skulpt.org/ або http://www.brython.info/ для початку.

Виступ не здається занадто поганим, але ви повинні перевірити їх самостійно і дізнатися.


-4

Python - це "консольна" мова, що працює на сервері

Javascript - мова "браузера", що працює на клієнті

Як такі, вони не конкурують безпосередньо

... звичайно, є node.js і, ймовірно, плагіни браузера python, але тоді це більше питання про продуктивність щодо конкретної реалізації.

Більше того, для більшості застосунків python буде чудовим, за винятком випадків, коли вам доведеться робити якісь обширні обчислення та видаляти цикли процесора.

Як остання примітка, python та javascript мають багато подібності. Зважаючи на їх динамічну природу, обидва повинні інтерпретуватися під час виконання і не можуть бути складені так сильно, як мови, що вводяться статично. Я вважаю, що їхні досяжні показники будуть подібними.


2
JavaScript на сервері був близько 94 року. jscдозволяє вам працювати з javascript як консоллю, майже те саме, що ви отримали, якби вони ввели pythonна консолі.

@MichaelT: Гаразд, я відповідно відредагував свою відповідь
dagnelies

2
Крім того, ви можете писати настільні програми в Python .... Я не бачу жодної реальної причини для відмінності, яку ви робите.
Кріс Траверс

Крім того, інструмент 3D-моделювання Blender використовує Python для всього, починаючи від інтерфейсу користувача до генерації сітки. Якщо це не є конкурентоспроможним, що це?
Ендрю Грей

@Chris: відмінність полягає в тому, що JavaScript - це насамперед технологія браузера, тоді як python - це в основному настільна / консольна технологія. Моя думка полягала в тому, що порівнювати обидва має мало сенсу, оскільки вони служать зовсім іншим цілям.
dagnelies
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.