[BlueDestiny]Javascript效率经验谈,欢迎讨论和提供好的思路 AMD2500+512 DDR生成复杂的HTML 数据量:10000;花费时间:516ms; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 学习mingxuan3000 看不到图,是由于初始化数组的内容是数字,不要输字母就可以看到了BlueDestiny limit方法可以改下,JS中有内置的slice方法就可以直接截取数组 初始化的时候有两个数组,但是其中的内容差不多,第二个数组和第一个数组差不多,而第二次循环造成执行时间长,大约100000就执行14秒了,这样初始化比较慢,稍稍改下,不过代码也不是很好,下面用了两次join,其实可以用一次然后用正则替换会更好些function fnInit() { window.sDataSource = ""; window.nNumber = parseInt($("generateNumber").value); window.dataSource = new Array(); var begin=new Date().valueOf(); for (var i=0; i<nNumber; i++) { dataSource[dataSource.length] = Math.random()*1000000; }; aDataSource = "\xaf"+dataSource.join("\xbf\xaf")+"\xbf"; sDataSource = "\xaf"+dataSource.join("\xaf"); oProcess.value = "数据量:" +i+ ";花费时间:" +(new Date().valueOf()-begin)+"ms;";} 分析的很好,很有价值!“减小输出字符串的大小”让我想起用htc也许会更好! ^_^ JS的效率是个问题,不过终究其是script脚本嘛,javascript权威指南中也有不建议让其做耗时的操作。不过优化是肯定的,meizz的树文档中有很多优化的经典理论。包括需要时再生成,利用正则式进行快速查找,利用内置的joion()方法进行字符的快速处理等...不能不读啊。[BlueDestiny]最近怎么对JavaScript如此痴迷啊,有点走火入魔了,我最近陷入几个java项目中不能自拔了,抽不出身来玩了。郁闷。 数据量:100000;花费时间:16985ms;有时候数组运算的时候需要用s或者分钟来计算。。比较晕 呵呵,最近在研究自己的framework,比较小,所以分析了很多framework代码,包括兼容,效率,代码风格,美观,所有的这些都在范畴。所以也有些心得,XBL也看了,但感觉XBL与HTC来说,还是不要兼容XBL了,有些琐碎。 谢谢hb的提醒,我倒忘了Array有slice方法了:D 我原来试着用limit用在autocomplet上了,效率上可以大大的提高,但是也有一个问题就是控制比较麻烦,虽然用此方法理论上可以生成无限大的数量。如果纯理论研究,抛开应用,那么JS的效率仍然可以大大的提高,可以有slice,concat来拼合数组,把循环减少到最低。也就是把循环减少一个数量级。 生成复杂的HTML(已经包括事件和CSS)正则匹配Match(有循环)10000 数据量:10000;花费时间:781ms;P4 2.4 512DDR 也做了一个combox,三千条时,基本上看不出反应时间。代码太长,跟自己的以前combox比较,不同有:注1:EditableSelect4不是EditableSelect1的升级版,而是互补版,主要目的是想提高效率,支持3000或更多条选项,功能上有以下不同: a.可以达到,在3000或更多条选项选项时,反应时间在一秒内。 b.输入长度大于0时才将过滤后的选项列出。 c.先只列出可见的十二条,scroll时列出200条,如果还有更多,让用户决定是否将所有的选项列出。 d.舍弃“相等优先于相似”的功能。代码太长,贴出来怕浪费空间,晚上下班后我放到我的blog上让大伙批批。 我觉得 数组最大不要超过1w条,否则很容易挂的,优化方法楼上也说了meizz树里面就用字符串来代替大数组,等等好多方法,我觉得更加好的解决方案就是不要把数据全部加载啊,可以分批加载,分批处理,数据库的数据大了还分区处理呢 @jkc.先只列出可见的十二条,scroll时列出200条,如果还有更多,让用户决定是否将所有的选项列出。我原来也想用limit方法,感觉应该和你上面说的意思差不多,主要就是为了尽可能是输出少量的HTML,而scroll或者down或者up时,再把数据动态加入。后来一看,1w条数据量情况下,在匹配数据1000到2000条之间,HTML的字符串也算太大,不到一秒就可以出来了。(约在300-500ms之间)@patchclass(黑翼) 1w条数据一般初始化之后匹配输出的速度还是可以令人接受的。同上的匹配数据1000到2000条之间 谢谢!http://blog.never-online.net/uploads/200608/09_002205_match.png正则表达式中的"$"好像要用"\$"转意吧 JK_10000(JK) ( ) 信誉:121 2006-08-10 15:05:00 得分: 0 也做了一个combox,三千条时,基本上看不出反应时间。代码太长,跟自己的以前combox比较,不同有:注1:EditableSelect4不是EditableSelect1的升级版,而是互补版,主要目的是想提高效率,支持3000或更多条选项,功能上有以下不同: a.可以达到,在3000或更多条选项选项时,反应时间在一秒内。 b.输入长度大于0时才将过滤后的选项列出。 c.先只列出可见的十二条,scroll时列出200条,如果还有更多,让用户决定是否将所有的选项列出。 d.舍弃“相等优先于相似”的功能。代码太长,贴出来怕浪费空间,晚上下班后我放到我的blog上让大伙批批。 ------------------MSN 的 blog很慢,上传了一些代码到上面去了。http://jkisjk.spaces.live.com/?_c11_BlogPart_blogpart=blogview&_c=BlogPart&partqs=cat%3dDhtml%2b(Some%2bDhtml%2bCode%2b---JK---%2b) 初始化的时候有两个数组,但是其中的内容差不多,第二个数组和第一个数组差不多,而第二次循环造成执行时间长,大约100000就执行14秒了,这样初始化比较慢,稍稍改下,不过代码也不是很好,下面用了两次join,其实可以用一次然后用正则替换会更好些function fnInit() { window.sDataSource = ""; window.nNumber = parseInt($("generateNumber").value); window.dataSource = new Array(); var begin=new Date().valueOf(); for (var i=0; i<nNumber; i++) { dataSource[dataSource.length] = Math.random()*1000000; }; aDataSource = "\xaf"+dataSource.join("\xbf\xaf")+"\xbf"; sDataSource = "\xaf"+dataSource.join("\xaf"); oProcess.value = "数据量:" +i+ ";花费时间:" +(new Date().valueOf()-begin)+"ms;";} 生成复杂的HTML 数据量:10000;花费时间:2164ms;生成简单的HTML 数据量:10000;花费时间:2023ms; @amingo其实是怪我没有说清楚,测试数据不是说的是这里,而是指匹配时的速度,我看到有几个朋友都是出了这个数据...初始化时,我采用了三种方法,把数据存进了三个变量里,匹配时,也有三种方法可以选择,初始化的时间几乎都差不多的,主要看匹配时的速度。 我这里的匹配速度,我测的10000条数据,有效数据为1000-1100条,输出复杂的HTML,速度为360ms左右,方法为 正则匹配Match(有循环) 没什么经验,偶直接调用jsvalidation Processor: Intel(R) Pentium(R) M processor 1.73GHzMemory: 758MB RAM数据量:100000;花费时间:16094ms; Array.prototype.limit 纯属多余,js有内置方法 arrayObj.slice(start, [end]) 求大哥姐们DIV的相绝对定位(relative)在IE6中,需要手动F5刷新页面后,才能修正至正确的显示位置 怎样以十六进制输出的js文件? Ext 实用回车 请问,学javascript是不是一定要J有AVA基础啊 请教关于JS函数的问题,请高手多多指教! 日期替换的怪问题! 关于js输出日期的问题?? 一个jq点击隐藏显示的问题! 百度UMeditor的问题 能否控制echarts隐藏 如何嵌套输出javascript代码 怎么实现像msn spaces里随意拖动自动调整大小的功能
mingxuan3000
看不到图,是由于初始化数组的内容是数字,不要输字母就可以看到了
BlueDestiny
limit方法可以改下,JS中有内置的slice方法就可以直接截取数组
function fnInit() {
window.sDataSource = "";
window.nNumber = parseInt($("generateNumber").value);
window.dataSource = new Array();
var begin=new Date().valueOf(); for (var i=0; i<nNumber; i++) {
dataSource[dataSource.length] = Math.random()*1000000;
};
aDataSource = "\xaf"+dataSource.join("\xbf\xaf")+"\xbf";
sDataSource = "\xaf"+dataSource.join("\xaf");
oProcess.value = "数据量:" +i+ ";花费时间:" +(new Date().valueOf()-begin)+"ms;";
}
比较晕
正则匹配Match(有循环)
10000 数据量:10000;花费时间:781ms;P4 2.4 512DDR
代码太长,跟自己的以前combox比较,不同有:注1:EditableSelect4不是EditableSelect1的升级版,而是互补版,主要目的是想提高效率,支持3000或更多条选项,功能上有以下不同:
a.可以达到,在3000或更多条选项选项时,反应时间在一秒内。
b.输入长度大于0时才将过滤后的选项列出。
c.先只列出可见的十二条,scroll时列出200条,如果还有更多,让用户决定是否将所有的选项列出。
d.舍弃“相等优先于相似”的功能。代码太长,贴出来怕浪费空间,
晚上下班后我放到我的blog上让大伙批批。
我原来也想用limit方法,感觉应该和你上面说的意思差不多,主要就是为了尽可能是输出少量的HTML,而scroll或者down或者up时,再把数据动态加入。后来一看,1w条数据量情况下,在匹配数据1000到2000条之间,HTML的字符串也算太大,不到一秒就可以出来了。(约在300-500ms之间)@patchclass(黑翼)
1w条数据一般初始化之后匹配输出的速度还是可以令人接受的。同上的匹配数据1000到2000条之间
正则表达式中的"$"好像要用"\$"转意吧
也做了一个combox,三千条时,基本上看不出反应时间。
代码太长,跟自己的以前combox比较,不同有:注1:EditableSelect4不是EditableSelect1的升级版,而是互补版,主要目的是想提高效率,支持3000或更多条选项,功能上有以下不同:
a.可以达到,在3000或更多条选项选项时,反应时间在一秒内。
b.输入长度大于0时才将过滤后的选项列出。
c.先只列出可见的十二条,scroll时列出200条,如果还有更多,让用户决定是否将所有的选项列出。
d.舍弃“相等优先于相似”的功能。代码太长,贴出来怕浪费空间,
晚上下班后我放到我的blog上让大伙批批。
------------------
MSN 的 blog很慢,
上传了一些代码到上面去了。http://jkisjk.spaces.live.com/?_c11_BlogPart_blogpart=blogview&_c=BlogPart&partqs=cat%3dDhtml%2b(Some%2bDhtml%2bCode%2b---JK---%2b)
初始化的时候有两个数组,但是其中的内容差不多,第二个数组和第一个数组差不多,而第二次循环造成执行时间长,大约100000就执行14秒了,这样初始化比较慢,稍稍改下,不过代码也不是很好,下面用了两次join,其实可以用一次然后用正则替换会更好些
function fnInit() {
window.sDataSource = "";
window.nNumber = parseInt($("generateNumber").value);
window.dataSource = new Array();
var begin=new Date().valueOf(); for (var i=0; i<nNumber; i++) {
dataSource[dataSource.length] = Math.random()*1000000;
};
aDataSource = "\xaf"+dataSource.join("\xbf\xaf")+"\xbf";
sDataSource = "\xaf"+dataSource.join("\xaf");
oProcess.value = "数据量:" +i+ ";花费时间:" +(new Date().valueOf()-begin)+"ms;";
}
生成简单的HTML 数据量:10000;花费时间:2023ms;
Memory: 758MB RAM
数据量:100000;花费时间:16094ms;