一些优化angularjs的小技巧

关于优化ng的手段网上已经有很多了,核心都是从$$watchers这个作用域内部属性说起的,今天我来说点别的,本质还是不变的,因为这是ng的硬伤,不过我相信只要运用合适的手法,这些问题还是可以避免的.

本文参考老外的一篇blog, --->.


ng简介

angularjs简称ng,是google出品的mvvm框架,此在提高前端项目开发效率(实践中来看确实很能提高开发效率),以控制器,指令,服务来围绕整个项目,内部以独有的DI来解决三层之前的调用问题.更多的详情信息可以参考我之前写的ng源码分析.

ng的硬伤

说到硬伤就要先说下它的简单的数据绑定原理

ng里每个页面上定义的model其实都会在当前作用域下添加一个监听器,内部容器就是$$wachers数组,只要页面任何一个model发生变化了,就会触发作用域内部$digest方法,它会依次查找当前作用域树里的所有model,是保证页面上的模型能得到数据同步,所以这个是非常消耗程序时间的,官方的说法就是当页面上出现2000个监听器时,页面性能就会明显下降.所以要提高ng的性能,就要从这方面入手了.

tip1: 一次绑定

其实这个网上别人已经说过了,这里说下新的用法,ng1.3.0+的版本已经内置提供了一个语法来支持模型只绑定一次的情况,看下面的例子

  • old code

hello
  • new code

hello

可以看到新的语法就是在model前面加上::,相信这个语法要比网上用的第三方插件要方便的多了.

tip2: $scope.$digest vs $scope.$apply

相信很多人对$apply方法不陌生,它一般用在,当不在ng的环境里执行代码的时候,为了保证页面的数据同步,在代码执行完成之后调用$apply方法会触发内部$digest来检查作用域里所有的模型,其实在它的内部是这样调用的,下面只写出一些代码片段

...
...
$rootScope.$digest
...
...

所有它其实是调用$rootScope根作用域下的$digest,那么不同作用域下的$digest有什么区别呢?其实最重要的区别就在于

$digest 只深度查找调用方下面所有的模型

所以$scope$rootScope相比,要节省掉很多查找模型的时间.

不过想要保证页面上所有模型数据的同步,还是得调用$rootScope的,所以在写代码之前最好想想哪些数据是要同步变化的.

tip3: 尽可能少调用 ng-repeat

ng-repeat默认会创建很多监听器,所以在数据量很大的时候,这个非常消耗页面性能,我觉的只有在当需要经常更新数据列表的时候才需要用ng-repeat,要不然放那么多的监听器在那里也是浪费,这时候可以用ng自带的$interpolate服务来解析一个代码片段,类似于一个静态模板引擎,它的内部主要依赖ng核心解析服务$parse,然后把这些填充数据之后的代码片段直接赋给一个一次性的模型性就可以.

tip4: 尽量在指令里写原生语法

虽然ng提供了很多的指令比如ng-show,ng-hide,其实它们作用就是根据模型的true,false来显示或隐藏一个代码片段,虽然能够很快速的实现业务要求,但是这些指令还是默认会添加监听器,假如这些代码片段存在于一个大的指令里面时,更好的方法是在指令link里编写.show(), .hide()这些类似的jq方法来控制比较好,这样可以节省监听器的数量,类似的还有自带的事件指令,这些其实都可以在外围指令里通过使用addEventListener来绑定事件,反正在写代码之前,最好想想怎么样来使监听器的数量最少,这样才能全面的提高页面性能.

tip5: 页面内尽量少用filters

当在页面内的模型后面增加filter时,这个会造成当前模型在$digest里运行两次,造成不必要的性能浪费.第一次在$$watchers检测任务改变时;第二次发生在模型值修改时,所以尽量少用内联时的过滤器语法,像下面这样的非常影响页面性能


推荐使用$filter服务来调用某个过滤器函数在后台,这样能明显的提高页面性能,代码如下

$filter('filter')(array, expression, comparator);

总结

上面都是些提高ng项目性能的一些小技巧,虽然ng很强大,但是不规范的代码也会破坏它的性能,所以在写代码之前最好构思下哪些地方是不需要监听器的.

时间: 2024-08-31 14:26:52

一些优化angularjs的小技巧的相关文章

网站SEO优化五个小技巧的分享

在欧美等发达国家,网站的入口基本上都是从搜索引擎,而对于我们国家,因为网民的层次不同,搜索引擎只能够成为网站的入口之一,但是所占的比重也是相当高的,最起码有七成,还有一部分是通过导航,直接流量等等,不过最重要的还是搜索引擎,所以对于我们个人网站来说,做好搜索引擎优化是非常重要的,有时候能够直接关系到你网站的成败!可是如何才能够做好网站的SEO优化呢?仅仅依靠理论上的知识是远远不够的,还需要从实践中摸索出自己的经验,当然能够学习一些成功的实战经验,能够让自己在SEO优化的道路上少走一些弯路,下面就

xp其他优化和一些小技巧_应用技巧

1.清除预读文件 当xp使用一段时间后,预读文件夹里的文件会变的很大,里面会有死链文件,这会减慢系统时间.建议,定期删除这些文件.(c:\windows\prefetch) 2.运行菜单中残余指令的清除  在HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows\CurrentVersion\explorer\RunMru 中删去不需要的键值即可  3.添加控制面板中的组件到开始菜单中  在HKEY_CLASSES_ROOT\CLSID中查找关键字"控制面板

分享新手站长做网站优化时的小技巧

目前基本上所有的网站都离不开搜索引擎优化,就好像刚刚一个朋友问到我,一个刚刚新做出来的网站要怎么样去做推广,本文将介绍一些网站优化的最基础的知识,希望对新手站长有所帮助,高手请直接跳过. 第一点,我们做网站应当明确的是baiduspider目前只能读懂文本形式的内容.因此我们做网站优化时务必把关键字用纯文本的形式展现.网站中尽量少使用js或者flash等.并且出现图片时也尽量采取添加alt标签,帮助蜘蛛理解图片所表达的内容. 第二点,网站结构的合理安排.整个网站尽量采取扁平化结构,从首页到最终内

解析网站优化过程中的小技巧

对于很多比较资深的站长来说,网站优化就是一份轻松有趣且充满自豪感的工作,但是很多新手seoer在学习网站优化时会感觉有些吃力,一方面是不懂得如何贯通优化的思路,另一方面是不知道如何简单的运用一些小技巧来进行网站的优化.下面易水上海SEO简单介绍下网站优化过程中的一些小技巧: 第一点:学会用robots文件.很多站长不理解了,robots.txt文件是一个禁止搜索引擎爬行的文件,seo的工作不就是想让搜索引擎收录吗,为什么要禁止呢?当我们在建设一个新站时,当我们还没有整理好网站或者栏目的title

AngularJS 整理一些优化的小技巧_AngularJS

关于优化ng的手段网上已经有很多了,核心都是从$$watchers这个作用域内部属性说起的,今天我来说点别的,本质还是不变的,因为这是ng的硬伤,不过我相信只要运用合适的手法,这些问题还是可以避免的. ng简介 angularjs简称ng,是google出品的mvvm框架,此在提高前端项目开发效率(实践中来看确实很能提高开发效率),以控制器,指令,服务来围绕整个项目,内部以独有的DI来解决三层之前的调用问题.更多的详情信息可以参考我之前写的ng源码分析. ng的硬伤 说到硬伤就要先说下它的简单的

优化小技巧 通过站内文章提升网站权重

什么是权重?从数学的角度来讲,为了显示若干量数在总量中所具有的重要程度,分别给予不同的比例系数,这就是加权.加权的指派系数就是权数,又称权重.权值.引用到网站的衡量上,就是搜索引擎判断一个网站是否权威的一个标准,最先有权重的说法还是谷歌提出,也就是人们熟知的PR!而国内的百度并无BR一说,都是站长们自己定义的,但大部分站长工具都提供了百度权重的查询,可见权重这个概念在每个站长心中占有很大比重! 百度衡量一个网站的权威度用什么体现,百度官方并没有声明,但从站长们的经验来看,站长工具给出的百度权重的

企业网站SEO优化中的一些小技巧

很高兴卓越SEO蓝天能给A5的朋友们带来一篇文章.今天这篇文章主要是说企业网站的SEO优化细节,好了啰嗦的话不多说我们进入正题. 1.企业搜索引擎关键词分布 我在查看竞争对手网站时发现很多Seoer都会把网站关键词链接堆积在网站的顶部或者是尾部,我觉得这其实很没必要,关键词尽量分布密集不要太大,堆积关键词在前几年就被google封杀了.把关键词分散开其实会大大提高搜索引擎的好感,也不会让搜索引擎认为作弊. 2.企业网站的文章如何写 一些朋友大多都会复制别人的文章进行修改后发布到自己的网站,这样的

125个提升网页可用性的优化小技巧(四)

  往期回顾: <有图有案例!125个提升网页可用性的优化小技巧(一)> <有图有对比!125个提升网页可用性的优化小技巧(二)> <有图有案例!125个提升网页可用性的优化小技巧(三)> 尽可能兼顾不同用户的知识和技能水平 用户可能是新手.专家或介于两者之间,要根据用户情况设计界面. △ 使用适当的新人引导(四种主要的新人引导策略) 这四种用法刚好可以用一个2*2的矩阵来表示.根据下方图示选择最适合你界面的方式: △ 为新手用户添加提示而不干扰专家用户 △ 使用卡片分

125个提升网页可用性的优化小技巧(三)

  往期回顾: <有图有案例!125个提升网页可用性的优化小技巧(一)> <有图有对比!125个提升网页可用性的优化小技巧(二)> 除了引导用户,还要减少他们的认知流程,以保持流畅状态. 尽可能少让用户做计算 千万别把计算这种事情丢给用户,让计算机来处理. △ 显示剩余数量 在界面内体现用户当前所处位置 界面就像机场,如果没有"你在这里"的标记,用户会迷路,因此记得提供标记. △ 在导航菜单上突出当前所选 △ 在复杂的界面中提供面包屑导航或步骤图示 △ 在页面标