Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modificar los parametros de compresion de brotli #146

Open
Mrgaton opened this issue Jul 30, 2024 · 7 comments
Open

Modificar los parametros de compresion de brotli #146

Mrgaton opened this issue Jul 30, 2024 · 7 comments
Assignees

Comments

@Mrgaton
Copy link
Member

Mrgaton commented Jul 30, 2024

Estaría bien poder detectar el tipo de documento que se sube para poder especificar en brotli que use 'BROTLI_MODE_TEXT' para mejorar el ratio de compresión, también estaría bien poder incrementar un poco el tamaño del diccionario para tener mejor ratio en documentos grandes.

const options = {
  params: {
    [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT, // 0 = generic, 1 = text, 2 = font (WOFF2)
    [zlib.constants.BROTLI_PARAM_QUALITY]: 11,
    [zlib.constants.BROTLI_PARAM_LGWIN]: 25 // window size of 32 mb
  }
};
@Mrgaton
Copy link
Member Author

Mrgaton commented Jul 30, 2024

No sé si consumiría mucho ir byte por byte en el documento para afirmar si es texto y no otro tipo de binario pero sí no se podría usar el content type sino.

@inetol
Copy link
Contributor

inetol commented Jul 31, 2024

No sabía que la implementación de Brotli en Bun permitiese configurar su compresor, pero sí es así creo que será posible mejorar el uso de CPU en ficheros grandes.

@inetol inetol linked a pull request Aug 1, 2024 that will close this issue
@inetol inetol linked a pull request Aug 26, 2024 that will close this issue
7 tasks
This was unlinked from pull requests Oct 17, 2024
@Mrgaton
Copy link
Member Author

Mrgaton commented Oct 19, 2024

Si cambiamos a zstd esto ya no tiene utilidad,

@inetol
Copy link
Contributor

inetol commented Oct 19, 2024

Pero hasta que no ocurra de momento se queda

@inetol
Copy link
Contributor

inetol commented Nov 4, 2024

Subir el nivel de compresión no sale a cuenta porque te ahorras muy poco casi triplicando el tiempo de compresión, bajándolo si se puede obtener una mejora significativa en el tiempo sin afectar en exceso el tamaño final. (aunque ahora en este caso sea más conveniente usar DEFLATE, hice las pruebas entre ambos de nuevo, pero este último no parece comprimir los binarios adecuadamente)

Modificando otros parámetros (BROTLI_PARAM_MODE) no vi que hiciese nada en strings, ni con datos binarios, por lo que quizás no está implementado (?)

@inetol inetol self-assigned this Nov 4, 2024
@Mrgaton
Copy link
Member Author

Mrgaton commented Nov 5, 2024

Bajar el nivel de compresión no lo veo a cuenta, ya que la mayoría de archivos que se van a subir serán de pocos kb por no decir pocos bytes y no pasa nada que tarde 100 milisegundos más si a la larga eso ahora más espacio en el disco, que raro que el BROTLI_PARAM_MODE no haga ninguna diferencia probaste si pasa lo mismo en node que en bun?

@inetol
Copy link
Contributor

inetol commented Nov 5, 2024

Al ser los ficheros de Kb quizás algún Mb subir el ratio conlleva un mayor tiempo de CPU, haciendo que la concurrencia sea pobre al estar la mayor parte del proceso de guardado comprimiendo. El almacenamiento es barato a diferencia del procesamiento y por 4kb ahorrados en un documento de 50kb sumándole 60ms extras no lo veo viable, zstd es más eficiente comprimiendo y descomprimiendo manteniendo el ratio a un menor tiempo de CPU (aunque si no está expuesto en Bun o se vincula al binario del sistema entonces ya no hay tanto margen de mejora), pero si fuese un problema sería buscar otras formas de almacenar eficientemente documentos.

Lo de los parámetros de brotli con Node.js no lo probé, pero sí está documentado allí debería de funcionar.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants