Launching Vectopus.com without WebP image support led to the need for retroactive conversion of 500,000+ SVG files to WebP for better performance and SEO.
The image ingestion pipeline involved SQS queues, lambda functions, S3 storage, and a Postgres database.
A CLI tool was developed for batch image conversion handling tasks like downloading, processing, watermarking, and uploading images.
Node.js, Python, and Go's concurrency models were compared for handling the image conversion task.
Node.js utilizes event-driven, non-blocking I/O model suitable for web servers but less efficient for CPU-bound tasks like image conversion.
Python's multiprocessing module offers parallel processing, bypassing GIL limitations, and leveraging multiple CPU cores.
Go's concurrency model with goroutines provides efficient parallelism, scalability, and minimal overhead, making it ideal for CPU-bound tasks.
Go's goroutines demonstrated faster processing times, handling 4,500 images in 27 seconds, showcasing its efficiency for large-scale batch processing.
By leveraging Go's concurrency model, the article concludes on the importance of selecting tools that meet performance needs and considering system design comprehensively.
The experience with image conversion reinforced the significance of evaluating tools and system design for optimal performance and scalability.
The source code for the CLI tool discussed in the article is available on GitHub for reference.