JavaScript享元模式

享元(flyweight----蝇量级)模式是一种用于性能优化的模式。享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就很有用了。在JavaScript中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一件非常有意义的事。

享元模式要求将对象的属性划分为内部状态与外部状态(在这里状态是指属性)。享元模式的目标是尽量减少共享对象的数量。如何划分内部状态和外部状态,可以参考一下经验:
            1.内部状态存储于对象内部
            2.内部状态可以被一些对象共享
            3.内部状态独立于具体的场景,通常不会改变
            4.外部状态取决于具体的场景,并根据场景而变化,外部状态不能被共享

使用享元模式的关键就是区别内部状态和外部状态。

使用了享元模式后,会因为要维护一些多出来的对象,造成额外的开销。但它又有它的好处。享元模式带来的好处很大程度上取决于如何使用及何时使用,一般来说,一下情况发生时便可以使用享元模式:
            1.一个程序中使用了大量的相似对象
            2.由于使用了大量对象,造成很大的内存开销
            3.对象的大多数状态都可以变为外部状态
            4.剥离出对象的外部状态后,可以用相对较少的共享对象取代大量对象

时间: 2024-08-28 16:16:07

JavaScript享元模式的相关文章

《JavaScript设计模式与开发实践》读书笔记之享元模式

1. 享元模式 享元模式是一种用于性能优化的模式,享元模式的核心是运用共享技术来有效支持大量细粒度的对象 1.1 传统的文件上传方法 以文件上传为例,文件上传功能可以选择依照队列,一个一个的排队上传,也支持同时选择2000个文件.假如每一个文件都对应着一个JavaScript上传对象的创建,2000个文件就会同时创建2000个upload对象假设这里的文件上传支持插件和flash两种 var id=0; window.startUpload=function(uploadType,files){

深入理解JavaScript系列(37):设计模式之享元模式

介绍 享元模式(Flyweight),运行共享技术有效地支持大量细粒度的对象,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生产大量细粒度的类实例来表示数据,如果能发现这些实例除了几个参数以外,开销基本相同的 话,就可以大幅度较少需要实例化的类的数量.如果能把那些参数移动到类实例的外面,在方法调用的时候将他们传递进来,就可以通过共享大幅度第减少单个实例 的数目. 那么如果在JavaScript中应用享元模式

JavaScript设计模式与开发实践 享元模式

享元(flyweight)模式是一种用于性能优化的模式,"fly"在这里是苍蝇的意思,意为蝇量级.享元模式的核心是运用共享技术来有效支持大量细粒度的对象. 如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了.在JavaScript 中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一件非常有意义的事情. 一.内部状态与外部状态 享元模式要求将对象的属性划分为内部状态与外部状态(状态在这里通常指属性).享元模式的目标是尽量减少共享对象的数量,关于

[设计模式] javascript 之 享元模式;

享元模式说明 定义:用于解决一个系统大量细粒度对象的共享问题: 关健词:分离跟共享: 说明: 享元模式分单纯(共享)享元模式,以及组合(不共享)享元模式,有共享跟不共享之分:单纯享元模式,只包含共享的状态,可共享状态是不可变,不可修改的,这是享元的内部状态:当然有外部状态就有外部状态,外部状态是可变的,不被共享,这个外部状态由客户端来管理,是可变化的:外部状态与内部状态是独立分开的,外部状态一般作为参数传入享元对象内,但不会影响内部状态的值:外部状态,一用用于获取共享的享元对象,或多或少与内部状

javascript设计模式——享元模式

前面的话 享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级.享元模式的核心是运用共享技术来有效支持大量细粒度的对象.如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了.在javascript中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一件非常有意义的事情.本文将详细介绍享元模式 享元模式初识 假设有个内衣工厂,目前的产品有50种男式内衣和50种女士内衣,为了推销产品,工厂决定生产一些塑料模特来穿上他们

JavaScript设计模式总结-享元模式

享元(flyweight)模式的主要作用:性能优化 当系统创建过多相似的对象而导致内存占用过高,可以采用这种设计模式进行优化. 享元模式将对象的属性区分为内部状态与外部状态 内部状态在创建的时候赋值,外部状态在实际需要用到的时候进行动态赋值 对于内部状态和外部状态的区分,有2点: 1.内部状态存储于对象内部 2.内部状态可以被一些对象共享 3.内部状态独立于具体场景,通常不会改变 4.外部状态取决于具体场景,并根据场景变化,外部状态不能被共享. 举例 1.男女模特试衣服 若为每个模特对象Mode

javascript设计模式-享元模式

享元模式采用一个共享来有效的支持大量细小粒度的对象,避免大量有相同内容的类的开销(如内存耗费),共享一个元类. 应用场景:页面存在大量的资源密集型对象:他们具备一些共性,可以分离出公共操作的数据. 一个例子,汽车登记: var Car = function(make,model,year,owner,tag,renewDate){ this.make=make; this.model=model; this.year=year; this.owner=owner; this.tag=tag; t

javascript设计模式学习之十一——享元模式

一.享元模式的定义及使用场景 享元模式是一种用于性能优化的模式,如果系统中因为创建了大量类似对象而导致内存占用过高,享元模式就非常有用了.享元模式的核心是运用共享技术来有效支持大量细粒度的对象. 享元模式的关键是区分内部状态和外部状态,剥离了外部状态的对象成为共享对象,外部状态在必要时被传入共享对象来组装成一个完整的对象.那些可以被对象共享的属性通常就被划分为内部状态.

JS常用的设计模式(16)—— 享元模式

享元模式主要用来减少程序所需的对象个数. 有一个例子, 我们这边的前端同学几乎人手一本<JavaScript权威指南>. 从省钱的角度讲, 大约三本就够了. 放在部门的书柜里, 谁需要看的时候就去拿, 看完了还回去. 如果同时有4个同学需要看, 此时再去多买一本. 在webqq里面, 打开QQ好友列表往下拉的时候,会为每个好友创建一个div( 如果算上div中的子节点, 还远不只1个元素 ). 如果有1000个QQ好友, 意味着如果从头拉到尾, 会创建1000个div, 这时候有些浏览器也许已