Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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_Angularjs_Performance - Fatal编程技术网

Javascript 具有函数表达式的角度性能

Javascript 具有函数表达式的角度性能,javascript,angularjs,performance,Javascript,Angularjs,Performance,在角度表达式中运行函数的性能影响是什么?例如: <button ng-if="isValid()">Valid</button> $interval(function() { scope.isvalid = scope.isValid(); }, 100); 有效 我假设函数isValid()正在为每个摘要循环运行,每个摘要循环每秒发生多次。Angular中有哪些选项可用于提高性能 一个想法是在超时函数中每秒运行几次isValid(),然后设置一个范围变量,这样

在角度表达式中运行函数的性能影响是什么?例如:

<button ng-if="isValid()">Valid</button>
$interval(function() {
  scope.isvalid = scope.isValid();
}, 100);
有效
我假设函数isValid()正在为每个摘要循环运行,每个摘要循环每秒发生多次。Angular中有哪些选项可用于提高性能


一个想法是在超时函数中每秒运行几次isValid(),然后设置一个范围变量,这样我就可以控制“摘要”的速度。人们还有其他选择吗?

我认为,如果函数体只是一个简单的逻辑比较,不会影响性能,但如果它变得复杂,您可以尝试通过chrome工具评测代码,看看性能如何


另一种选择是,您也可以尝试将ng if绑定到控制器作用域属性,并修改控制器代码其他部分的值,因此您可以应用某种debounce()技术来避免多次设置作用域变量,我认为如果函数体只是一个简单的逻辑比较,不会影响性能,但如果变得复杂,您可以尝试通过chrome工具评测代码,看看性能如何


另一种选择是,您也可以尝试将ng if绑定到控制器作用域属性,并修改控制器代码其他部分的值,因此,您可以应用某种debounce()技术来避免多次设置作用域变量。看起来您在提交前检查表单是否有效。首先,按钮上的
ng if
无法实现使用相同函数有条件地应用类的目的,因为如果
isValid()
返回false,它甚至不在DOM中

您应该能够在输入上使用
ng模式
ng更改
钩子来确定用户输入表单值时的有效性。然后在按钮上,您可以根据表单的有效性应用该类:

<button ng-class="{
       'btn-success': myFormName.$valid,
        'btn-danger':  !myFormName.$valid
    }" ng-bind="(myFormName.$valid) ? 'Valid' : 'Invalid'"></button>

看起来您在提交表单之前正在检查表单是否有效。首先,按钮上的
ng if
无法实现使用相同函数有条件地应用类的目的,因为如果
isValid()
返回false,它甚至不在DOM中

您应该能够在输入上使用
ng模式
ng更改
钩子来确定用户输入表单值时的有效性。然后在按钮上,您可以根据表单的有效性应用该类:

<button ng-class="{
       'btn-success': myFormName.$valid,
        'btn-danger':  !myFormName.$valid
    }" ng-bind="(myFormName.$valid) ? 'Valid' : 'Invalid'"></button>

一种方法是在区间函数中运行isValid函数,在其中设置一个简单的范围变量。例如:

<button ng-if="isValid()">Valid</button>
$interval(function() {
  scope.isvalid = scope.isValid();
}, 100);

这将每100ms运行一次,但可能比摘要发出的调用次数更可取。您还可以使用$watch或$observe来减少呼叫数量

一种方法是在区间函数中运行isValid函数,在区间函数中设置一个简单的范围变量。例如:

<button ng-if="isValid()">Valid</button>
$interval(function() {
  scope.isvalid = scope.isValid();
}, 100);


这将每100ms运行一次,但可能比摘要发出的调用次数更可取。您还可以使用$watch或$observe来减少呼叫数量

在绑定时使用函数并不是一个好主意,但有时可能是必要的。总之,
isValid()
看起来怎么样?你能演示一下吗?isValid是一个返回true或false的函数,它做了大量的工作——在一个内部结构中循环并调用许多函数。单击按钮应该做什么?与问题无关。它可能是一个链接或任何DOM元素。嗯,我认为可能是这样的,你可以将
isValid()
移动到按钮点击内部,防止自然动作返回false。在绑定时使用函数一点也不好,但有时可能是必要的。总之,
isValid()
看起来怎么样?你能演示一下吗?isValid是一个返回true或false的函数,它做了大量的工作——在一个内部结构中循环并调用许多函数。单击按钮应该做什么?与问题无关。它可能是一个链接或任何DOM元素。嗯,我认为可能是,你可以将
isValid()
移动到按钮点击内部,防止自然动作返回false。我在评论中说过这是一个复杂的函数。Debounce是一个有趣的想法,我现在会读到。我在评论中说过这是一个复杂的函数。Debounce是一个有趣的想法,我现在会仔细阅读。这不是我问题的重点。我问的是函数的性能以及可用的选项。你对实际问题中多余的东西都很纠结。我只是想指出,你应该逐个输入检查有效性,而不是在每个摘要上检查有效性。好的,+1 inorganik,但我真的不想假设是什么改变了isValid()的结果(例如,变化来自各种来源,如定时器功能触发、监视程序等,而不仅仅是形式输入——这将是更简单的情况)奇怪的是,与用户输入无关的东西怎么可能是无效的?如果它是无效的,那意味着用户与它进行了交互。你应该检查特定的交互,而不仅仅是运行isValid()定期检查。例如,您可以运行一个长时间运行的脚本,定期检查网络是否存在使isValid()有效的任何内容改变。这不是我问题的重点。我问的是函数的性能和可用的选项。对于实际问题中多余的内容,你们都会感到困扰。我只是想指出,你们应该逐个输入检查有效性,而不是每个摘要。好的,+1 inorganik,但我会我真的不想假设是什么改变了isValid()的结果(例如,变化来自各种来源,如定时器函数触发、监视程序等,而不仅仅是形式输入——这将是更简单的情况)Cu