• 一个对象,它虽然不包含所需要的所有数据,但是它知道怎么获取这些数据

    • 设计专门的对象来把数据从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 Load)的更多相关文章

  1. Hibernate延迟加载Lazy

    Hibernate延迟加载Lazy 延迟加载(lazy load)又称为懒加载,延迟加载的机制是为了避免一些无谓性能的开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作 如 ...

  2. Lazy Load, 延迟加载图片的 jQuery 插件.

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  3. jQuery延迟加载插件(Lazy Load)详解

    最 新版本的Lazy Load并不能替代你的网页.即便你使用JavaScript移除了图片的src属性,有些现代的浏览器仍然会加载图片.现在你必须修改你的html代 码,使用占位图片作为img标签的s ...

  4. 延迟加载图片的 jQuery 插件:Lazy Load

    网站的速度非常重要,现在有很多网站优化的工具,如 Google 的Page Speed,Yahoo 的 YSlow,对于网页图片,Yahoo 还提供 Smush.it这个工具对图片进行批量压缩,但是对 ...

  5. Lazy Load 图片延迟加载(转)

    jQuery Lazy Load 图片延迟加载来源 基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. ...

  6. jQuery Lazy Load 图片延迟加载

    基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. 版本: jQuery v1.4.4+ jQuery ...

  7. Lazy Load, 延迟加载图片的 jQuery 插件 - NeoEase

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  8. Ionic 3 延迟加载(Lazy Load)实战(一)

    本文分享并演示了在 Ionic 3 框架中如何进行模块的延迟加载(Lazy Load)开发. 在我的实战课程「快速上手Ionic3 多平台开发企业级问答社区」中,因为开发的仿知乎 App 模块间的加载 ...

  9. about hibernate lazy load and solution

    about hibernate lazy load is that used when loaded again.it can increase efficienty and sava memory. ...

  10. 提示29. 怎样避免延迟加载或Load()阅读器问题

    提示29. 怎样避免延迟加载或Load()阅读器问题 如果你有如下这样的代码: 1 var results = from c in ctx.Customers 2 where c.SalesPerso ...

随机推荐

  1. js 处理url中文参数 java端接收处理

    正常情况下当http请求中带有中文参数时,浏览器会自动对中文进行一次编码(按照当前页面的pageEncoding),java端容器会对接收到的参数自动进行一次转码,则request.getParame ...

  2. Linux 必掌握的 SQL 命令

    数据库和 SQL 在本系列教程中,目前我们使用平面文本文件来存储数据.平面文本文件可能适合相对较少的数据,但它们对存储大量数据或查询该数据没有多大帮助.多年来,为该目的开发了多种数据库,包括分层和网络 ...

  3. Tfs服务器迁移(更改IP)后客户端(vs2013)配置方法

    一.前言 公司开发项目需要进驻客户现场,局域网中的tfs代码服务器有时会有修改ip的情况发生.服务器ip修改后在vs2013中更改服务器ip地址非常麻烦,有些时候需要将代码重新进行映射.多次试验后将可 ...

  4. .Net Static 与单例

    Static 关键字作为修饰符可以用于类.方法和成员变量上.其含义是对于整个应用程序生命周期内,访问该修饰符修饰的对象/方法/变量都引用到同一实例(内存地址).但正因如此在多线程下会出现线程安全问题: ...

  5. URL请求过程

    一.URL(Uniform Resource Locator)统一资源定位符,是可以从互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址.互联网上的每一个文件都有一个唯一的UR ...

  6. n-1位数

    描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数.   输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 ...

  7. 通过layer的contents属性来实现uiimageview的淡入切换

    #import "ViewController.h" @interface ViewController () @property(nonatomic,strong)CALayer ...

  8. TFS 2010 使用手册(四)备份与恢复

    本文参考了http://developer.51cto.com/art/201010/229066.htm的文章. TFS的备份与恢复一直没有很完整的解决方案,要完成一个很好的备份要有很多的手动步骤才 ...

  9. Oracle基础(六) 数据类型

    一.Oracle中的数据类型 Oracle中提供了丰富的数据类型,用来存储数据,主要包括: 1.字符类型:主要用来存储字符串类型的数据. 数据类型 长度 说明 CHAR(n BYTE/CHAR) 默认 ...

  10. Shell学习笔记 - 分支语句

    一.单分支if语句 1. 语法格式 if [ 条件判断式 ]; then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 注意:中括号和条件判断式之间必须有空格 2. 示例1:判断登 ...