angularjs脏检查机制

  很久没有写点东西了,从今天起,在博客园对自己过往的工作,学习和生活做一些梳理,总结和温故。今天窗外的阳光不那么任性,天空白云点点,蝉鸣依旧嘹亮,安静地坐在阳台上,吹着风,敲击着键盘。于我而言,这就是幸福生活。

  转入正题,对angularjs脏检查机制做了个回顾和总结如下:

  参考文章:

   http://teropa.info/build-your-own-angular/

  http://www.cnblogs.com/likeFlyingFish/p/6183630.html

  http://www.ituring.com.cn/article/39865

1、Angular并不是周期性触发脏检查,更不是长连接轮询检查。

2、一般一个事件循环中执行到任务队列时,如UI事件,ajax请求或者 timeout 延迟事件等触发脏检查。

3、Angular 每一个绑定到UI的数据,就会有一个 $watch 对象。

4、所有的watch存储在$$watchList中,一次脏检查就是调用一次 $apply() 或者 $digest(),遍历检查所有watch,将数据中最新的值呈现在界面上。

5、$digest现在至少运行每个监听器一次了。如果第一次运行完,有监控值发生变更了,标记为dirty,所有监听器再运行第二次。这会一直运行,直到所有监控的值都不再变化,整个局面稳定下来了。

6、关于$apply,大的想法是,我们可以执行一些与Angular无关的代码,这些代码也还是可以改变作用域上的东西,$apply可以保证作用域上的监听器可以检测这些变更。当人们谈论使用$apply集成代码到“Angular生命周期”的时候,他们指的就是这个事情,也没什么比这更重要的了。

7、但在Angular中还有一种延迟代码的方式,那就是Scope上的$evalAsync函数。$evalAsync接受一个函数,把它列入计划,在当前正持续的digest中或者下一次digest之前执行。举例来说,你可以在一个监听器的监听函数中延迟执行一些代码,即使它已经被延迟了,仍然会在现有的digest遍历中被执行。

时间: 2024-08-05 16:18:58

angularjs脏检查机制的相关文章

angularjs脏检查

angularjs实现了双向绑定,与vue的defineProperty不同,它的原理在于它的脏检查机制,以下做了一些总结: angular.js介绍 AngularJs是mvvm框架,它的组件是vm组件,scope是vm组件的数据集合 AngularJs通过directive来声明vm的行为,它实现为一个watcher,监听scope的属性的变化,把最新的属性更新UI AngularJs的双向绑定:如:一个是将$scope属性值绑定到HTML结构中,当$scope属性值发生变化的时候界面也发生

$apply方法(触发脏检查机制)

$swatch监听方法 <!DOCTYPE html> <html><head lang="en"> <meta charset="UTF-8"> <title></title> <script src="../angular-1.5.5/angular.min.js"></script> </head> <body ng-app=&

angular脏检查机制

机制: 是angular中双向数据绑定的原理,是通过一个原先的旧值和当前的新值作比较是否相等,如果相等则不会触发脏检查机制,如果不相等则会触发脏检查机制,$$watcher进行监听,触发新老值的替换. 在angular的程序中,一个以{{}}或者指令绑定的视图,就会在此绑定的视图上有一个$watch事件,将数据中最新的值呈现在界面上,所有的watch储存在$$warcher中,一次脏检查就是调用已从$spply()或者$digest(),遍历检查所有watch,将数据中最新值呈现在桌面上. $$

Session脏检查及清理缓存机制

今天看hibernate书,看到"理解Session的缓存"这一张脏检查及清理缓存的机制后,突然明白程序中session并非一定要执行update()方法.没有执行update()方法,对象仍会与数据库进行数据交互. Session脏检查及清理缓存机制: Session缓存中对象的属性每次改变时,Session不会立即清理缓存及执行Update SQL,而是会在特定时间清理缓存(执行相应的sql),提交事务. 清理缓存时,会相应的改变对象的状态. Java对象在内存中有四个状态:临时状

脏检查 和 缓存清理机制

Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照.当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库. 缓存清理机制 当Session缓存中对象的属性每次发生了变化,Sessi

脏检查及刷新缓存机制

当事务提交时,Hibernate会对Session中持久状态的对象进行检测,判断对象的数据是否发生了改变,这种判断称为脏检查 Session session; Transaction tx; @After public void afterTest(){ tx.commit(); HibernateUtil.closeSession(); } @Before public void initDate(){ session=HibernateUtil.getSession(); tx = sess

8.29 脏检查笔记

个人理解图 脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照.当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库. 缓存清理机制 当Session缓存中对象的属性每次发

关于Hibernate脏检查与快照

脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会 为Customer对象的值类型的属性复制一份快照.当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来 判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语 句,从而同步更新数据库. 缓存清理机制 当Session缓存中对象的属性每次发生了变

Hibernate 中三种状态及脏检查

java对象的三种状态 持久态: Student stu=new Student() Session.save(stu); Session以及数据库都有 游离态: stu.setId(1); Session.close(); Session没有 数据库中有 瞬时态: Student stu=new Student() 体现:在Session中以及DB都没有 三种状态图: 使用new关键字构建对象,该对象的状态是瞬时状态. 1 瞬时状态转为持久状态 使用Session对象的save()或saveO