« 上一篇下一篇 »

网站构架与设计的方法之延迟加载

延迟加载(Lazy Load)表示直到需要时候才去加载所需要的资源。例如,在一个订单管理系统中,每个Customer都有自己的订单,当获取Customer的时候,我们可能并不希望同时也去获取他的订单,只有在需要的时候,才会回去获取。在这种情况下若采用延迟加载订单的方 式,系统能够迅速地将Customer的信息返回,并且也减轻了数据库的负担。

实现延迟加载的方式有四种:延迟初始化、虚代理、值保持和重影。

下面通过虚代理来讲述有关延迟加载的知识。虚代理看起来应该是我们需要的对象,但是 实际上它不包含任何东西,只有在调用它的方法时,它才会去加载恰当的对象。

虚代理是采用设计模式中的代理模式实现的。

在软件系统中,有些对象有时候由于跨越网络或其他的障碍,而不能够或不想直接访问另一个对象,因为如果直接访问会给系统带来不必要的复杂性,这时候就可以在客户程序和目标对象之间增加一层中间层,让代理对象代替目标对象来打点一切,这就是Proxy (代理)模式。

*远程(Remote)代理:为一个位于不同地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可以是在另一台机器中。远程代理又叫做大使(Ambas-sador) 。此代理的好处是系统可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在。客户完全可以认为被代理的对象是局域的而不是远程的,而且代理对象承担了大部分的网络通信工作,同时客户可能没有意识到启动了一个耗费时间的远程调用。

*虚(Virtual)代理:根据需要创建一个资源消耗较大的对象,也就是说此对象只有在需要的时候才会被真正创建出来。使用虚代理模式的好处就是代理对象可以在必要的时候才加载被代理的对象,而且代理可以对加载的过程加以必要的优化。当一个模块的加载十分耗费资源时,虚代理的好处就非常明显了。

*Copy-on-Write代理:虚代理的一种。把复制(克隆)拖延到只有在客户端需要时才真正采取行动。

*保护访问(Protected Access)代理:控制对一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。保护代理的好处是它可以在运行时对用户的有关权限进行检查,并在核实后决定是否将调用传递给被代理的对象。

*Cache代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。

*防火墙(Firewall)代理:保护目标,不让恶意用户接近。

*同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。

*智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。

« 上一篇下一篇 »