2013-07-31 3 views
-2

У меня есть следующий код:Почему JavaScript выбор рода висит

var longLorem = "..."; // here is a string, > 1 000 000 length 
var bufferSize = 1000000; 
var lorem = longLorem.substring(0, bufferSize - 1).split(''); 
var swap; 
var i, j; 
for(i=0;i<bufferSize;i++){ 
    for(j=i+1;j<bufferSize;j++){ 
    if(lorem[i] > lorem[j]){ 
     swap = lorem[i]; 
     lorem[i] = lorem[j]; 
     lorem[j] = swap; 
    } 
    } 
} 

Почему он висит под Chrome? Как ускорить JavaScript или это невозможно, как для DOM и UI, и т. Д.?

С bufferSize=100 000 он заканчивается в 2m 35s.

Следующая программа C завершается в> 17m

#include <stdio.h> 
#define bufferSize 1000000 

int main(int argc, char *argv[]) 
{ 
    int i,j; 
    char swap; 
    FILE *loremFile = fopen("lorem.txt", "r"); 

    char buff[bufferSize]; 
    fgets(buff, bufferSize, (FILE*)loremFile); 
    fclose(loremFile); 

    //printf("'%s'\n-----END--------\n", buff); 
    for(i=0; i<bufferSize-1;i++) 
    { 
     for(j=i+1;j<bufferSize-1;j++) 
     { 
      if((int)buff[i] > (int) buff[j]) 
     { 
      swap = (char)buff[i]; 
      //printf("%c with %c\n", buff[i], buff[j]); 
      buff[i] =(char) buff[j]; 
      buff[j] = swap; 
     } 
     } 
    } 
    //buff[bufferSize-1] = '\0'; 
// for(i=0;i<bufferSize;i++){ 
//  printf("%c", buff[i]); 
// } 

    printf("'%s'\n-----END--------\n", buff); 
    printf("exit\n"); 

    return 0; 
} 

И C# код завершает около 10 м:

using System; 

namespace MySort { 
    public class Some { 
    public static void Main() { 
     int bufferSize = 1000000; 
     string loremFile = System.IO.File.ReadAllText("lorem.txt"); 
     var chars = loremFile.ToCharArray(0, bufferSize); 

     for(int i = 0; i<bufferSize; i++) { 
     for(int j=i+1; j<bufferSize; j++) { 
      if(chars[i] > chars[j]) { 
      char swap = chars[i]; 
      chars[i] = chars[j]; 
      chars[j] = swap; 
      } 
     } 
     } 

     Console.Write("'"); 
     Console.Write(chars); 
     Console.Write("'\n"); 
    } 
    } 
} 
+2

Вы пробовали IE6? – 6502

+0

Я думаю, что самый важный вопрос для нас на данный момент - «почему?» - чего вы пытаетесь достичь? – SmokeyPHP

+0

@ 6502 Это просто жестокость lol – SmokeyPHP

ответ

0

Я считаю, что Chrome имеет тенденцию висеть во время длительных операций, а иногда и разобьет. Я сделал что-то в Chrome и Firefox, и Chrome просто повредил вкладку, так как Firefox тоже будет навсегда, но это не сработает. Я бы продолжал получать всплывающее окно Continue/Stop Script, хотя в Firefox.

Если вы говорите, что требуется около 20 минут для завершения в c, тогда я бы предположил, что веб-браузер займет много времени (если не больше), и в большинстве случаев браузеры попытаются убить скрипт.

Смежные вопросы