为什么JavaScript选择排序挂起
Why JavaScript selection sort hangs
我有以下代码:
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
,它在2米35秒内完成。
以下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");
}
}
}
我认为Chrome在长时间操作时有挂起的趋势,有时会崩溃。我在Chrome和Firefox中做过一些事情,Chrome只会崩溃,而Firefox也需要很长时间,但它不会崩溃。我会一直在Firefox上弹出"继续/停止脚本"。
如果你说在c
中完成大约需要20分钟,那么我可以想象网络浏览器会花费很长时间(如果不是更长的话),在大多数情况下,浏览器会试图杀死脚本。
相关文章:
- JavaScript执行暂时挂起页面
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 应用将图表转换为图像的jqplot代码时Chrome挂起
- 如何在不使用Internet Explorer的情况下从未挂起的HTML文件执行程序
- MongoDB collection.find()查询挂起
- 使用子字符串方法时应用程序挂起的原因
- 如何在AngularJS中取消挂起的请求
- 从node.js应用程序调用Mongoose Model.save()时挂起
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- IE 10 挂起 XMLHttpRequest 6 分钟,然后响应请求(使用 AngularJS 实现 CRSF)
- 挂起 JavaScript 键关闭事件
- HERE 映射 JS API v3 集群提供程序挂起,添加许多数据点
- Ajax 调用挂起在 jQuery 中
- writeln img src将数据提交到外部系统-Firefox和IE挂起
- 在jQuery中,.state()如何确定一个承诺是挂起的、已解决的还是被拒绝的
- 为什么JavaScript中没有挂起回调函数
- SP2007使IE在运行jssor代码时挂起
- 为什么JavaScript选择排序挂起