Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加速JavaScript_Javascript_Jquery - Fatal编程技术网

加速JavaScript

加速JavaScript,javascript,jquery,Javascript,Jquery,我有一个脚本,可以运行它来检查在下拉列表中选择某些选项的次数。该页面有大约一千个或更多的下拉列表。在选择下拉列表时,单击所需的选项后,我们会在它选择和更新值之前冻结大约5秒钟。删除JavaScript时,它会立即正常运行。有没有办法加快JavaScript的运行速度 以下是脚本: <script type="text/javascript"> function getSelectedValues(){ var matches1 = $('#group1 se

我有一个脚本,可以运行它来检查在下拉列表中选择某些选项的次数。该页面有大约一千个或更多的下拉列表。在选择下拉列表时,单击所需的选项后,我们会在它选择和更新值之前冻结大约5秒钟。删除JavaScript时,它会立即正常运行。有没有办法加快JavaScript的运行速度

以下是脚本:

<script type="text/javascript">

    function getSelectedValues(){
        var matches1 = $('#group1 select').filter(function(){
            return $(this).val() == '1';
        }).length;
        var matches2 = $('#group2 select').filter(function(){
            return $(this).val() == '2';
        }).length;
        var matches3 = $('#group3 select').filter(function(){
            return $(this).val() == '3';
        }).length;
            var matches4 = $('#group4 select').filter(function(){
            return $(this).val() == '4';
        }).length;
            var matches5 = $('#group5 select').filter(function(){
            return $(this).val() == '5';
        }).length;
            var matches6 = $('#group6 select').filter(function(){
            return $(this).val() == '6';
        }).length;
            var matches7 = $('#group7 select').filter(function(){
            return $(this).val() == '7';
        }).length;

        // here's where we just update that new <span>
        if(matches1 > 1 || matches2 > 1 || matches3 > 1 || matches4 > 1 || matches5 > 1 || matches6 > 1 || matches7 > 1){
            $('span#resultgroup1<%=pempidw2%>').css( "color", "red" );
        }
        if(matches1 < 2 && matches2 < 2 && matches3 < 2 && matches4 < 2 && matches5 < 2 && matches6 < 2 && matches7 < 2){
            $('span#resultgroup1<%=pempidw2%>').css( "color", "black" );
        }  
    }

    // and here we bind to the change event for the selects
    // and re-call our above function.
    $('select').on('change', getSelectedValues);


</script> 

JavaScript可以帮助避免用户在多个部分中输入相同的答案。这一切都是100%的慢。

确保您充分利用了javascript/jquery语言! 也就是说,您可以加快代码的运行速度,但不能加快javascript本身的运行速度

有很多复制/粘贴的代码

var matches7 = $('#group7 select').filter(function(){
return $(this).val() == '7';
这些变量都可以重构为一个方法调用,并传入不同的类变量,以节省空间并帮助稍微加快程序的速度。重构后,您可以执行以下操作:

if $(this).val(){$(this).parent().css{ *set whatever css here}}
这将是一个主要的加速,因为您不必检查每个类型的所有值,只需检查您的变量$this所在的类

编辑:我意识到.filters可能会对DOM造成严重破坏,请尝试使用$select[value=1]:checked.length,以获得更好的总体性能


希望有帮助

您将这个问题标记为Java,但我在这里没有看到任何Java。我遗漏了什么吗?为什么不存储数据并简单地使用更改处理程序来更新它,而不是每次进行大量的DOM搜索?…页面有上千个下拉列表?有没有办法加快JavaScript的运行速度?不,你能写运行得更快的代码吗?是的。您的一些低效将来自您在事件处理程序中执行的所有DOM查询。假设您希望在每次运行处理程序时对相同的下拉列表执行操作,请在设置处理程序之前缓存$'groupX select'查询和其他查询,然后在处理程序函数中通过闭包使用它们。