Implement custom throttle function for performance
This commit is contained in:
Generated
+8
-4
@@ -6,7 +6,10 @@
|
|||||||
"": {
|
"": {
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
]
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"@types/throttle-debounce": "^5.0.2"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@ampproject/remapping": {
|
"node_modules/@ampproject/remapping": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
@@ -402,6 +405,8 @@
|
|||||||
},
|
},
|
||||||
"node_modules/@types/throttle-debounce": {
|
"node_modules/@types/throttle-debounce": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz",
|
||||||
|
"integrity": "sha512-pDzSNulqooSKvSNcksnV72nk8p7gRqN8As71Sp28nov1IgmPKWbOEIwAWvBME5pPTtaXJAvG3O4oc76HlQ4kqQ==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
@@ -3640,6 +3645,7 @@
|
|||||||
"version": "0.0.32",
|
"version": "0.0.32",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@types/throttle-debounce": "^5.0.2",
|
||||||
"@welshman/dvm": "~0.0.10",
|
"@welshman/dvm": "~0.0.10",
|
||||||
"@welshman/feeds": "~0.0.26",
|
"@welshman/feeds": "~0.0.26",
|
||||||
"@welshman/lib": "~0.0.28",
|
"@welshman/lib": "~0.0.28",
|
||||||
@@ -3710,9 +3716,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@scure/base": "^1.1.6",
|
"@scure/base": "^1.1.6",
|
||||||
"@types/events": "^3.0.3",
|
"@types/events": "^3.0.3",
|
||||||
"@types/throttle-debounce": "^5.0.2",
|
"events": "^3.3.0"
|
||||||
"events": "^3.3.0",
|
|
||||||
"throttle-debounce": "^5.0.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"gts": "^5.0.1",
|
"gts": "^5.0.1",
|
||||||
|
|||||||
@@ -6,5 +6,8 @@
|
|||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/coracle-social/skiff.git"
|
"url": "https://github.com/coracle-social/skiff.git"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@types/throttle-debounce": "^5.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,9 +31,10 @@
|
|||||||
"typescript": "~5.1.6"
|
"typescript": "~5.1.6"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@welshman/lib": "~0.0.28",
|
"@types/throttle-debounce": "^5.0.2",
|
||||||
"@welshman/feeds": "~0.0.26",
|
|
||||||
"@welshman/dvm": "~0.0.10",
|
"@welshman/dvm": "~0.0.10",
|
||||||
|
"@welshman/feeds": "~0.0.26",
|
||||||
|
"@welshman/lib": "~0.0.28",
|
||||||
"@welshman/net": "~0.0.40",
|
"@welshman/net": "~0.0.40",
|
||||||
"@welshman/signer": "~0.0.16",
|
"@welshman/signer": "~0.0.16",
|
||||||
"@welshman/store": "~0.0.12",
|
"@welshman/store": "~0.0.12",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {throttle} from 'throttle-debounce'
|
import {throttle} from '@welshman/lib'
|
||||||
import {Repository, Relay} from "@welshman/util"
|
import {Repository, Relay} from "@welshman/util"
|
||||||
import type {TrustedEvent} from "@welshman/util"
|
import type {TrustedEvent} from "@welshman/util"
|
||||||
import {Tracker} from "@welshman/net"
|
import {Tracker} from "@welshman/net"
|
||||||
|
|||||||
@@ -14,22 +14,26 @@ export const setPlaintext = (e: TrustedEvent, content: string) =>
|
|||||||
|
|
||||||
export const ensurePlaintext = async (e: TrustedEvent) => {
|
export const ensurePlaintext = async (e: TrustedEvent) => {
|
||||||
if (e.content && !getPlaintext(e)) {
|
if (e.content && !getPlaintext(e)) {
|
||||||
const $signer = getSigner(getSession(e.pubkey))
|
const $session = getSession(e.pubkey)
|
||||||
|
|
||||||
if ($signer) {
|
if (!$session) return
|
||||||
let result
|
|
||||||
|
|
||||||
try {
|
const $signer = getSigner($session)
|
||||||
result = await decrypt($signer, e.pubkey, e.content)
|
|
||||||
} catch (e: any) {
|
if (!$signer) return
|
||||||
if (!String(e).match(/invalid base64/)) {
|
|
||||||
throw e
|
let result
|
||||||
}
|
|
||||||
|
try {
|
||||||
|
result = await decrypt($signer, e.pubkey, e.content)
|
||||||
|
} catch (e: any) {
|
||||||
|
if (!String(e).match(/invalid base64/)) {
|
||||||
|
throw e
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
setPlaintext(e, result)
|
setPlaintext(e, result)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import {openDB, deleteDB} from "idb"
|
import {openDB, deleteDB} from "idb"
|
||||||
import type {IDBPDatabase} from "idb"
|
import type {IDBPDatabase} from "idb"
|
||||||
import {throttle} from "throttle-debounce"
|
|
||||||
import {writable} from "svelte/store"
|
import {writable} from "svelte/store"
|
||||||
import type {Unsubscriber, Writable} from "svelte/store"
|
import type {Unsubscriber, Writable} from "svelte/store"
|
||||||
import {indexBy, fromPairs} from "@welshman/lib"
|
import {indexBy, throttle, fromPairs} from "@welshman/lib"
|
||||||
import type {TrustedEvent, Repository} from "@welshman/util"
|
import type {TrustedEvent, Repository} from "@welshman/util"
|
||||||
import type {Tracker} from "@welshman/net"
|
import type {Tracker} from "@welshman/net"
|
||||||
import {withGetter, adapter, throttled, custom} from "@welshman/store"
|
import {withGetter, adapter, throttled, custom} from "@welshman/store"
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import {throttle} from 'throttle-debounce'
|
import {inc, throttle} from '@welshman/lib'
|
||||||
import {inc} from '@welshman/lib'
|
|
||||||
import {custom} from '@welshman/store'
|
import {custom} from '@welshman/store'
|
||||||
import {repository} from './core'
|
import {repository} from './core'
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import {throttle} from 'throttle-debounce'
|
|
||||||
import {derived, writable} from 'svelte/store'
|
import {derived, writable} from 'svelte/store'
|
||||||
import {max, addToMapKey, inc, dec} from '@welshman/lib'
|
import {max, throttle, addToMapKey, inc, dec} from '@welshman/lib'
|
||||||
import {getListTags, getPubkeyTagValues} from '@welshman/util'
|
import {getListTags, getPubkeyTagValues} from '@welshman/util'
|
||||||
import {throttled, withGetter} from '@welshman/store'
|
import {throttled, withGetter} from '@welshman/store'
|
||||||
import {pubkey} from './session'
|
import {pubkey} from './session'
|
||||||
|
|||||||
@@ -32,9 +32,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/events": "^3.0.3",
|
"@types/events": "^3.0.3",
|
||||||
"@types/throttle-debounce": "^5.0.2",
|
|
||||||
"@scure/base": "^1.1.6",
|
"@scure/base": "^1.1.6",
|
||||||
"events": "^3.3.0",
|
"events": "^3.3.0"
|
||||||
"throttle-debounce": "^5.0.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import {throttle} from 'throttle-debounce'
|
|
||||||
import {bech32, utf8} from "@scure/base"
|
import {bech32, utf8} from "@scure/base"
|
||||||
|
|
||||||
// Dealing with nil
|
// Dealing with nil
|
||||||
@@ -298,7 +297,7 @@ export const choice = <T>(xs: T[]): T => xs[Math.floor(xs.length * Math.random()
|
|||||||
|
|
||||||
export const shuffle = <T>(xs: Iterable<T>): T[] => Array.from(xs).sort(() => Math.random() > 0.5 ? 1 : -1)
|
export const shuffle = <T>(xs: Iterable<T>): T[] => Array.from(xs).sort(() => Math.random() > 0.5 ? 1 : -1)
|
||||||
|
|
||||||
export const sample = <T>(n: number, xs: T[]) => shuffle(xs).slice(0, n)
|
export const samplo = <T>(n: number, xs: T[]) => shuffle(xs).slice(0, n)
|
||||||
|
|
||||||
export const isIterable = (x: any) => Symbol.iterator in Object(x)
|
export const isIterable = (x: any) => Symbol.iterator in Object(x)
|
||||||
|
|
||||||
@@ -459,6 +458,36 @@ export const memoize = <T>(f: (...args: any[]) => T) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const throttle = <F extends (...args: any[]) => any>(ms: number, f: F) => {
|
||||||
|
if (ms === 0) {
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
let args: Parameters<F>
|
||||||
|
let paused = false
|
||||||
|
let trailing = false
|
||||||
|
|
||||||
|
const unpause = () => {
|
||||||
|
if (trailing) {
|
||||||
|
f(...args)
|
||||||
|
trailing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
paused = false
|
||||||
|
}
|
||||||
|
|
||||||
|
return (...thisArgs: Parameters<F>) => {
|
||||||
|
if (!paused) {
|
||||||
|
f(...thisArgs)
|
||||||
|
paused = true
|
||||||
|
args = thisArgs
|
||||||
|
setTimeout(unpause, ms)
|
||||||
|
} else {
|
||||||
|
trailing = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const throttleWithValue = <T>(ms: number, f: () => T) => {
|
export const throttleWithValue = <T>(ms: number, f: () => T) => {
|
||||||
let value: T
|
let value: T
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import {throttle} from 'throttle-debounce'
|
import {Emitter, throttle, makePromise, defer, sleep, tryCatch, randomId, equals} from "@welshman/lib"
|
||||||
import {Emitter, makePromise, defer, sleep, tryCatch, randomId, equals} from "@welshman/lib"
|
|
||||||
import {createEvent, normalizeRelayUrl, TrustedEvent, StampedEvent, NOSTR_CONNECT} from "@welshman/util"
|
import {createEvent, normalizeRelayUrl, TrustedEvent, StampedEvent, NOSTR_CONNECT} from "@welshman/util"
|
||||||
import {subscribe, publish, Subscription, SubscriptionEvent} from "@welshman/net"
|
import {subscribe, publish, Subscription, SubscriptionEvent} from "@welshman/net"
|
||||||
import {ISigner, decrypt, hash, own} from '../util'
|
import {ISigner, decrypt, hash, own} from '../util'
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import {throttle} from "throttle-debounce"
|
|
||||||
import {derived, writable} from "svelte/store"
|
import {derived, writable} from "svelte/store"
|
||||||
import type {Readable, Writable, Subscriber, Unsubscriber} from "svelte/store"
|
import type {Readable, Writable, Subscriber, Unsubscriber} from "svelte/store"
|
||||||
import {identity, ensurePlural, getJson, setJson, batch, partition, first} from "@welshman/lib"
|
import {identity, throttle, ensurePlural, getJson, setJson, batch, partition, first} from "@welshman/lib"
|
||||||
import type {Maybe} from "@welshman/lib"
|
import type {Maybe} from "@welshman/lib"
|
||||||
import type {Repository} from "@welshman/util"
|
import type {Repository} from "@welshman/util"
|
||||||
import {matchFilters, getIdAndAddress, getIdFilters} from "@welshman/util"
|
import {matchFilters, getIdAndAddress, getIdFilters} from "@welshman/util"
|
||||||
|
|||||||
Reference in New Issue
Block a user