瘦客户机和pc机之间的javascript性能

瘦客户机和pc机之间的javascript性能,javascript,performance,prototypejs,thin-client,Javascript,Performance,Prototypejs,Thin Client,我有一个web应用程序,使用瘦客户端(bosanova终端)作为用户的前端。我注意到瘦客户端和PC之间JavaScript的一些性能差异。终端运行嵌入IE6的windows XP,我所指的页面使用prototype JS framework对表单元素进行一些相当简单的验证 例如,下面是我用来确保填充必填字段的内容。 对于.numeric和.alaphanumeric,还有两个类似于此的函数,它们进行协调测试并推送错误以停止提交表单 $$( '.requiredfield' ).each( fun

我有一个web应用程序,使用瘦客户端(bosanova终端)作为用户的前端。我注意到瘦客户端和PC之间JavaScript的一些性能差异。终端运行嵌入IE6的windows XP,我所指的页面使用prototype JS framework对表单元素进行一些相当简单的验证

例如,下面是我用来确保填充必填字段的内容。
对于.numeric和.alaphanumeric,还有两个类似于此的函数,它们进行协调测试并推送错误以停止提交表单

$$( '.requiredfield' ).each( function ( elem ){
   if ( ( $( elem ).value.length == 0 ) || ( $( elem ).value == null ) ) {
        $( elem ).addClassName( "nonvalid" );
        $( elem ).siblings().first().addClassName( "error" );
        requiredErrors.push( $( elem ) );
   }

});
我所看到的问题是,Firefox或IE中的PC页面上有5-20个字段的表单可能需要半秒钟的时间来处理,而没有验证的时间可能会更长。然而,在终端上,运行验证所需的时间比不运行验证的同一页面要长15-25秒。正如我所提到的,我已经在IE6的PC机上进行了测试,没有看到性能损失。打电话给Bosanova,让我升级了终端的内存,我在发布之前就这么做了,结果没有改变

我可以更改脚本,这样我只需在表单字段中循环一次,并在执行时处理.required.numeric.alphanumeric,我相信这会有所帮助。现在,PC和终端(瘦客户机)之间的性能存在如此大的差异。我很想知道原因

如果有人有过故障排除的经验,或者知道prototype/javascript为什么会在终端上遭受如此大的性能损失,我将非常感谢一些提示

更新:>>>>>>>>

我一直在测试和研究这个问题,我想和大家分享一下。我们昨天收到了一个新的终端,我已经加载并测试了它。运行IE6的新终端与任何其他浏览器一样工作完美。当然,它比个人电脑慢一点,因为1。它运行IE6和IE2。它是一个瘦客户机,但是速度差在数百秒,而运行相同脚本的速度差在10-50秒。2个不同瘦客户机的物理规格并不是说1.2 ghz(旧)和1.6 ghz(新)内存是相同的,HD/DOM是512MB(旧)和1gig(新)。仍然无法确定旧终端中发生了什么,但似乎与该终端的特定型号/版本有关


更新:>>>>>>>

我对Prototype了解不多,但您应该将该元素缓存在局部变量中,而不是将$function包装在其周围

$$( '.requiredfield' ).each( function ( elem ){
   var el = $(elem)
   if ( (elem.value.length == 0 ) || elem.value == null ) ) { // is elem.value ever null?
        el.addClassName( "nonvalid" );
        el.siblings().first().addClassName( "error" );
        requiredErrors.push(el);
   }
});
我认为这并不能解决所有的性能问题,但可能会缩短几秒钟。我建议继续进行您提到的更改,以便它在一个循环中检查所有错误/类,而不是在每种类型的类的所有元素中循环

可能是这样的(再说一次,我不太了解原型,所以有些事情可能会出错):


您的错误将出现在
错误中。。要访问任何未通过所需规则的元素,您需要执行
错误[“required”]
,这将返回一个数组。

好吧,IE6的Javascript引擎很慢-请记住,它可以追溯到Microsoft坚持任何真正的Web应用程序开发都应该使用ActiveX完成的时候。在一个拥有廉价但可能不是太快CPU的瘦客户机上,它会非常慢

通过更改选择器,可以稍微加快代码的速度:

$$( 'input.requiredfield' ).each( function ( elem ){

一开始我还以为是CPU,但我的一个客户机有一个终端,CPU的大小是我测试箱的两倍。实际上,运行一个几乎相同的页面需要更长的时间。实际上要长得多,大约40秒才能在25个字段上运行验证。如果这发生在我身上,我可能会编写一个小的计时器例程,并开始缩小花费时间的范围。请注意,在IE6中,添加类名(这会触发重新布局)等操作也可能非常慢。然而,除此之外,当我得知在该客户端运行的IE6与在装有XP的PC上运行的IE6有任何不同时,我会非常惊讶。是的,立即设置一个计时器。许多不同的表单将此代码与不同数量的必填/数字/字母数字字段一起使用,没有一个单独的表单作为资源占用者跳出。正如预期的那样,每个字段所花费的时间与表单中该字段类型的数量成正比。只是在终端上比其他任何地方都高。我已经观察到终端连接方式的不同(它打开的端口比标准PC多),但随着浏览器的发展,我也会感到惊讶。。现在我开始想知道=)在thinclient页面上运行便携式firefox的速度非常快,不是pc速度快,而是thinclient上的IE6速度快得令人眼花缭乱。到目前为止,我运行的测试显示,thinclient上的portable firefox运行2-4.5秒来完成ajax请求和验证,而我在IE中看到的是15-20秒。我希望我能提供帮助-我真的很感谢你的提问,因为这是一些非常有趣的数据,我可以打包以备将来参考。谢谢你的提示。我很高兴地承认我还在学习JavaScript。我是一名服务器端程序员,在过去的一年里,随着项目的需要,我一直在涉足前端JavaScript。我会在早上重新做一点,看看我是否可以容忍。只是为了更新。我已经添加了你的一些建议,并且确实加快了脚本的速度。这样做,我可以绕过很多逻辑,直到用户出错。因此,这对一些人有所帮助(减少到8-15秒,而不是15-20秒)。PC和thinclent之间仍然有很大的区别。@Nathan:你考虑过使用许多验证库中的一个吗?我敢肯定,它们中的很多会让你的生活轻松很多。除非你需要一些非常非常定制的行为,我相信他们会捕获你需要的所有特性。I ac
$$( 'input.requiredfield' ).each( function ( elem ){