在我的这篇旧文里曾经发布了一个简单的ajax操作类。我们发现,在旧文里创建xmlhttp对象的时候,每次都要new一个对象。而我们都知道new一个对象的开销是很大的。如果我们在客户端频繁使用ajax技术,那么我们就不得不多次创建xmlhttp对象。当然,如您所知,我们可以改进创建的方式,比如使用全局变量来缓存一个实例(客户端的单例模式?!),对于同步方式的通信,这是很有效的,但是这样的方式对于异步通信会出现问题,因为没有了进程的堵塞,用户可能在上一次通信未完成时再次调用同一个xmlhttp实例,这样不等前一个调用的回调函数触发,前一次调用就被“覆盖”掉了(也就代表前一次调用失败)。建立一个保持xmlhttp实例的池,好处显而易见,最明显的优点就是我们不会创建冗余对象,同时也不会出现在同一个正在被调用的xmlhttp实例上出现再次被操作的情况。

具体实现思路:
我们使用一个数组来存储已创建的xmlhttp对象实例,然后每次调用从池中去取一个实例。xmlhttp实例通讯完毕后我们不用做任何处置,因为它自身的readyState属性可以标识出它是否可用,如果当时没有空闲的xmlhttp实例,且池中的实例数小于最大实例个数,那么就创建一个新的实例并放入池中。重新改进的实现代码如下:

代码

最后再ps:上周周末和一个哥们聊天的时候谈到ajax应用中的xmlhttp对象。那哥们ms很“虔诚”地问我说xmlhttp怎么就异步通信了。我当时竟然毫不思索地说因为这个对象处理我们的请求调用是“异步”的(当然可以设置成同步的,不过这是一句废话),当前这个请求不会影响其他的操作。这个回答是很“官方”的,显然没有说到问题的本质。哥们,您的眼神儿有必要那么bs人么?现在稍作分析,个人认为其实每个xmlhttp异步请求都会触发一个回调函数,这个回调函数的调用不影响其他的操作,这个方法才是“异步”。如果对比c#里的异步处理回调方法,它们在原理上其实是相通的。 哈哈,现在终于想通了, 真是太骄傲,太有出息了,想到就兴奋!

本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/14/1648145.html,如需转载请自行联系原作者

简单构建一个xmlhttp对象池合理创建和使用xmlhttp对象相关推荐

  1. 5.Unity2D 横版 对象池的创建

    总目录 注意右边enemy的激活与非激活状态 对象池的好处是不用频繁的毁坏和创建重复预制体,而是通过激活与非激活来对重复预制体进行管理.增加了游戏的流畅性. 1.建立enemy预制体+刚体2D+碰撞盒 ...

  2. 对象池common-pool2源码分析之对象状态

    2019独角兽企业重金招聘Python工程师标准>>> 对象池common-pool2源码分析 对象池common-pool2策略分析 从前两篇的分析中可以看出对象池中的对象会被激活 ...

  3. java创建5个类的对象_java 面像对象中, 定义一个学生类,可以创建五个学生对象,自动产生...

    展开全部 import java.util.Random; public class StudentTest { private int number;//学生学号 private String na ...

  4. 设计一个LOL的英雄类,创建两个英雄对象,一个叫盖伦,一个叫提莫

    面向对象基础 LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等 这样我们就可以设计一种东西,叫做类,代表英 ...

  5. java timetasker_Java网络与多线程系列之1:实现一个简单的对象池

    前言 为什么要从对象池开始呢,先从一个网络IO操作的demo说起 比如下面这段代码,显而易见已经在代码中使用了一个固定大小的线程池,所以现在的重点在实现Runnble接口的匿名对象上,这个对象每次创建 ...

  6. 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现

    本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的时候,不小心用我的肉眼抓到了一个隐藏很深很深的内存泄露 Bug. 于是笔者将这个故事-哦不 -事 ...

  7. 9.Unity2D 横版 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.动画animation和动画 ...

  8. Unity对象池简单应用

    1.简单介绍 在Unity开发过程中,对象池是一种很好的能用于减少内存开销的方式.在许多场景中,比如角色射击出去的子弹,以及在游戏运行过程中频繁生成的敌人-如果在运行时实时在场景中Instance和D ...

  9. 池式结构:对象池(Object Pool)

    本文是对 http://gameprogrammingpatterns.com/object-pool.html 的原创翻译.部分地方使用意译,不准确的地方请各位指证. 一.对象池的意义 通过重新使用 ...

  10. Unity中的资源管理-对象池技术(3)

    本文分享Unity中的资源管理-对象池技术(3) 在上两篇文章中, 我们一起学习了普通类的两种对象池实现, 今天接着介绍Unity中GameObject(主要是预制实例化对象)的对象池. GameOb ...

最新文章

  1. SAP的SD模块中客户的销售视图--扩充客户销售范围
  2. windows模糊查询指定进程是否存在
  3. 大唐电信JAVA笔试题面试题
  4. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_1
  5. android studio编辑不了,无法在Android Studio中编辑文件
  6. VTK:PolyData之SurfacePointPlacer
  7. 使用python读取txt坐标文件生成挖空矿山_探矿批量
  8. 中国台湾地区几乎所有院校的硕博论文库(部分可下全文)分享该日志 举报...
  9. java8 nio_Java8之 NIO的学习
  10. 10个有用的网站访问分析工具
  11. python flask是什么_python flask是什么
  12. 达芬奇剪辑调色专用键盘DaVinci Resolve Speed Editor
  13. java多重if 嵌套if_流程控制之if、多重if、嵌套
  14. 工程制图与AUTOCAD【1】
  15. U3D游戏开发效率和UE4相比哪个高?
  16. 微信小程序 申请第三方平台流程
  17. 创造与魔法java语言_创造与魔法 | 最新魔法使用大全
  18. Tomcat解决中文乱码
  19. 2020 China Collegiate Programming Contest Weihai Site H.Message Bomb
  20. php案例:json新增数据

热门文章

  1. 看书看困了,写几句提提精神
  2. [导入]关于“啸聚一庐--txna”
  3. 剑指offer(数值的整数次方)
  4. 遥感数字图像处理 初体验
  5. ArcGIS学习总结(11)——创建点要素并计算对应经纬度
  6. FVC与地表温度的相关性分析研究
  7. 教务管理系统C++全部代码
  8. Python读取Access数据库基本操作
  9. retrievefile文件字节为0_linux环境下下 FTPClient.retrieveFile() 下载稍大一点的文件就卡死了-问答-阿里云开发者社区-阿里云...
  10. Flutter实战之FlutterPlugin插件入门指南