Что быстрее python или javascript
Перейти к содержимому

Что быстрее python или javascript

  • автор:

Почему JavaScript работает быстрее, чем С++?

Да, вы не ослышались. Глючный, тупой, тормознутый JavaScript работает быстрее, чем С++. Подождите тянуться к return userKarmaVote(), дайте мне возможность всё объяснить. Адвокат!

Есть три вида лжи

Есть такой проект под названием Benchmarks Game. Ребята написали программы (обход бинарных деревьев, n-body и т.д.) на всех популярных языках программирования и разработали методику измерения скорости и потребления памяти. Прежде чем читать дальше, просьба ознакомиться с методологией измерений.
Реализация каждого алгоритма подробно описана (например, nbody). Это open-source и если вы считаете, что какой-то алгоритм реализован не самым оптимальным способом, то можете предложить собственное решение.

Из всех интерпретируемых языков JavaScipt работает быстрее других. Он в пять раз быстрее, чем Python и Ruby (в том числе JRuby).

На сегодняшний день JavaScript — это самый быстрый интерпретируемый язык в мире.
Возвращаясь к C++. По алгоритму regexdna JavaScipt отрабатывает чуть быстрее, чем C++. При этом нагружает CPU в два раза меньше, хотя и потребляет в два раза больше памяти.
По другим алгоритмам JavaScript, естественно, отрабатывает медленнее C++, но учитывая что они изначально в разных весовых категориях (компилируемый язык со статической типизацией против интерпретируемого языка с динамической), разница не такая уж большая.

Почему JavaScript такой быстрый?

Интерпретаторы для Python/Ruby были написаны ограниченным числом людей. Эти люди, возможно, безумно талантливы, но на стадии разработки у них не было никакой конкуренции. Они конкурировали только с собой, со своими представлениями о скорости и качестве. Интерпретатор же для JS родился в конкурентной борьбе лучших умов мира. Mozilla разработала SpiderMonkey, Google разработал V8, Microsoft открыли Chakra. Все они работали в жесточайшей конкурентной борьбе.

Когда у команды NodeJS встал вопрос о выборе движка для JS, они просто посмотрели бенчмарки, увидели что V8 намного быстрее и выбрали его. Если завтра Chakra от Microsoft будет работать быстрее Google V8, то не будет никакой проблемы перейти на него.

Почему JavaScript такой медленный?

Как было сказано выше, JavaScript как язык — быстрый. Однако считается, что «нативное» предназначение JS — манипуляции с DOM. На самом деле это уже давно не так и JS успешно используется на сервере, в мобильных устройствах и даже в микроконтроллерах. Но речь не об этом. Речь о том, что когда вы с помощью JavaScript работаете с DOM, то тормозит не JS, а DOM. Есть много причин, почему DOM такой медленный, но я позволю себе сузить фокус только на одной причине. Проблема в самой спецификации HTML. В разделе 1.1.1 The DOM Structure Model есть следующий абзац:

…objects in the DOM are live; that is, changes to the underlying document structure are reflected in all relevant NodeList and NamedNodeMap objects…

Смысл в том, что объекты в дереве DOM — «живые». Это означает, что при любом изменении любой части DOM эти изменения отражаются в каждом объекте DOM.
Крупные кампании, такие как Flipboard, упорно боролись с лагами DOM. В итоге у них ничего не получилось и они смогли добиться 60 FPS только заменив DOM на Canvas. JavaScript никуда не делся, а лаги пропали. По этой же причине Netflix отказались от DOM на своих TV-приставках, а Реакту пришлось придумывать свой «виртуальный DOM».

Еще раз: JavaScript на клиенте не лагает. Лагает медленный DOM (точнее манипуляции с DOM). Не важно чем вы будете менять DOM — джава-скриптом или ассемблером. DOM все равно будет притормаживать. Именно из-за тормознутости DOM, JavaScript стал считаться медленным языком. Это историческая несправедливость и от нее давно пора избавиться.

WebAssembly

В этой связи у многих существуют неоправданные ожидания от прихода WebAssembly. Дескать, придет WebAssembly порядок наведет и мы наконец-то откажемся от «тормознутого» JS. Во-первых, даже после прихода WebAssembly работа с DOM останется за JavaScript. Да, какие-нибудь фреймворки (типа AngularJS) получат возможность перенести тяжелую логику на C/C++, но суммарный прирост от этого будет минимальным. Во-вторых, когда WebAssembly сможет напрямую манипулировать DOM’ом, минуя JS, прироста по скорости не будет, т.к. тормозит DOM, а не JS.

Хейт

Я понимаю, что скорость работы — не главный критерий оценки языка. Нужно учитывать потребление памяти, нагрузку на CPU и т.д. Я понимаю, что одно дело — скорость работы каких-то академических алгоритмов, а другое дело — скорость работы настоящего продакшн-приложения. Я понимаю, что кроме алгоритмов есть еще паттерны и подходы, и что ваш асинхронный ASP.NET может работать быстрее асинхронного NodeJS.

Однако JavaScript уже достаточно подвергся нападкам (заслуженным и незаслуженным) за свое «странное» поведение, за свое отношение к типам, к наследованию и т.д. Но вешать на него еще и ярлык тормознутости — это перебор. Остановитесь!

Быстрее ли JavaScript, чем Python?

Множество постов я видел, где люди писали про преимущество JavaScript в скорости перед Python. Много раз мне это писали мои знакомые. Ну что же, пришло время это проверить.

P.S. В каждом коде я буду считать время его выполнения именно методами языков.

Date.now()
from time import time time()

Также я всегда буду брать средние показатели скорость, полученные из 10 запусков программы.

Для начала проверим скорость обычного цикла for, который будет выводить числа от 1 до 1000.

start = Date.now() for (var i = 1; i < 1001; i++) < console.log(i); >end = Date.now() - start console.log(end + " ms")

Выполнение кода заняло 850 ms.

from time import time start = time() for i in range(1, 1001): print(i) end = round(time() - start, 3) print(str(end) + " ms")

Выполнение этого кода заняло 620 ms.

1:0 в пользу Python.

Теперь давайте сделаем то же самое, только вместо for у нас будет while.

start = Date.now() var i = 1; while (i < 1001) < console.log(i); i++; >end = Date.now() - start console.log(end + " ms") 

760 ms у нас даёт JS. Быстрее чем for, кстати.

А что у нас по Python?

from time import time start = time() i = 1 while i < 1001: print(i) i += 1 end = round(time() - start, 3) print(str(end) + " ms") 

Если JavaScript стабильно держится на показателе около 750-760 ms, то скорость Python'а колеблется от 600 ms до 750 ms. Но в итоге средняя скорость выходит в 720 ms.

2:0 в пользу Python.

Следующие в очереди — функции.

Создадим функцию, которая будет возводить число 123 в степень 123. Почему не больше? Это я объясню позже. Сейчас же просто создадим такие вот функции.

start = Date.now() function func(a,b) < console.log(a ** b); >func(123, 123); end = Date.now() - start console.log(end + " ms")

JavaScript выполняется за 10 ms.

from time import time start = time() def func(a, b): print(a ** b) func(123, 123) end = round(time() - start, 3) print(str(end) + " ms")

Этот код выполняется за 1 ms. В 10 раз быстрее чем JavaScript…

3:0 в пользу Python.

Это всё были детские игры! Давайте играть по-взрослому!

start = Date.now() for (var i = 1; i < 1001; i++) < if (i % 5 == 0) < console.log(i ** 10) >else < console.log(i ** 123) >> end = Date.now() - start console.log(end + " ms") 

Код выполняется за 800 ms.

from time import time start = time() for i in range(1, 1001): if i % 5 == 0: print(i ** 10) else: print(i ** 123) end = round(time() - start, 3) print(str(end) + " ms") 

Python-код выполнялся 1300 ms.

«Вот она, победа JavaScript! Python не может в сложные вычисления!» — сказал бы я, если бы не одно НО. В большинстве случаев, JavaScript даже не считает. Он просто выводит «Infinity» и продолжает, а Python считает всё. И вот я даже не знаю, кому присудить победу. Наверное, здесь у нас будет ничья.

4:1 в пользу Python.

Подведём итог: Python оказался быстрее JavaScript в циклах, функциях, вычислениях. Он считает всё, когда JavaScript делать этого не хочет.

Этим постом я не пытался принизить JavaScript, сам его люблю всем сердцем. Просто надоели те, кто везде пишут: «Python самый медленный! Нафиг такую скорость!»

Спасибо за уделенное время. Удачи всем!

Python VS.JavaScript: что выбрать начинающему разработчику

Python и JavaScript — два основных и самых распространенных языка программирования, на которых пишутся многие программы. Однако в мире IT постоянно происходят какие-то изменения и появляются нововведения. Из-за этого порой возникает дилемма, какой из языков учить или какому отдать предпочтение. Чтобы понять, нужно сравнить их основные характеристики:

Используется только на серверной и стороне программирования.

Как выбрать подходящий язык

На первый взгляд сложно отдать предпочтение Python или JavaScript. Оба языка характеризуются рядом особенных свойств, которые дают им преимущества друг над другом. Чтобы понять, какой из них начинать изучать, можно сравнить их по ряду характеристик:

  • простота и дружественность к начинающим разработчикам. Оба языка не являются сложными. Но считается, что в изучении проще все-таки Python. Он спроектирован так, что его быстрее получится понять и усвоить;
  • универсальность. В мире программистов считается, что Python более удобен в этом плане. Его можно использовать при веб-разработке, создании систем ERP и он подходит для разработки в области ИИ, анализа данных и машинного обучения. JavaScript не столь универсален, но в отличие от Пайтона, этот язык подходит, как для бэкенда, так и фронтэнда, удовлетворяет запросы фулд-стек разработчиков;
  • масштабируемость. Этот параметр важен для обработки большого потока трафика. Важно, чтобы язык справлялся с этой задачей при минимальном вовлечении сервера. Однако в этом вопросе много зависит от мастерства программиста. Если он создаст код, который можно масштабировать, то работать будут оба языка. Но наряду с этим важно учесть, что Python не способен поддерживать асинхронное программирование (в отличие от Node.js), но зато в нем предусмотрена поддержка coroutines, который упрощает асинхронную обработку.

Отметим также востребованность. Считается, что JavaScript, как более современный, характеризуется более широким применением. Но питон постоянно совершенствуется, у него огромные библиотеки для анализа, вычисления и машинного обучения, поэтому он тоже востребован в мире разработки.

С чего начать изучение JavaScript

Выучить этот язык могут даже начинающие программисты. В его основе переменные, функции, типы данных, переменные и операторы. Но желательно перед этим выучить языки разметки CSS и HTML, а также каскадные таблицы со стилями, которые нужны для написания статичных веб-страниц.

Разобраться со всем человеку, который не знаком с программированием, будет непросто. Лучше учить язык под руководством специалиста. Например, можно записаться на курс JavaScript с Buki, где подобраны преподаватели, готовые объяснить и помочь разобраться с непонятными моментами.

Что нужно знать об изучении Python

Питон считается самым простым языком программирования, освоить который можно даже своими силами, по самоучителю или литературе, но лучше делать это на курсах или под руководством специалиста. Он работает по принципу программирования в традициях Lisp.

Характерной чертой Питона является простой синтаксис, логичность и сбалансированность. Также в этом языке заложены сразу несколько парадигм, поэтому можно писать код, как в функциональном, так и ООП стиле.

Подводя итог, отметим, что знание языков программирования — это крутой хардскил, который поможет получить должность разработчика и построить карьеру. Притом, вовсе не обязательно ограничиваться изучением только Python или только JavaScript. Эти языки решают разные задачи и востребованы в мире разработки. Выбирать определенный нужно исходя из будущей специализации. Также параллельно можно освоить и другой язык, тем самым улучшив свои скилы и открыв путь к более прибыльной профессии fullstak разработчика.

Python или JavaScript: что выбрать начинающему разработчику

Адаптированный перевод статьи Прамода Чандраяна «Python Or Javascript: Which One Should I Choose?».

Python или JavaScript

В индустрии программного обеспечения все время что-то меняется и постоянно появляется что-то новое. Например, постоянно появляются новые языки программирования, а старые регулярно обновляются. В связи с этим перед начинающими (да и опытными тоже) разработчиками встает сложная задача выбора.

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

Сегодня я подробно рассмотрю два топовых языка программирования, которые по праву можно отнести к самым популярным, – Python и Javascript.

Я не собираюсь доказывать, что один из них лучше другого. Моя цель – помочь разработчикам сделать выбор на основе определенных параметров. Помочь выбрать язык, с которым им будет проще работать и который даст большие возможности для будущего роста.

Сравнение языков будем проводить по следующим критериям:

  1. Легкость использования, дружественность к начинающим.
  2. Универсальность.
  3. Производительность.
  4. Масштабируемость.
  5. Перспективы роста для разработчиков.

1. Легкий старт и простота использования

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

Python будто специально создан для новичков. Он очень дружественен к начинающим и спроектирован таким образом, чтобы его можно было быстро изучить и усвоить. Так что, если опираться на простоту использования, то Python показывает лучшие результаты, чем Javascript.

JavaScript по сравнению с Python является более сложным современным языком программирования.

2. Универсальность

Универсальность языка

Python это один из самых универсальных языков программирования. Он подходит для:

  • веб-разработки
  • разработки ERP-систем
  • разработки в сфере ИИ / машинного обучения / анализа данных.

JavaScript также очень хорош, когда дело касается веб-разработки и разработки ERP-систем. Но если учитывать, что искусственный интеллект и машинное обучение в будущем будут в тренде, то JavaScript не слишком хороший выбор. Это довольно новая для него сфера и ему предстоит пройти долгий путь по ее освоению. Python уже заработал себе репутацию одного из самых предпочитаемых языков для статистики данных и алгоритмов ИИ / МО.

В пользу JavaScript говорит возможность использовать его в качестве языка и фронтенда, и бэкенда. Он очень хорошо удовлетворяет нужды программистов в плане full-stack разработки. Также JavaScript обходит Python, когда речь заходит о разработке мобильных приложений, поскольку Python это главным образом язык бэкенда.

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

Python имеет сильное сообщество, потому что многие новички отдают предпочтение именно ему как более старому игроку.

3. Производительность

Здесь сравнивать непросто, поскольку на производительность влияет множество факторов. Но можно сделать достаточно справедливый анализ, сравнив Node.js и Python в сфере бэкенда.

Что касается скорости, то Node.js заметно быстрее. Такая отличная производительность во многом объясняется тем, что в его основе лежит движок V8 от Chrome, а он очень быстрый и мощный. Столь высокая производительность позволяет Node.js быть подходящим решением для построения приложений, действующих в режиме реального времени.

Событийно-ориентированная архитектура и неблокирующий I/O Node.js позволяют ему, несмотря на однопоточность, максимизировать использование CPU и памяти компьютера.

В основе событийно-ориентированной архитектуры лежат асинхронные вызовы, что позволяет серверам Node.js обрабатывать больше конкурентных запросов по сравнению с многопоточными серверами.

Поскольку неблокирующий I/O не блокирует выполнение программы при высоких нагрузках, это помогает повысить производительность приложения Node.js во время выполнения.

Все указанные факторы делают серверы Node.js более быстрыми и продуктивными, а также позволяют создавать самые быстрые решения для бэкенда.

Результаты сравнительного эталонного теста Node.js и Python 3 можно посмотреть здесь.

Я не очень полагаюсь на результаты этого теста, поскольку он настроен и супер-оптимизирован для проверки скорости программ, а в среде разработки в реальном времени такое случается редко. Тем не менее, он дает нам представления о скорости. В приведенном выше тесте производительности вы увидите, что в большинстве случаев Node.js показывает хорошие результаты.

Но вы можете провести собственные замеры в рабочем окружении с настройками, более соответствующими вашему проекту, и уже на их основании делать какие-то выводы.

4. Масштабируемость

Масштабируемость

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

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

Python по умолчанию не поддерживает асинхронное программирование, в отличие от Node.js. Но он поддерживает coroutines, благодаря которым можно легко осуществить асинхронную обработку. Поэтому, даже несмотря на то что архитектура Python может казаться не такой масштабируемой, как у Node.js, у него есть инструменты, позволяющие достигнуть нужной масштабируемости. Посмотрите, например, на YouTube и Instagram – два прекрасных продукта, созданных с использованием Python.

В отличие от Node, Python масштабируется по двум направлениям:

  • сложности кода: Python хорошо подходит для разработки проектов большого размера. Он позволяет с легкостью создавать сложные проекты, с которыми у Node.js могут иногда возникать трудности из-за его асинхронного программирования.
  • расширения: Python отлично подходит для объединения веб-приложений.

Таким образом, решающим фактором для выбора являются нужды продукта/проекта и его особенности.

5. Возможности для карьерного роста

В последнее время JavaScript как язык full-stack, у всех на слуху. Кроме того, люди со знанием стека MEAN хорошо зарабатывают. JavaScript становится популярным среди крупных технологических гигантов и используется в качестве языка и фронтенда, и бэкэнда.

Но стоит отметить, что Python в плане карьеры не уступает JavaScript, поскольку он очень хорошо подходит для разработок в сфере искусственного интеллекта, машинного обучения, анализа данных. Если вы обдумываете построение своей карьеры не только с мыслями о настоящем, но и с пристрелом на будущее, Python – отличный выбор.

Я думаю, что оба языка являются победителями, каждый по-своему. Если вы хотите быть full-stack разработчиком и вам нравится создавать масштабируемые мобильные и веб-приложения, то знание JavaScript будет вашим преимуществом. Но если вы хотите заниматься наукой о данных, то лучше остановить свой выбор на Python.

Знание любого из этих языков приносит хороший доход и способствует карьерному росту. Поэтому есть смысл выбирать исходя из своих стремлений.

Выводы

Выбор языка – дело очень индивидуальное. Он не должен делаться под влиянием рынка или того, что говорят другие. Принимать решение следует на основе сведений о языках, а также на основе собственного опыта. Попробуйте применить языки, между которыми выбираете, на практике. Протестируйте в разных условиях их надежность, масштабируемость, легкость изучения. Не забывайте о перспективах роста в будущем.

Да, я немного пристрастен, мне нравится Python, поскольку он легок в изучении, к тому же мне интересна сфера ИИ/МО. Но навязывать свое мнение я не буду, поскольку, повторюсь, выбор языка — дело индивидуальное.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *