Skip to content

Commit

Permalink
Avoid cloning option objects in more places (#109)
Browse files Browse the repository at this point in the history
Small optimization.

Category: fix
  • Loading branch information
vweevers authored Dec 31, 2024
1 parent fdb7864 commit efd4175
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions abstract-level.js
Original file line number Diff line number Diff line change
Expand Up @@ -328,8 +328,10 @@ class AbstractLevel extends EventEmitter {
const keyFormat = keyEncoding.format
const valueFormat = valueEncoding.format

// Forward encoding options to the underlying store
if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {
// Forward encoding options. Avoid cloning if possible.
if (options === this.#defaultOptions.entry) {
options = this.#defaultOptions.entryFormat
} else if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {
options = { ...options, keyEncoding: keyFormat, valueEncoding: valueFormat }
}

Expand Down Expand Up @@ -385,8 +387,10 @@ class AbstractLevel extends EventEmitter {
const keyFormat = keyEncoding.format
const valueFormat = valueEncoding.format

// Forward encoding options
if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {
// Forward encoding options. Avoid cloning if possible.
if (options === this.#defaultOptions.entry) {
options = this.#defaultOptions.entryFormat
} else if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {
options = { ...options, keyEncoding: keyFormat, valueEncoding: valueFormat }
}

Expand Down Expand Up @@ -449,9 +453,8 @@ class AbstractLevel extends EventEmitter {
const keyEncoding = this.keyEncoding(options.keyEncoding)
const keyFormat = keyEncoding.format

// Forward encoding options to the underlying store
// Forward encoding options. Avoid cloning if possible.
if (options === this.#defaultOptions.key) {
// Avoid cloning for default options
options = this.#defaultOptions.keyFormat
} else if (options.keyEncoding !== keyFormat) {
options = { ...options, keyEncoding: keyFormat }
Expand All @@ -478,7 +481,7 @@ class AbstractLevel extends EventEmitter {
}

async hasMany (keys, options) {
options = getOptions(options, this.#defaultOptions.entry)
options = getOptions(options, this.#defaultOptions.key)

if (this.#status === 'opening') {
return this.deferAsync(() => this.hasMany(keys, options))
Expand All @@ -498,9 +501,8 @@ class AbstractLevel extends EventEmitter {
const keyEncoding = this.keyEncoding(options.keyEncoding)
const keyFormat = keyEncoding.format

// Forward encoding options to the underlying store
// Forward encoding options. Avoid cloning if possible.
if (options === this.#defaultOptions.key) {
// Avoid cloning for default options
options = this.#defaultOptions.keyFormat
} else if (options.keyEncoding !== keyFormat) {
options = { ...options, keyEncoding: keyFormat }
Expand Down Expand Up @@ -560,8 +562,7 @@ class AbstractLevel extends EventEmitter {
const enableWriteEvent = this.#eventMonitor.write
const original = options

// Avoid cloning for default options
// TODO: also apply this tweak to get() and getMany()
// Forward encoding options. Avoid cloning if possible.
if (options === this.#defaultOptions.entry) {
options = this.#defaultOptions.entryFormat
} else if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {
Expand Down Expand Up @@ -618,7 +619,7 @@ class AbstractLevel extends EventEmitter {
const enableWriteEvent = this.#eventMonitor.write
const original = options

// Avoid cloning for default options
// Forward encoding options. Avoid cloning if possible.
if (options === this.#defaultOptions.key) {
options = this.#defaultOptions.keyFormat
} else if (options.keyEncoding !== keyFormat) {
Expand Down

0 comments on commit efd4175

Please sign in to comment.