javascript 对象池

* 一个对象池的简单应用 tool tip

tootip.html

<html>
<head>
	<meta charset="UTF-8">
	<title>tool tip</title>
</head>
<body>
	<script type="text/javascript" src="js/toolTip.js"></script>
</body>
</html>

  

js/toolTip.js

var toolTipFactory = (function() {
    var toolTipPool = [];

    return {
        create: function() {
            if (toolTipPool.length === 0) {
                var div = document.createElement("div");
                document.body.appendChild(div);
                console.log("div created");
                return div;
            } else {
                return toolTipPool.shift();
            }
        },
        recover: function(toolTipDom) {
            return toolTipPool.push(toolTipDom);
        }
    }
})();

var a = [];
for (var i = 0, str; str = [‘A‘, ‘B‘][i]; i++) {
    var toolTip = toolTipFactory.create();
    toolTip.innerHTML = str;
    a.push(toolTip);
}
// 回收进对象池
a.forEach(function(toolTip) {
    toolTipFactory.recover(toolTip);
});

// 再创建6个小气泡
setTimeout(function() {
    [‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘].forEach(function(str) {
        var toolTip = toolTipFactory.create();
        toolTip.innerHTML = str;
    });
}, 500);

  

Run:

php -S 0.0.0.0:9000

  

A, B没有重复创建

* 通用对象池的实现

iframe.html

<html>
<head>
	<meta charset="UTF-8">
	<title>通用对象池 创建iframe测试</title>
</head>
<body>
	<script src="./js/iframe.js"></script>
</body>
</html>

  

js/iframe.js

var objectPoolFactory = function(createObjFn) {
	var objectPool = [];

	return {
		create: function() {
			var obj = objectPool.length === 0 ?
				createObjFn.apply(this, arguments) : objectPool.shift();
			return obj;
		},
		recover: function(obj) {
			objectPool.push(obj);
		}
	}
};

// test
var iframeFactory = objectPoolFactory(function() {
	var iframe = document.createElement(‘iframe‘);
	document.body.appendChild(iframe);

	iframe.onload = function() {
		iframe.onload = null;   // 防止iframe重复加载
		iframeFactory.recover(iframe); // iframe加载完了回收节点
	}
	return iframe;
});

var iframe1 = iframeFactory.create();
iframe1.src = ‘https://www.baidu.com‘;

var iframe2 = iframeFactory.create();
iframe2.src = ‘http://www.qq.com/‘;

setTimeout(function() {
	var iframe3 = iframeFactory.create();
	iframe3.src = ‘http://www.163.com‘;
}, 750);

  

Run:

原文地址:https://www.cnblogs.com/mingzhanghui/p/9397246.html

时间: 2024-11-10 16:15:18

javascript 对象池的相关文章

JavaScript 对象

JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例

javascript对象简介

javascript对象可分为三大类: 1.javascript本地对象和内置对象 2.浏览器对象(BOM) 3.文档对象(DOM) 一:javascript内置对象 1.Array(数组对象) 2.Number(数字对象) 3.String(字符串对象) 4.Boolean(布尔对象) 5.Math(数学对象) 6.RegExp(正则对象) 7.Date(日期时间对象) 二:浏览器对象(BOM) 1.Window对象: 2.Screen对象:可以获取屏幕的信息 3.Navigator:可以获取

整数对象池

Python 的内建对象存放在源代码的Objects目录下.intobject.c用于整数对象 在 Python 中,整数分为小整数对象和大整数对象 小整数对象 由于数值较小的整数对象在内存中会很频繁地使用,如果每次都向内存申请空间.请求释放,会严重影响 Python 的性能.好在 整数对象 属于不可变对象,可以被共享而不会被修改导致问题,所以为 小整数对象 划定一个范围,即小整数对象池,在Python运行时初始化并创建范围内的所有整数,这个范围内的 整数对象是被共享的,即一次创建,多次共享引用

对象池实现分析

对象池实现分析 什么是对象池技术?对象池应用在哪些地方? 对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象,类似线程池的概念.对象池缓存了一些已经创建好的对象,避免需要时才创建对象,同时限制了实例的个数.池化技术最终要的就是重复的使用池内已经创建的对象.从上面的内容就可以看出对象池适用于以下几个场景: 创建对象的开销大 会创建大量的实例 限制一些资源的使用 如果创建一个对象的开销特别大,那么提前创建一些可以使用的并且缓存起来(池化技术就是重复使用对象,提前创建并缓存起来重复使用就是池化

JavaScript对象--------------你又知道那些

今天我和大家带来的是JavaScript对象的一些属性和函数(方法),通过这些了解,我们又能做出那些页面效果呢,下面就来进行今天的主题. 1.完整的JavaScript是由ECMAScript.BOM(浏览器对象模型)和DOM(文档对象模型)构成的.示意图如下: 而window对象是整个BOM的核心,Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY,FRAMESET或FRAME元素时,都会自动建立window对象的实例.

屏幕坐标和世界坐标的转换+对象池技术(3D打地鼠小游戏)

游戏中可能经常会遇到需要某个物体跟着鼠标移动,然后又需要把物体放在某个鼠标指定的位置 实现方式 Camera.main.WorldToScreenPoint Camera.main.ScreenToWorldPoint 3D打地鼠实例 我这里用到的素材都比较简陋,几乎全是用Unity做的 首先是锤子 就是两个Cylinder,在把手的位置放一个空物体用于模拟锤子的动作,命名为Hammer,把锤子作为Hammer的子物体,给Hammer添加Animation动画: 在三个关键帧位置设置Hammer

javascript对象的一点理解

<script type="text/javascript"> /* js对象:对象的职责是调用属性和调用方法 */ //1.对象的创建的三种方式 var obj = {}; //常用且不会浪费空间 var obj = new Object(); //var obj = Object.create(); /* 第三种方式测试的时候有问题,百度下,发现 Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象. 参数: prototype 必需. 要用作

JavaScript对象之关联数组

Tip: 内容摘抄自<JavaScript权威指南>,看过该书的同学可以忽略本文. 存取一个对象的属性的方式: obj.attr; obj["attr"]; 两者最重要的区别就是前者的属性名是标示符,后者的属性名是一个字符串. 用"."运算符来存取一个对象的属性时,属性名是标示符,JavaScript程序中,标示符必须被逐字输入,它们不是一种数据类型,因此程序不能对他们进行操作. 用数组的概念"[]"来存取一个对象的属性时,属性名是用

15条规则解析JavaScript对象布局(__proto__、prototype、constructor)

大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人当时是怎么做的?设计完之后又变成了什么? 我们来看一张图: 相信大家对这张图都不陌生了,构造函数有一个prototype属性指向其原型.相反原型也有一个constructor指向构造函数.与此同时实例也有一个constructor指向构造函数,这简直就是互相捆绑生怕找不到啊不是吗? 还有一个我们称之