Следующий код для поиска простых чисел значительно отличается от Adobe ColdFusion (10) и Lucee (4.5) относительно производительности. Протестировано на том же компьютере (6C i7 3930k @4 ГГц, Windows 10 64 бит, настройки памяти JVM равны на обоих CFML-машинах: JDK7 -Xms512m -Xmx2048m -XX:MaxPermSize=512m
):
<cfscript>
ticks = getTickCount();
stopIndex = 10000;
primes = [];
divisions = 0;
primes.add(2);
primes.add(3);
n = 5;
for (n; n < stopIndex; n += 2) {
isPrime = true;
d = 3;
for (d; d < n; d++) {
divisions++;
if (n % d == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
primes.add(n);
}
}
ticks = (getTickCount() - ticks);
</cfscript>
<cfoutput>
<p>
#numberFormat(divisions)# divisions in #ticks# ms.
</p>
<p>
#numberFormat(arrayLen(primes))# prime numbers found below #numberFormat(stopIndex)#.
</p>
</cfoutput>
stopIndex @10k
- ACF: 280 мс
- LUC: 1300 мс
stopIndex @20k
- ACF: 1000 мс
- LUC: 4800 мс
stopIndex @30k
- ACF: 2200 мс
- LUC: 10500 мс
trycf.com
и cflive.net
показывают аналогичный пробел.
Я проверил, влияет ли cfscript (против тегов) на время, это не так. Параметры сервера, связанные с двигателем CFML, похоже, не имеют никакого заметного воздействия.
Что может быть причиной разницы в производительности?
И как я могу это решить?
Фон: я запускаю тяжелые математические операции (геометрия, рендеринг изображений)) на рабочем сервере, который, как оказалось, запускает Lucee, и заметил медленную производительность.