延迟加载(Lazy Load)
- 一个对象,它虽然不包含所需要的所有数据,但是它知道怎么获取这些数据

- 设计专门的对象来把数据从DB中加载到内存中.
- 该对象可以完成在加载所需对象的同时,把与之相关的对象也一并加载了.
- 否则,必须显示加载所有所需的对象.
- 但是,加载一个对象可能会引起大量相关对象的加载.
- 当真正需要的对象只有几个时,会损害系统的性能.
- 延迟加载会暂时中止该关联加载过程.以使需要的数据在用到时才被加载.
- 运行机制
- 延迟初始化 Lazy initialization
- 思想.每次访问属性Field时,先检查是否为空..
- 必须保证field是自封闭的.也就是所有对该field的访问(即使来自类内部),都要通过get方法实现.
- 使用null来标记还未加载的field.
- 但是,当null时field的合法值时,需要其他符号来标记.
- 优点是简单.
- 但是会在对象和DB之间增加了依赖关系.适合于活动记录,表数据入口,行数据入口.
class Supplier
{
public list Products(){
get{
if(products==null)
products = Product.findForSupplier());
return products;
}
}
}
- 虚代理 Virtual Proxy
- 拥有实际类的外观.
- 实际上不包含任何东西.只有当其方法被调用时,才从DB加载适当的对象.
- 是对真实类的简单包装.
- 会引起标识问题.
- 同一个实对象拥有多个虚代理.它们会有不同的特征,但是又代表同一概念上的对象.应覆盖Equals方法来进行相等测试.
- 有时,必须创建大量的虚代理.
- 只对集合类用虚代理.因为集合的标识无关紧要.

- 好处,Domain类对Mapper如何进行延迟加载一无所知,甚至不知道延迟加载的存在.
- 拥有实际类的外观.
- 值保持器 Value Holder
- 针对领域类.
- 用来包装其他对象的对象.要获取基对象,可以访问它得到.但是只有第一次访问它时,它才真正从DB读取Data.
- 缺点.类需要知道他的存在.而且丧失数据类型的显式性.

- 重影 Ghost
- 部分状态下的真实对象.
- 从DB加载对象时,它只包含ID.之后访问某个Field时,它会加载完全的状态.
- 虚代理或者重影不必完全没有数据.
- 对于某些需要快速获取或者常用到的数据.在加载代理或者重影时加载这些数据是有意义的("轻量对象").
- 继承会给延迟加载代理问题.
- 波动加载
- 产生了超出需要的DB访问.
- 例如,如果使用延迟加载填充一个集合,然后每次只访问其中的一个元素.会使每读取一个对象时访问一次DB.
- 解决是对类集合本身做延迟加载,而在加载类集合时,一次加载所有内容.
- 面向方面编程
- 可以将延迟加载置于一个单独的方面,以能够独立地改变延迟加载策略.
- 不同的用例和不同的延迟加载策略配合.为了获取最大效率,需要为特定的用例加载恰当的对象子图.
- 理论上需要一系列延迟程度不同的延迟加载对象.太复杂.
- 但是,通常只有两个:完全加载,用于识别用途的加载.
- 使用时机
- 完全取决于加载一个对象时,需要从DB读取多少Data和DB调用的次数.
- 只有当Field需要另外的DB访问时才考虑使用.
- 延迟初始化 Lazy initialization
延迟加载(Lazy Load)的更多相关文章
- Hibernate延迟加载Lazy
Hibernate延迟加载Lazy 延迟加载(lazy load)又称为懒加载,延迟加载的机制是为了避免一些无谓性能的开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作 如 ...
- Lazy Load, 延迟加载图片的 jQuery 插件.
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...
- jQuery延迟加载插件(Lazy Load)详解
最 新版本的Lazy Load并不能替代你的网页.即便你使用JavaScript移除了图片的src属性,有些现代的浏览器仍然会加载图片.现在你必须修改你的html代 码,使用占位图片作为img标签的s ...
- 延迟加载图片的 jQuery 插件:Lazy Load
网站的速度非常重要,现在有很多网站优化的工具,如 Google 的Page Speed,Yahoo 的 YSlow,对于网页图片,Yahoo 还提供 Smush.it这个工具对图片进行批量压缩,但是对 ...
- Lazy Load 图片延迟加载(转)
jQuery Lazy Load 图片延迟加载来源 基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. ...
- jQuery Lazy Load 图片延迟加载
基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. 版本: jQuery v1.4.4+ jQuery ...
- Lazy Load, 延迟加载图片的 jQuery 插件 - NeoEase
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- Ionic 3 延迟加载(Lazy Load)实战(一)
本文分享并演示了在 Ionic 3 框架中如何进行模块的延迟加载(Lazy Load)开发. 在我的实战课程「快速上手Ionic3 多平台开发企业级问答社区」中,因为开发的仿知乎 App 模块间的加载 ...
- about hibernate lazy load and solution
about hibernate lazy load is that used when loaded again.it can increase efficienty and sava memory. ...
- 提示29. 怎样避免延迟加载或Load()阅读器问题
提示29. 怎样避免延迟加载或Load()阅读器问题 如果你有如下这样的代码: 1 var results = from c in ctx.Customers 2 where c.SalesPerso ...
随机推荐
- Redis_字典
阅读本文之前要了解的两件事情,第一,Redis是一种Key-Value数据库,第二,字典是一种保存键值对的抽象数据结构.所以不难猜出字典在Redis中应用一定很广泛,实际上,Redis数据库的底层实现 ...
- Android输入输出系统之TouchEvent流程
一个是InputReader,一个是InputDispatcher.方法是dispatchTouch. 入口点是InputReader 的loopOnce方法. InputReader里面有个线程叫做 ...
- 安装linux系统并配置那点事
安装完成后,将看到如下控制台: 输入以上安装信息中所填写的用户名(user),随后输入密码(user),即可登录 Ubuntu. 随时可使用 Ctrl + Alt 快捷键可离开虚拟机. 3 配置 Ub ...
- [AngularJS] Best Practise - Controller
ControllerAs: Use thecontrollerAs syntax always as it aids in nested scoping and controller instance ...
- plupload上传插件在SpringMVC中的整合
前言:近期在给学院的站点做一个加入附件的功能,首先到了某某邮箱看了一下.简单有用.可是是flash做的,无法拷贝.就仅仅好上网找插件了.经过筛选.最终找到plupload这款插件(其实有的编辑器自带加 ...
- cocos2d-html5 笔记5: 事件
在cocos2d里面,通过Node的方式,将整个场景以及里面的object给组织起来,这样很容易画了,从root node开始遍历,把整棵树画出来就是了. 剩下就是animation,timer, 还 ...
- THD 变量存入threads中
http://blog.csdn.net/gapaul/article/details/12047497 http://ourmysql.com/archives/930
- Spark SQL - DataFrame
1 Overview Spark SQL is a Spark module for structured data processing. It provides a programming abs ...
- RHEL 7 命令行注册和激活订阅服务
导读 前一阵子,红帽推出了开发者免费使用订阅功能,只要注册成为红帽开发者就可以免费使用包括 RHEL7 在内的开发套件. 今天我们就来看一看怎么使用命令行来快速注册和激活订阅服务,以后就可以方便地 ...
- 用 Gearman 分发 PHP 应用程序的工作负载
尽管一个 Web 应用程序的大部分内容都与表示有关,但它的价值与竞争优势却可能体现在若干专有服务或算法方面.如果这类处理过于复杂或拖沓,最好是进行异步执行,以免 Web 服务器对传入的请求没有响应.实 ...