Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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 如何在大范围内加速AngularJS渲染?_Javascript_Angularjs_Performance - Fatal编程技术网

Javascript 如何在大范围内加速AngularJS渲染?

Javascript 如何在大范围内加速AngularJS渲染?,javascript,angularjs,performance,Javascript,Angularjs,Performance,我现在正在为我的公司开发一个angular应用程序,但我的应用程序速度非常慢,所以我尝试在任何地方使用onetimebind对其进行tunning,跟踪…但一开始加载速度更快,但仍然很慢,它由非常大的嵌套对象组成,我已经计算了对象的总数,它从680开始,对于应用程序的正常使用,可以上升到+6000,哦,是的,我应该精确地说,应用程序正在生成一个表单,范围中几乎+90%的对象属于一个输入,并且每次客户端单击(无线电)键控/更改(文本)时都会更新 它也有5/6个由对象组成的数组,数组根据客户的选择变

我现在正在为我的公司开发一个angular应用程序,但我的应用程序速度非常慢,所以我尝试在任何地方使用onetimebind对其进行tunning,跟踪…但一开始加载速度更快,但仍然很慢,它由非常大的嵌套对象组成,我已经计算了对象的总数,它从680开始,对于应用程序的正常使用,可以上升到+6000,哦,是的,我应该精确地说,应用程序正在生成一个表单,范围中几乎+90%的对象属于一个输入,并且每次客户端单击(无线电)键控/更改(文本)时都会更新


它也有5/6个由对象组成的数组,数组根据客户的选择变大或变小,这就是它变大的原因,每次我向数组中添加一个对象,都需要一秒钟的时间来渲染它,因此,我尝试使用嵌套控制器,认为如果对象的子对象被更新,Angular将只渲染该子对象,而不是所有其他子对象,但不知何故,应用程序变得更慢、更大:s(当我使用ng show而不是ng if时,速度会快一些,但使用的内存从~50Mb跳到~150Mb)

我还应该指出,表单是向导式的,并不是所有的输入都同时显示,显示的输入数量占总输入的10%-20%


以前有人遇到过这个问题吗?有人知道如何处理大范围吗?

很遗憾,但这是角度视图渲染的本质。 模型中的更新会触发整个视图的潜在重画。无论是否隐藏了元素。双向数据绑定确实会扼杀性能。如果你只需要渲染一次视图,你可以考虑评估,在这种情况下有优化,但是我假设你的表单动态地改变,因此2路数据绑定是必需的。p> 您可以尝试绕过这个限制,但要封装整个MVC的子部分。这样,包含的控制器只更新与该作用域关联的特定视图

<>你可能想考虑使用反应(这是第一个目标来确切地说明你的用例)

请看这篇博客文章,比较angular和react Js之间的渲染管道


“如何处理大范围”-由于Angular中的双向数据绑定,将它们分离为嵌套元素(控制器、具有隔离范围的指令等)。如果有1000个对象,则监视更改会减慢速度。所有项目都需要双向绑定,还是只需要呈现一次?有一些技巧,你可以做的一件事是在向导页面级别使用
ng if
——这会将观察者的数量减少到10%-20%。其他导致性能降低的因素是函数观察器,比如
{{generateData()}
——确保如果您有这些观察器,那么它们不应该仅仅是一个简单的getter——例如,那里没有for循环。最后,确保没有深度观察者(
$scope.$watch(…,true)
)或大型嵌套对象“它也有5/6个由对象组成的数组,数组根据客户端的选择变大/变小,这就是它变大的原因,每次我向数组添加对象时,都需要一秒钟来渲染它”--如果您的业务逻辑(即查找、筛选、搜索)生成新对象所花费的时间比在这种情况下要长,那么您可以根据需要使用loadsh.js、linq.js等来快速生成和处理它。这样,它将使您的新对象快速自动生成,您的绑定工作也会顺利进行。