共享对象与共享资源的一些心得

遵循老大的教导,善于总结。

 

这次分享的一个经验是:“共享对象与共享资源”。

 

大概会围绕这个主题分几点讲:

1 是共享对象,共享资源的普遍场景。

2 相关的实现技巧,方法与模式。

 

+共享对象,共享资源的普遍场景

 

打个比方,我们要解析一个文档,文档中有元素如下 Ea  Eb Ea Ef Eb Ex, 共5个元素。

那么可能我们会 写一个 class E, 然后分别创建5个对象,给予其赋相应值。

但其实5个对象中,存在重复的对象, 那么想到共享这部分资源|对象, 从而避免这部分资源重复开销。

 

以上就是共享对象,及共享资源的一个简单的场景描述。

这类场景最突出的表现在:文档解析。 包括xml解析,html解析,乱七八糟的脚本解析。

一个复杂的html页面,解析出来的结点是非常多的,如果每个结点都是独立对象,带来的开销是恐怖的,特别是在服务器端的表现更是如此,瓶颈直接体现在重复的结点==重复开销==内存拷贝。如果能最大程度的让内存拷贝逼近于0,那么理论上解析耗时是与文档长度成线性关系的(无需多余的内存拷贝工作)。

 

+相关的实现技巧,方法与模式

 

技巧1:枚举

在做html解析的时候,可以对业务需求的标签类型做枚举,类型就是一个值(可以是1个字节,具体看自己业务需求),开销是最小的了。

 

技巧2:标记

做文档解析的时候,解析出来的结点,通常还对应一段文本或字节,简称一堆东东。

那么通常会将其copy到这个结点。重复用到这个结点的,当然不会再拷贝一次,但是这样还是不够极致。

极致的做法是,不copy这堆东东,其实你只需要标记好这个结点记住对应的这堆东东的坐标就ok了。


ps, 讨论:这样的做法更倾向于对结点的读操作远大于写操作,才会体现出高效,原因很简单,这种标记的方法,如果要只支持写,就是做另劈空间,然后标识该节点被写脏了,应拿标记坐标去“另辟的空间”去拿数据。...这里做法多种多样

 

方法与模式:flyweight 和 工厂..这里就不说了,搜一下大把。

以上技巧经过实践,有显著成果,但是有其适用场景,仅供参考,哈哈 ^_^

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值