Browse Source

perf(deleteAction): Queue delete requests

When multiple files are deleted at once, all the requests bombard the server
simultaneously, causing performance issues.

This commit adds queuing that limits the concurrency of these requests to 5
at a time.

Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
tags/v28.0.6rc1
fenn-cs 1 month ago
parent
commit
c6a0f23bb5
3 changed files with 19 additions and 4 deletions
  1. 16
    1
      apps/files/src/actions/deleteAction.ts
  2. 2
    2
      dist/files-init.js
  3. 1
    1
      dist/files-init.js.map

+ 16
- 1
apps/files/src/actions/deleteAction.ts View File

@@ -29,6 +29,7 @@ import NetworkOffSvg from '@mdi/svg/svg/network-off.svg?raw'
import TrashCanSvg from '@mdi/svg/svg/trash-can.svg?raw'

import logger from '../logger.js'
import PQueue from 'p-queue'

const canUnshareOnly = (nodes: Node[]) => {
return nodes.every(node => node.attributes['is-mount-root'] === true
@@ -58,6 +59,8 @@ const isAllFolders = (nodes: Node[]) => {
return !nodes.some(node => node.type !== FileType.Folder)
}

const queue = new PQueue({ concurrency: 1 })

export const action = new FileAction({
id: 'delete',
displayName(nodes: Node[], view: View) {
@@ -152,7 +155,19 @@ export const action = new FileAction({
}
},
async execBatch(nodes: Node[], view: View, dir: string) {
return Promise.all(nodes.map(node => this.exec(node, view, dir)))
// Map each node to a promise that resolves with the result of exec(node)
const promises = nodes.map(node => {
// Create a promise that resolves with the result of exec(node)
const promise = new Promise<boolean>(resolve => {
queue.add(async () => {
const result = await this.exec(node, view, dir)
resolve(result !== null ? result : false)
})
})
return promise
})

return Promise.all(promises)
},

order: 100,

+ 2
- 2
dist/files-init.js
File diff suppressed because it is too large
View File


+ 1
- 1
dist/files-init.js.map
File diff suppressed because it is too large
View File


Loading…
Cancel
Save