Skip to content

Bun сделал Image API устаревшими

Новый встроенный Image API в Bun не просто быстрее Sharp — он не имеет никаких нативных зависимостей. Эта единственная функция демонстрирует огромное стремление стать универсальным Rails для JavaScript.

Stork.AI
Hero image for: Bun сделал Image API устаревшими
💡

Кратко / Главное

Новый встроенный Image API в Bun не просто быстрее Sharp — он не имеет никаких нативных зависимостей. Эта единственная функция демонстрирует огромное стремление стать универсальным Rails для JavaScript.

Прощай, `libvips`: Бесзависимое решение от Bun

Обработка изображений на стороне сервера долгое время была источником разочарования для разработчиков JavaScript, главным образом из-за таких библиотек, как Sharp. Несмотря на огромную популярность, более 55 миллионов еженедельных загрузок на NPM и использование для оптимизации изображений в Next.js, ахиллесовой пятой Sharp является его зависимость от нативного бинарного файла `libvips`. Эта внешняя зависимость часто приводит к досадным сбоям установки в сборках Docker и конвейерах CI/CD, поскольку разработчики борются с бинарными файлами, специфичными для платформы.

Bun теперь полностью устраняет эту проблему с помощью Bun.Image, встроенного API для обработки изображений, представленного в Bun 1.3.14. Являясь неотъемлемой частью среды выполнения, Bun.Image не имеет нативных зависимостей, что означает, что он «просто работает» из коробки. Этот революционный подход позволяет избежать целого класса проблем сборки и развертывания, значительно упрощая рабочие процессы разработки для таких задач, как изменение размера, обрезка и преобразование изображений между форматами, такими как JPEG, PNG и WebP.

Что особенно важно, Bun.Image работает с неблокирующей архитектурой. Все операции с изображениями выполняются вне основного потока, гарантируя, что ресурсоемкая обработка никогда не будет замедлять производительность сервера или блокировать входящие запросы. Такая конструкция гарантирует, что ваше приложение останется отзывчивым даже при больших нагрузках на манипуляции с изображениями.

Производительность, которая превосходит конкурентов

Bun.Image не просто упрощает рабочие процессы с изображениями; он превосходит существующие эталоны производительности. По сравнению с Sharp, широко используемой библиотекой, Bun выполняет чтение метаданных в поразительные 70 раз быстрее. Операции изменения размера также показывают значительный прирост, завершаясь примерно на 30% быстрее. Это преимущество в скорости означает более быструю загрузку страниц и снижение нагрузки на сервер для любого приложения.

Помимо чистой скорости, Bun.Image предлагает надежный и удобный для разработчиков API. Его цепочечный API позволяет выполнять элегантные многошаговые преобразования, такие как изменение размера, обрезка и поворот, за один плавный вызов. Он без труда конвертирует изображения в современные форматы, такие как WebP, повышая производительность веб-сайтов, и нативно поддерживает множество других форматов, включая JPEG, PNG, GIF и BMP, а также HEIC, AVIF и TIFF на macOS и Windows. Что особенно важно, вся обработка выполняется вне основного потока, обеспечивая неблокирующие операции сервера.

Выдающейся особенностью является умная функция `placeholder()`, которая генерирует сверхлегкий, 28-байтовый ThumbHash. Этот хеш кодируется в размытое изображение base64, служащее немедленным визуальным сигналом, пока загружается изображение в полном разрешении. Встраивание этого крошечного заполнителя непосредственно в HTML или CSS устраняет дополнительные сетевые запросы, значительно улучшая воспринимаемую производительность на медленных соединениях без нагрузки на сервер или клиент дополнительными запросами.

Дело не в изображениях. Дело во всём.

Bun.Image — это не изолированная функция; это стратегическая часть гораздо более крупной головоломки. Недавние обновления показывают целенаправленный путь Bun к вертикально интегрированной среде выполнения JavaScript, выходящей далеко за рамки простого менеджера пакетов или сборщика. Bun теперь предлагает встроенный SQLite, унифицированные клиенты баз данных для S3, Postgres, MySQL, MariaDB и даже клиент Redis. Это не раздувание функций; это методичное усилие по консолидации и владению большей частью основной инфраструктуры экосистемы JavaScript.

Этот целостный подход подпитывает тезис «Rails for JavaScript». Bun тщательно собирает инструментарий с встроенными функциями, стремясь значительно сократить ад зависимостей и обеспечить бесшовный опыт полностековой разработки, начиная со среды выполнения. Интегрируя общую инфраструктуру, Bun устраняет сложности управления разрозненными пакетами и их часто хрупкими нативными зависимостями, что является распространенной проблемой для разработчиков, привыкших к фрагментированному ландшафту Node.js.

Если эта тенденция сохранится, амбиции Bun вскоре могут охватить решения для аутентификации, почтовых служб и других основных функций приложений непосредственно внутри среды выполнения. Эта траектория позволяет Bun еще больше ослабить зависимость от Node.js и его обширной экосистемы пакетов, предлагая по-настоящему универсальную платформу. В то время как проверенные временем внешние решения, такие как Sharp - High Performance Node.js Image Processing, остаются критически важными для многих, Bun создает убедительную, самодостаточную альтернативу.

Стоит ли переходить? Слон Rust в комнате

Для разработчиков, уже использующих Bun, внедрение Bun.Image является однозначным и очевидным решением. Оно обеспечивает в 70 раз более быстрое чтение метаданных и примерно на 30% более быстрые операции изменения размера, при этом устраняя раздражающие нативные зависимости `libvips`. Пользователи Node.js, однако, обнаружат, что Sharp остается надежным, проверенным временем решением с более чем 55 миллионами еженедельных загрузок с NPM; миграция всего стека приложений и среды выполнения исключительно ради обработки изображений представляет собой значительное и сложное решение.

Эта новейшая функция появляется на фоне спорной, продолжающейся переписки Bun с Zig на Rust, решение, вызвавшее смешанную реакцию сообщества на таких платформах, как Twitter (теперь X). Переход, как сообщается, использующий инструменты ИИ, вносит неопределенность в отношении стабильности и будущей траектории развития проекта, несмотря на его приобретение Anthropic и обязательства оставаться открытым исходным кодом.

В конечном итоге, Bun.Image выходит за рамки простой утилиты; это последнее, яркое заявление о намерениях от Jarred Sumner и команды Bun. Вслед за встроенными SQLite, клиентами S3/Postgres, клиентом Redis и возможностями полностековой разработки, этот нативный процессор изображений завершает еще один фрагмент смелой головоломки Bun: создание новой, универсальной основы для современного веба, интегрированного «Rails for JavaScript» на уровне среды выполнения.

Часто задаваемые вопросы

Что такое Bun.Image?

Bun.Image — это встроенный API для обработки изображений в среде выполнения Bun. Он позволяет изменять размер, обрезать, конвертировать и оптимизировать изображения без каких-либо нативных зависимостей, в отличие от таких библиотек, как Sharp.

Чем Bun.Image быстрее библиотеки Sharp?

Бенчмарки показывают, что чтение метаданных Bun.Image до 70 раз быстрее, а операции изменения размера примерно на 30% быстрее, чем у Sharp, в основном благодаря его нативной интеграции со средой выполнения Bun и реализации на C++.

Поддерживает ли Bun.Image современные форматы, такие как AVIF и WebP?

Да, Bun.Image поддерживает нативное преобразование изображений в современные форматы, такие как WebP, и обратно. Он также поддерживает AVIF, HEIC и TIFF на macOS и Windows через нативные для ОС бэкенды.

Является ли Bun.Image достаточной причиной для перехода с Node.js?

Для существующих пользователей Bun это убедительное, нативное решение. Для пользователей Node.js, хотя оно и мощное, переключение всей среды выполнения только ради обработки изображений может быть нецелесообразным, поскольку Sharp остается надежной, проверенной временем библиотекой.

One weekly email of tools worth shipping. No drip funnel.

one email per week · unsubscribe in two clicks · no third-party tracking

Часто задаваемые вопросы

Что такое Bun.Image?
Bun.Image — это встроенный API для обработки изображений в среде выполнения Bun. Он позволяет изменять размер, обрезать, конвертировать и оптимизировать изображения без каких-либо нативных зависимостей, в отличие от таких библиотек, как Sharp.
Чем Bun.Image быстрее библиотеки Sharp?
Бенчмарки показывают, что чтение метаданных Bun.Image до 70 раз быстрее, а операции изменения размера примерно на 30% быстрее, чем у Sharp, в основном благодаря его нативной интеграции со средой выполнения Bun и реализации на C++.
Поддерживает ли Bun.Image современные форматы, такие как AVIF и WebP?
Да, Bun.Image поддерживает нативное преобразование изображений в современные форматы, такие как WebP, и обратно. Он также поддерживает AVIF, HEIC и TIFF на macOS и Windows через нативные для ОС бэкенды.
Является ли Bun.Image достаточной причиной для перехода с Node.js?
Для существующих пользователей Bun это убедительное, нативное решение. Для пользователей Node.js, хотя оно и мощное, переключение всей среды выполнения только ради обработки изображений может быть нецелесообразным, поскольку Sharp остается надежной, проверенной временем библиотекой.
🚀Узнать больше

Будьте в курсе трендов ИИ

Откройте лучшие инструменты ИИ, агенты и MCP-серверы от Stork.AI.

P.S. Сделали что-то полезное? Опубликуйте на Stork — $49

Все статьи