Mam poważny problem z moim ostatnim projektem roku. Powiedziano mi, aby opracować aplikację mobilną, korzystając z usługi PhoneGap do obsługi wielu platform. Potem powiedziano mi, aby porównać występy PhoneGap vs Native, więc zdecydowałem się przetestować go na Androida.Phonegap kontra rodzimy na androidowym teście wydajności
pisałem przykładową funkcję i mierzy czas, aby go osiągnąć w JavaScript dla PhoneGap aw Java dla Native Androida. Zabawne jest to, że funkcja JavaScript zajmuje razy mniej czasu do zakończenia i przez cały czas myślałem, że funkcje natywne są dużo szybsze.
Oto mój kod w JavaScript dla PhoneGap:
var array = new Array();
var start = new Date().getTime();
for (var i = 0; i < 1000000; i++) {
var j = i + Math.random();
if (j % 2 == 0)
j = 1;
else
j = 0;
array.push(j);
}
var end = new Date().getTime();
var time = end-start;
var div = document.getElementById('result');
div.innerHTML = "Result time= " + time;
A mój kod w Javie dla Native:
long startTime = System.currentTimeMillis();
ArrayList<Integer> array = new ArrayList<Integer>();
for (int i = 0; i < 1000000; i++) {
Random r = new Random();
int j = i + r.nextInt();
if (j % 2 == 0)
j = 1;
else
j = 0;
array.add(j);
}
long endTime = System.currentTimeMillis();
long time = endTime - startTime;
t1.setTextColor(Color.BLACK);
t1.setText("Result time= "
+ Long.toString(time));
wyjścia dla pierwszego jest: 350ms średnio
Output dla drugiego jest: 3600ms średnio
ja testuje na
Samsung Galaxy Note 10.1 tabletki.
Czy to prawda? Czy może czegoś brakuje i popełniam poważny błąd?
Bardzo dziękuję za pomoc.
-------------- Aktualizacja --------------
po umieszczeniu
losową R = new random()
poza pętlą nowego czasu wymaga, aby wykonać pętla jest 750ms. Ale z Phonegapem prędkość jest jeszcze dwukrotnie szybsza, czy mogę stwierdzić, że do obróbki numerycznej, Phonegap jest lepszy niż Natywny na Androida?
Running tylko jeden test, a taki prosty test na to, aby porównać wydajność jest poważnym błędem. Powinieneś wykonywać * bardzo * zadania wymagające intensywnej matematyki lub zadania graficzne. –
Czy nadal będzie to poprawne porównanie, jeśli nie tworzysz nowego obiektu losowego w każdej iteracji, ale przestawiasz '' new Random() '' poza opcją for -loop? – harism
Oba punkty są poprawne powinieneś mieć podział po wykonaniu każdego wiersza ... Podejrzewam, że @ punkt zaczepienia faktycznie doprowadziłby czas działania do natywnego w dół znacząco – brendosthoughts