Optimize opaque refs detection.
This commit is contained in:
parent
b45a169a2f
commit
716d7bfcf6
@ -140,11 +140,16 @@ const {
|
|||||||
create: createObject,
|
create: createObject,
|
||||||
defineProperties,
|
defineProperties,
|
||||||
defineProperty,
|
defineProperty,
|
||||||
freeze: freezeObject
|
freeze: freezeObject,
|
||||||
|
prototype: { toString }
|
||||||
} = Object
|
} = Object
|
||||||
|
|
||||||
const noop = () => {}
|
const noop = () => {}
|
||||||
|
|
||||||
|
const isString = (tag =>
|
||||||
|
value => toString.call(value) === tag
|
||||||
|
)(toString.call(''))
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
let getNotConnectedPromise = function () {
|
let getNotConnectedPromise = function () {
|
||||||
@ -160,7 +165,8 @@ let getNotConnectedPromise = function () {
|
|||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
const OPAQUE_REF_RE = /^OpaqueRef:/
|
const OPAQUE_REF_PREFIX = /^OpaqueRef:/
|
||||||
|
const isOpaqueRef = value => isString(value) && startsWith(value, OPAQUE_REF_PREFIX)
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
@ -473,7 +479,7 @@ export class Xapi extends EventEmitter {
|
|||||||
// Minor memory optimization, use the same empty array for
|
// Minor memory optimization, use the same empty array for
|
||||||
// everyone.
|
// everyone.
|
||||||
object[key] = EMPTY_ARRAY
|
object[key] = EMPTY_ARRAY
|
||||||
} else if (OPAQUE_REF_RE.test(value)) {
|
} else if (isOpaqueRef(value)) {
|
||||||
// This is an array of refs.
|
// This is an array of refs.
|
||||||
defineProperty(object, '$' + key, {
|
defineProperty(object, '$' + key, {
|
||||||
get: () => freezeObject(map(value, (ref) => objectsByRefs[ref]))
|
get: () => freezeObject(map(value, (ref) => objectsByRefs[ref]))
|
||||||
@ -485,7 +491,7 @@ export class Xapi extends EventEmitter {
|
|||||||
forEach(value, resolveObject)
|
forEach(value, resolveObject)
|
||||||
|
|
||||||
freezeObject(value)
|
freezeObject(value)
|
||||||
} else if (OPAQUE_REF_RE.test(value)) {
|
} else if (isOpaqueRef(value)) {
|
||||||
defineProperty(object, '$' + key, {
|
defineProperty(object, '$' + key, {
|
||||||
get: () => objectsByRefs[value]
|
get: () => objectsByRefs[value]
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user