es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una forma de limitar el número máximo de procesos paralelos que cargan fragmentos en dropzone.js?

Necesitamos poder admitir cargas grandes en nuestro sitio. Es por eso que hemos implementado la carga por fragmentos con Dropzone.js.

Funciona muy bien, pero cuando uso un archivo muy grande, puedo ver en la vista de depuración de red de Chrome que todas las solicitudes se inician inmediatamente en un estado de espera y el navegador no puede mantener el ritmo. Después de un tiempo, hay demasiadas solicitudes abiertas y Chrome comienza a devolver “net::ERRINSUFFICIENTRESOURCES” para algunas de las solicitudes en espera.

Estas son las opciones relevantes de nuestra configuración de Dropzone:

[...]
parallelUploads: 1, // solo se carga un archivo a la vez
maxFilesize: 8148, // tamaño máximo de archivo individual 8 GB
chunking: true, // habilitar carga por fragmentos
forceChunking: true, // forzar carga por fragmentos cuando file.size < chunkSize
parallelChunkUploads: true, // permite cargar fragmentos en paralelo
chunkSize: 210241024, // tamaño de fragmento 2MB
retryChunks: true, // reintentar fragmentos en caso de error
retryChunksLimit: 3
[...]

Aquí hay uno de los cientos de errores de insuficientes_recursos del panel de Chrome al cargar archivos grandes:

dropzone.js:9622 POST http://localhost:44802/AuthenticatedFolder/65fc862e-4cb1-41b0-a39c-f6a41ea5e64d/DoChunkedUpload/A8BB25EA676977DC6F064AEEE636E388FCF5E513 net::ERR_INSUFFICIENT_RESOURCES
submitRequest @ dropzone.js:9622
_uploadData @ dropzone.js:9406
handleNextChunk @ dropzone.js:9218
(anonymous) @ dropzone.js:9248
(anonymous) @ dropzone.js:9423
transformFile @ dropzone.js:7545
_loop @ dropzone.js:9419
_transformFiles @ dropzone.js:9429
uploadFiles @ dropzone.js:9171
processFiles @ dropzone.js:9078
processFile @ dropzone.js:9051
processQueue @ dropzone.js:9042
(anonymous) @ dropzone.js:8743
setTimeout (async)
enqueueFile @ dropzone.js:8742
(anonymous) @ dropzone.js:8705
accept @ dropzone.js:7407
accept @ dropzone.js:8669
addFile @ dropzone.js:8695
(anonymous) @ dropzone.js:8571
_addFilesFromItems @ dropzone.js:8595
drop @ dropzone.js:8510
drop @ dropzone.js:8225

Estoy usando la última versión 5 de dropzone (5.9.3).

¿Hay alguna forma de limitar el número de solicitudes en paralelo en ejecución? Si no es así, sería una gran adición a las opciones.
Como solución alternativa, he desactivado parallelChunkUploads. Funciona, pero por supuesto también ralentiza la carga.

¡Gracias por cualquier ayuda!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para Cargas Grandes con Dropzone.js

    Problema

    El usuario está enfrentando un problema con la implementación de carga por partes con Dropzone.js. El problema es que cuando se carga un archivo muy grande, todas las solicitudes se inician en un estado de espera y el navegador no es capaz de mantener el ritmo. Después de un tiempo, hay demasiadas solicitudes abiertas y Chrome comienza a devolver “net::ERR_INSUFFICIENT_RESOURCES” para algunas de las solicitudes en espera.

    Solución

    El usuario puede limitar el número de solicitudes en ejecución paralela estableciendo un valor para parallelUploads en las opciones de configuración de Dropzone. Esto limitará la cantidad de archivos que se pueden cargar al mismo tiempo.

    Por ejemplo, el usuario puede establecer parallelUploads en 2 para limitar la cantidad de archivos que se pueden cargar a 2 al mismo tiempo. También pueden probar diferentes valores para encontrar el que mejor funcione para su caso de uso.

    [...]
      parallelUploads: 2, // limitar el número de cargas paralelas a 2
      maxFilesize: 8148, // tamaño máximo de archivo individual 8 GB
      chunking: true, // habilitar uso de partes
      forceChunking: true, // forzar uso de partes cuando file.size < chunkSize
      parallelChunkUploads: true, // permite cargar partes en paralelo
      chunkSize: 2 * 1024 * 1024, // tamaño de parte 2MB
      retryChunks: true, // reintentar partes en caso de fallo
      retryChunksLimit: 3
    [...]
    

    Alternativamente, el usuario también puede intentar desactivar parallelChunkUploads como solución alternativa. Esto puede ralentizar la carga, pero garantizará que el navegador pueda mantenerse al día con las solicitudes.

    [...]
      parallelUploads: 1, // solo se carga un archivo a la vez
      maxFilesize: 8148, // tamaño máximo de archivo individual 8 GB
      chunking: true, // habilitar uso de partes
      forceChunking: true, // forzar uso de partes cuando file.size < chunkSize
      parallelChunkUploads: false, // deshabilitar cargas en paralelo de partes
      chunkSize: 2 * 1024 * 1024, // tamaño de parte 2MB
      retryChunks: true, // reintentar partes en caso de fallo
      retryChunksLimit: 3
    [...]
    

    Por último, el usuario también puede intentar aumentar la opción maxConcurrentChunks. Esta opción determina cuántas partes se pueden cargar simultáneamente. El valor predeterminado es 2, pero el usuario puede aumentar este valor para ver si ayuda con su problema.

    [...]
      parallelUploads: 1, // solo se carga un archivo a la vez
      maxFilesize: 8148, // tamaño máximo de archivo individual 8 GB
      chunking: true, // habilitar uso de partes
      forceChunking: true, // forzar uso de partes cuando file.size < chunkSize
      parallelChunkUploads: true, // permite cargar partes en paralelo
      chunkSize: 2 * 1024 * 1024, // tamaño de parte 2MB
      retryChunks: true, // reintentar partes en caso de fallo
      retryChunksLimit: 3,
      maxConcurrentChunks: 4 // aumentar el número de partes simultáneas a 4
    [...]
    

    Con estas opciones en mente, el usuario puede experimentar y encontrar la mejor combinación de opciones que funcionen para su caso de uso.

Comments are closed.