Blog (5)
Komentarze (95)
Recenzje (0)

Wydajność JavaScriptu vs inne języki

@matrix012345Wydajność JavaScriptu vs inne języki30.07.2013 19:49

Postanowiłem przetestować i porównać wydajność JavaScriptu, przy okazji porównując go do innych języków, które miałem pod ręką (C#, C++ i PHP).

Z przeglądarek chciałem przetestować Operę, IE, Chrome i Firefoksa w najnowszej wersji stabilnej, w wersji testowej oraz sprzed kilku lat, ale nie wszystkie te wersje udało mi się znaleźć w sieci.

Wykorzystam tutaj kod generujący ciąg Fibonacciego (więcej do przeczytania o nim na Wikipedii ). Kod ten wykorzystuje wielokrotnie rekurencję.

Testy przeprowadziłem na laptopie z procesorem Intel Core i5 480M, 3GB DDR3 i systemem Windows 8 x64.

Kod

Użyty kod Javascript:


function fib(n)
{
	if(n==0)
		return 0;
	else if(n==1)
		return 1;
	else if(n>=2)
		return fib(n-1)+fib(n-2);
}
function ciag(n)
{
	var czas=new Date();
	var lista=[];
	for(var z=0;z<=n;z++)
	{
		lista[z]=fib(z);
	}
	return (new Date())-czas;
}

Kod PHP


function fib($n)
{
	if($n==0)
		return 0;
	else if($n==1)
		return 1;
	else if($n>=2)
		return fib($n-1)+fib($n-2);
}
function ciag($n)
{
	
	$a=explode(' ', microtime());
	$czas=($a[0]+$a[1])*1000;
	for($z=0;$z<=$n;$z++)
	{
		$lista[$z]=fib($z);
	}
	$a=explode(' ', microtime());
	return($a[0]+$a[1])*1000-$czas;
}

Kod C#


static ulong fib(int n)
{
	if (n == 0)
		return 0;
	else if (n == 1)
		return 1;
	else if (n >= 2)
		return fib(n - 1) + fib(n - 2);
	else
		return 0;
}
static double ciag(int n)
{
	var czas = DateTime.Now;
	var lista = new ulong[n + 1];
	for (var z = 0; z <= n; z++)
	{
		lista[z] = fib(z);
	}
	return (DateTime.Now - czas).TotalMilliseconds;
}

Kod C++

#include <windows.h>
static unsigned long long fib(int n)
{
	if (n == 0)
		return 0;
	else if (n == 1)
		return 1;
	else if (n >= 2)
		return fib(n - 1) + fib(n - 2);
	else
		return 0;
}
static DWORD ciag(int n)
{
	DWORD czas = GetTickCount();
	unsigned long long lista[41];
	for (int z = 0; z <= n; z++)
	{
		lista[z] = fib(z);
	}
	 return GetTickCount() - czas;
}

Kod C++ dla .NET (inny sposób mierzenia czasu)

static unsigned long long fib(int n)
{
    if (n == 0)
        return 0;
    else if (n == 1)
        return 1;
    else if (n >= 2)
        return fib(n - 1) + fib(n - 2);
    else
        return 0;
}
static double ciag(int n)
{
	DateTime czas = DateTime::Now;
    unsigned long long lista[41];
    for (int z = 0; z <= n; z++)
    {
        lista[z] = fib(z);
    }
    return (DateTime::Now - czas).TotalMilliseconds;
}

Oczywiście kod ten można zoptymalizować i to dość znacznie, ale wtedy wykonuje się zbyt szybko żeby ten czas można było porównać.

Wyniki

Czasy były mierzone po kilka razy i uśredniane, ale pomiary nie różniły się między sobą o więcej niż kilka procent.

Czas podany w sekundach
Czas podany w sekundach
Zbliżenie
Zbliżenie

Wnioski

  • Najszybszym językiem jest natywny c++ 64 bitowy
  • Natywny 32 bitowy c++ jest wolniejszy prawie 11 razy od 64 bitowego, jest też wolniejszy od 32 bitowego c++ pod .NET
  • W .NET c# jest szybszy od c++ (31% w wersji 32 bitowej, wersji 64 bitowej nie udało mi się skompilować)
  • JavaScript może być wydajnym językiem (Firefox Nightly tylko 2 razy wolniejszy od c++), ale nie musi (Firefox 3.6 ponad 64 razy wolniejszy od c++). Mamy tutaj bardzo szybki wzrost wydajności wraz z rozwojem przeglądarek (porównaj Firefoksa 3.6, 22 i 25 nightly).
  • PHP jest bardzo wolny (152 razy wolniejszy od c++)
Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.