Bilibili wbi sign test - Mixin params (v2)

Revision 2 of this benchmark created on


Description

See also: https://socialsisteryi.github.io/bilibili-API-collect/docs/misc/sign/wbi.html

Setup

const mixinQuery = {
	a: '12345',
	b: '23456',
	c: '34567',
	d: '45678',
	wts: 1234567890
}
const sortedParams = Object.keys(mixinQuery).sort()
const charRegex = /[!'\(\)*]/g

Test runner

Ready to run.

Testing in
TestOps/sec
Official
const mixinParams = []
for (var i = 0; i < sortedParams.length; i++) {
	var key = sortedParams[i]
	var value = mixinQuery[key]

	if (value && typeof value === 'string') {
		value = value.replace(charRegex, '')
	}

	if (value != null) {
	mixinParams.push("".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value)))
  }
}
ready
Unofficial 1
const mixinParams = []
sortedParams.forEach(element => {
	const key = element
	let value = mixinQuery[key]

	if (value && typeof value === 'string') {
		value = value.replace(charRegex, '')
	}

	if (value !== null) {
		mixinParams.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
	}
})
ready
Unofficial 2
const mixinParams = sortedParams
	.map(key => {
		let value = mixinQuery[key]
		if (value && typeof value === 'string') {
			value = value.replace(charRegex, '')
		}
		return value !== null ? `${encodeURIComponent(key)}=${encodeURIComponent(value)}` : null
	})
	.filter(value => {
		return value !== null
	})
ready
Unofficial 3
const mixinParams = sortedParams
	.map(key => {
		const value = mixinQuery[key]
		if (value && typeof value === 'string') {
			return `${encodeURIComponent(key)}=${encodeURIComponent(value.replace(charRegex, ''))}`
		}
		return value !== undefined ? `${encodeURIComponent(key)}=${encodeURIComponent(value)}` : value
	})
	.filter(value => {
		return value !== undefined
	})
ready
Unofficial 4
const mixinParams = sortedParams.map(key => {
	const value = mixinQuery[key]
	if (typeof value === 'string') {
		return `${encodeURIComponent(key)}=${encodeURIComponent(value.replace(charRegex, ''))}`
	}
	return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
})
ready
Unofficial 5
const mixinParams = sortedParams.map((key) => {
	const value = mixinQuery[key].toString().replace(charRegex, "")
	return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
})
ready
Unofficial 6
const mixinParams = sortedParams.map(key => {
	const value = mixinQuery[key]
	if (typeof value === 'string') {
		return `${encodeURIComponent(key)}=${encodeURIComponent(value.replace(charRegex, ''))}`
	}
	return `${key}=${value}` // return `${key as 'wts'}=${value as number}`
})
ready
Unofficial 7
const mixinParams = sortedParams.map(key => {
	const value = mixinQuery[key]
	if (typeof value === 'string') {
		return `${encodeURIComponent(key)}=${encodeURIComponent(value.replaceAll(charRegex, ''))}`
	}
	return `${key}=${value}` // return `${key as 'wts'}=${value as number}`
})
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.