JSI2性能测试报告
装载效率测试
测试页面见:test/load-eff-test.html
为了测试结果更显客观,我选择了第三方类库的装载测试:
'com.yahoo.yui.*',
'net.conio.prototype.*',
'net.fckeditor.*',
'org.jquery.*',
'us.aculo.script.*'
共22个脚本文件(对于JSI来说还有诺干包定义文件)。
FF2:
标记导入时间(原始方式): 469 , 469 , 1047 , 484 , 484 , 437 , 469 , 484
同步导入时间: 469 , 453 , 484 , 437 , 469 , 453
延迟导入时间: 921 , 765 , 891 , 906 , 953 , 906 , 922
异步导入时间: 859 , 1093 , 1141 , 1031 , 1641 , 1125 , 1078 , 1093 , 1157 , 1141
IE7:
标记导入时间: 343 , 297 , 297 , 344 , 328 , 328
同步导入时间: 281 , 250 , 235 , 235 , 234 , 234 , 250 , 265
延迟导入时间: 922 , 422 , 406 , 391 , 391 , 391 , 407 , 391
异步导入时间: 625 , 672 , 672 , 703 , 703 , 672 , 703 , 704 , 688
标记导入时间(原始方式): 469 , 469 , 1047 , 484 , 484 , 437 , 469 , 484
同步导入时间: 469 , 453 , 484 , 437 , 469 , 453
延迟导入时间: 921 , 765 , 891 , 906 , 953 , 906 , 922
异步导入时间: 859 , 1093 , 1141 , 1031 , 1641 , 1125 , 1078 , 1093 , 1157 , 1141
IE7:
标记导入时间: 343 , 297 , 297 , 344 , 328 , 328
同步导入时间: 281 , 250 , 235 , 235 , 234 , 234 , 250 , 265
延迟导入时间: 922 , 422 , 406 , 391 , 391 , 391 , 407 , 391
异步导入时间: 625 , 672 , 672 , 703 , 703 , 672 , 703 , 704 , 688
运行时间测试
测试脚本管理后对新能的影响,影响因素有:全局变量和局部变量的查找时间差异,eval的脚本和script标记直接插入的脚本的可能差异。(这 个测试不具有普遍性,这里我主要是测试了一下浏览器对局部变量的访问速度【JSI里面访问变量都是装载单元内的局部变量】,所以故意测试了大量局部变量访 问的操作)
测试页面见:test/runtime-eff-test.html
FF2:
jsiTime: 845 , 927 , 598 , 687 , 764 ,
scriptTime: 1432 , 950 , 1305 , 1278 , 1219 ,
evalTime: 1644 , 1373 , 1322 , 1186 , 1360 ,
execTime: 0
dscriptTime: 1432 , 950 , 1305 , 1278 , 1219 ,
IE7:
jsiTime: 295 , 205 , 157 , 315 , 156 , 142 , 375 , 328 , 172 , 172 ,
scriptTime: 172 , 172 , 189 , 140 , 251 , 187 , 217 , 203 , 172 , 234 ,
evalTime: 236 , 249 , 139 , 172 , 281 , 171 , 172 , 108 , 436 , 359 ,
execTime: 219 , 234 , 314 , 157 , 220 , 266 , 204 , 234 , 187 , 95 ,
dscriptTime: 187 , 265 , 294 , 326 , 187 , 328 , 141 , 221 , 127 , 249 ,
jsiTime: 845 , 927 , 598 , 687 , 764 ,
scriptTime: 1432 , 950 , 1305 , 1278 , 1219 ,
evalTime: 1644 , 1373 , 1322 , 1186 , 1360 ,
execTime: 0
dscriptTime: 1432 , 950 , 1305 , 1278 , 1219 ,
IE7:
jsiTime: 295 , 205 , 157 , 315 , 156 , 142 , 375 , 328 , 172 , 172 ,
scriptTime: 172 , 172 , 189 , 140 , 251 , 187 , 217 , 203 , 172 , 234 ,
evalTime: 236 , 249 , 139 , 172 , 281 , 171 , 172 , 108 , 436 , 359 ,
execTime: 219 , 234 , 314 , 157 , 220 , 266 , 204 , 234 , 187 , 95 ,
dscriptTime: 187 , 265 , 294 , 326 , 187 , 328 , 141 , 221 , 127 , 249 ,
上面的基数太小,随机误差太大,调整原始数据从新测试一遍jsiTime和scriptTime
jsiTime:
576
,
658
,
688
,
703
,
611
,
608
,
scriptTime: 706 , 608 , 562 , 547 , 655 , 657 ,
scriptTime: 706 , 608 , 562 , 547 , 655 , 657 ,
总结:
JSI的装载性能表现不错,完全不必计较。
托管代码的运行性能也没有太大区别,不过,因为。JSI托管脚本使用的变量基本都是装载单元内的局部变量(本地声明变量,或者外部依赖的引用或值拷贝),所以,对于FF这类局部变量比全局变量访问速度快不少的解释引擎,JSI托管脚本可以达到更好的运行效率。
有个奇怪的问题,JSI在装载类库时,与传统模式相比,肯定增加了些额外的运算,但是,貌似JSI的同步装载模式下,装载脚本的耗时比传统模式还少(IE 表现明显)?为何?
欢迎大家对这奇怪的现象提出自己的猜想,我稍后贴出我对此问题的看法^_^