-2

我有以下代码:

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 0002m 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#代码完成约10m:

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");
    }
    }
}
4

1 回答 1

0

我相信Chrome在长时间运行时有挂起的趋势,有时会崩溃。我在 Chrome 和 Firefox 中做过一些事情,Chrome 只会让标签崩溃,因为 Firefox 也需要永远,但它不会崩溃。尽管在 Firefox 上,我会不断收到继续/停止脚本弹出窗口。

如果您说它需要大约 20 分钟才能完成,c那么我想 Web 浏览器会花费很长时间(如果不是更长的话),并且在大多数情况下浏览器会尝试终止脚本。

于 2013-07-31T16:43:32.057 回答