Java і JavaScript - це мови програмування. Мови програмування - це лише купа абстрактних математичних правил. Мови програмування не швидкі. Або повільно. Вони просто є .
Продуктивність програми не має нічого спільного з мовою. Найважливішим фактором є архітектура додатків. Потім приходить алгоритмічна ефективність. Потім мікрооптимізації. Потім йде якість компілятора / інтерпретатора. Потім процесор. Можливо, ще кілька кроків між ними. Однак мова безпосередньо не грає ролі. (І звичайно, якщо ви говорите про тести, тоді також певний бенчмарк відіграє роль, а також те, наскільки добре реалізований бенчмарк, наскільки добре він запущений, чи дійсно хлопець, який виконує бенчмарк, щось знає про бенчмаркінг, а ще важливіше статистика. Крім того, точне визначення того, що ви насправді маєте на увазі"швидкий" досить важливий, оскільки він також може мати значний вплив на еталон.)
Однак мова може побічно зіграти свою роль: набагато простіше знайти та виправити вузькі місця у продуктивності в 10 рядках дуже виразного, чіткого, стислого, читабельного, добре продуманого, ізольованого коду Lisp високого рівня, ніж у 100 рядках заплутаний, низькорівневий C. (Зверніть увагу, що ці дві мови є лише прикладами. Я не хочу виділяти жодної мови.) Наприклад, Twitter сказав, що з менш виразною мовою, ніж Ruby, вони не змогли внести такі радикальні зміни в свою архітектуру за такий короткий проміжок часу, щоб вирішити їх проблеми масштабованості. І причина, чому Node.js може забезпечити таку гарну рівномірну продуктивність вводу-виводу, полягає в тому, що стандартна бібліотека JavaScript така нахабна. (Таким чином, Node.js повинен забезпечити весь сам введення-виведення, щоб вони могли оптимізувати його для рівномірного введення-виведення з нуля. Ruby та Python, наприклад, встановили парні бібліотеки вводу-виводу, які працюють так само добре, як Node.js і набагато зріліші ... але, Ruby та Python вже мають великі стандартні бібліотеки, включаючи бібліотеки вводу-виводу, які всі є синхронними та погано грати з парними бібліотеками. JavaScript не має проблем із бібліотеками вводу-виводу, які погано працюють з рівномірним введенням-виведенням, оскільки JavaScript не має бібліотек вводу-виводувзагалі .)
Але якщо ви дійсно хочете порівняти ці два, ось вам цікава точка даних: HotSpot, яка є однією з найпопулярніших, а також більш ефективних реалізацій JVM, була створена командою хлопців, до складу якої входили, серед інших людей, хлопець на ім’я Ларс Бак. Але насправді HotSpot не з’явився з повітря, він базувався на вихідному коді Anamorphic Smalltalk VM, який був створений командою хлопців, до складу якої входив, серед інших, хлопець на ім’я Ларс Бак.
V8, яка є однією з найпопулярніших, а також більш ефективних реалізацій JavaScript, була створена командою хлопців, до складу якої входив, серед інших, хлопець на ім'я Ларс Бак. Але насправді V8 не з’явився з повітря, він базувався на вихідному коді Anamorphic Smalltalk VM, який був створений командою хлопців, до складу якої входив, серед інших, хлопець на ім’я Ларс Бак.
Враховуючи, що ці два більш-менш однакові, ми можемо очікувати подібних показників. Єдина різниця полягає в тому, що в HotSpot працює понад сотня інженерів, які працюють над нею протягом 15 років, тоді як V8 має десяток інженерів, які працюють менше 5 років. Те є тільки різниця в продуктивності. Мова не йде про статичних проти динамічної типізації (Java є статичний типізованим, але більшість JVMs і , звичайно , HotSpot не роблять ніяких статичних оптимізацій взагалі, все оптимізації є чисто динамічними), інтерпретацією компіляції проти (HotSpot насправді інтерпретується з додатковим JIT компілятором, в той час як V8 є чисто складеним), високого рівня проти низького рівня. Мова йде суто про гроші.
Але я збираюся зробити ставку, що для кожної пари реалізацій Java та JavaScript, де реалізація Java швидша, я можу знайти іншу пару, де реалізація JavaScript швидша. Крім того, я, мабуть, можу утримати пару і просто використовувати інший орієнтир. Є причина, за якою Комп’ютерна Мова Бенчмарк Гра називається «грою»: вони навіть заохочують Вас прямо на власній сторінці пограти з тестами, щоб будь-яка довільна мова піднялася на вершину.