首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >瘦客户端与pc机之间的javascript性能

瘦客户端与pc机之间的javascript性能
EN

Stack Overflow用户
提问于 2010-08-02 21:40:33
回答 2查看 784关注 0票数 3

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

例如,下面是我用来确保所需字段被填充的内容。

对于.numeric和.alaphanumeric,还有两种类似的方法,它们对表单进行严格的测试,并推送错误以阻止表单提交。

代码语言:javascript
运行
复制
$$( '.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秒。正如我所提到的,我已经在PC上测试过IE6,没有看到性能损失。给博萨诺瓦的电话让我升级了终端的内存,就在这个帖子发布之前,结果并没有改变。

我可以更改脚本,所以我只循环了一次表单字段,并在执行过程中处理.required .numeric .alphanumeric,我确信这会有所帮助。就像现在一样,PC和终端(瘦客户端)在性能上存在这样的差异。我很想知道原因。

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

更新:>>>>>>>>>>>>>>>>>

我仍然在测试和调查这个问题,并认为我会分享这一点。昨天我们收到了一个较新的终端,我把它装上并进行了测试。与其他浏览器一样,运行IE6的新终端运行得完美无缺。当然,它比PC慢了一点,因为1.它运行IE6,2.它是一个瘦客户机,但是速度相差几百秒,而运行相同脚本的速度相差10-50秒。两个不同的瘦客户机的物理规格并不是不同的1.2 ghz(旧的)和1.6GHz(新的)内存是相同的,HD/DOM是512 of (旧)和1gig(新)。还没有能够指出在旧终端正在发生的事情,但似乎与终端的具体模式/修订有关。

更新:>>>>>>>>>>>>>>>>>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-02 21:44:27

我对Prototype不太了解,但是您应该将该元素缓存在局部变量中,而不是将$函数封装在它周围。

代码语言:javascript
运行
复制
$$( '.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);
   }
});

我不认为这将解决所有的性能问题,但也许它会减少几秒钟。我建议继续进行您提到的更改,这样它就可以在一个循环中检查所有错误/类,而不是循环遍历每种类型的类的所有元素。

也许是这样的(同样,我对原型不太了解,所以有些东西可能已经过时了):

代码语言:javascript
运行
复制
var errors = {};

var rules = { 
   ".required": function (elem) { return elem.value.length == 0; },
   ".alphanumeric": function (elem) { return /[a-zA-Z0-9]+/.test(elem.value);  }
};

$$( "input", "#your_form_id" ).each(function ( elem ) {
   var el = $(elem)
   var classes = (function () { 
      var cls = elem.className.split(' '), classMap = {};
      for (var k in cls) classMap[cls[k]] = true;
      return classMap;
   })(); // get the classes for this element

   for ( var rule in rules ) {
       error[rule] = [];
       if ( rule in classes && !rules[rule](elem) ) {
          el.addClassName("nonvalid");
          el.siblings().first().addClassName("error");
          errors[rule].push(el);
       }
   }

});

您的错误将出现在errors中。要访问任何失败了所需规则的元素,您需要执行errors["required"],这将返回一个数组。

票数 0
EN

Stack Overflow用户

发布于 2010-08-02 21:45:32

嗯,IE6的Javascript引擎很慢--记住,它可以追溯到微软坚持任何真正的网络应用程序开发都应该使用ActiveX的时候。在一个拥有廉价的,可能不是太快的CPU的瘦客户端上,它会非常慢。

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

代码语言:javascript
运行
复制
$$( 'input.requiredfield' ).each( function ( elem ){
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3392013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档