pool.js 944 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const __ = {
  2. poolDic: Symbol('poolDic')
  3. }
  4. /**
  5. * 简易的对象池实现
  6. * 用于对象的存贮和重复使用
  7. * 可以有效减少对象创建开销和避免频繁的垃圾回收
  8. * 提高游戏性能
  9. */
  10. export default class Pool {
  11. constructor() {
  12. this[__.poolDic] = {}
  13. }
  14. /**
  15. * 根据对象标识符
  16. * 获取对应的对象池
  17. */
  18. getPoolBySign(name) {
  19. return this[__.poolDic][name] || ( this[__.poolDic][name] = [] )
  20. }
  21. /**
  22. * 根据传入的对象标识符,查询对象池
  23. * 对象池为空创建新的类,否则从对象池中取
  24. */
  25. getItemByClass(name, className) {
  26. let pool = this.getPoolBySign(name)
  27. let result = ( pool.length
  28. ? pool.shift()
  29. : new className() )
  30. return result
  31. }
  32. /**
  33. * 将对象回收到对象池
  34. * 方便后续继续使用
  35. */
  36. recover(name, instance) {
  37. this.getPoolBySign(name).push(instance)
  38. }
  39. }