Bun.Image आपके पूरे इमेज पाइपलाइन को बेकार बना देता है

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00यह Bun Image है, जो Bun 1.3.14 के साथ आया एक इन-बिल्ट इमेज प्रोसेसिंग API है जो रिसाइज कर सकता है,
00:00:06क्रॉप कर सकता है, और जीरो नेटिव डिपेंडेंसी के साथ अलग-अलग फॉर्मेट्स में इमेज कन्वर्ट कर सकता है,
00:00:10और यह पूरा काम मेन थ्रेड से हटकर चलता है, जिसका मतलब है कि यह आपके सर्वर को ब्लॉक नहीं करेगा
00:00:14जब यह प्रोसेसिंग कर रहा होगा। लेकिन Bun तो पहले से ही एक रनटाइम, पैकेज मैनेजर, बंडलर, टेस्ट रनर है,
00:00:19और अब यह एक इमेज प्रोसेसर भी है? क्या यह सब कुछ बहुत ज्यादा है, या यह हमें कुछ
00:00:24बड़ा बता रहा है कि Bun किस दिशा में जा रहा है? सब्सक्राइब करें और आइए पता करते हैं।
00:00:30अगर आपने कभी सर्वर पर JavaScript के साथ इमेज प्रोसेस की है, तो शायद आपने Sharp नाम की एक लाइब्रेरी का
00:00:35इस्तेमाल किया होगा, जिसके npm पर हर हफ्ते 55 मिलियन से ज्यादा डाउनलोड्स हैं, और यह
00:00:41Next.js द्वारा भी इमेज ऑप्टिमाइज़ेशन के लिए हुड के नीचे इस्तेमाल किया जाता है। लेकिन Sharp एक नेटिव बाइनरी पर निर्भर है जिसे libvips कहते हैं,
00:00:47जिसका मतलब है कि हर इंस्टाल को आपके प्लेटफॉर्म के लिए सही बिल्ड खींचना पड़ता है। और अगर आपने कभी
00:00:51Docker बिल्ड या CI पाइपलाइन फेल होते देखी है, तो आप जानते हैं कि यह कितना निराशाजनक है। इसलिए Bun ने फैसला किया
00:00:57कि इमेज प्रोसेसिंग को सीधे रनटाइम में ही डाल दिया जाए, और यह वास्तव में Sharp से ज्यादा तेज है
00:01:02ज्यादातर बेंचमार्क में। मेटाडेटा रीड 70 गुना तेज है, और रिसाइजिंग लगभग 30% तेज है। अब बहुत से
00:01:08डेवलपर्स वाकई हैरान हैं कि Bun ने इसे क्यों जोड़ा, लेकिन मुझे समझ आ रहा है कि यह सब कहाँ जा रहा है,
00:01:13और मैं आपको बाद में इसके बारे में थोड़ा बताऊंगा। लेकिन अभी के लिए, आइए कुछ डेमो देखते हैं कि कैसे इस्तेमाल करें
00:01:17Bun इमेज API का। और हम इसे मेरे ब्लॉग पर आजमाएंगे, जो एक स्टैटिक Waku साइट है, जिसमें
00:01:22कुछ बहुत बड़ी इमेजेस हैं। शुरुआत करने के लिए, आइए एक सरल स्क्रिप्ट देखते हैं जो एक इमेज को ऑप्टिमाइज़ करती है,
00:01:27जो मेरे चेहरे वाली प्रोफाइल पिक्चर है, और यह इसके साइज को 99% कम करने में सक्षम है, जो पागलपन है।
00:01:33आइए देखें कैसे। पहले, हम इमेज लेते हैं, और ध्यान दें कि हम यहाँ Bun.image का उपयोग कर रहे हैं, लेकिन आप
00:01:37इमेज फंक्शन के साथ Bun file भी कर सकते हैं। फिर हम इमेज का साइज घटाने के लिए उसे रिसाइज करते हैं, उसे 800 पिक्सल की चौड़ाई देते हैं,
00:01:43और ऊँचाई अपने आप आस्पेक्ट रेशियो के आधार पर कैलकुलेट हो जाती है। लेकिन अगर आप चाहें,
00:01:47तो हम यहाँ वह भी जोड़ सकते हैं। फिर हम इसे कम क्वालिटी के साथ WebP का आउटपुट फॉर्मेट देते हैं। बेशक,
00:01:52दूसरे आउटपुट फॉर्मेट्स भी सपोर्टेड हैं, और फिर हम नई इमेज को एक फाइल में आउटपुट करते हैं,
00:01:56जो एक प्रॉमिस है, और इसलिए इसके लिए await कीवर्ड की आवश्यकता होती है। और आप देख सकते हैं कि यह कितना सरल है।
00:02:01वास्तव में, यहाँ का सारा कोड अनावश्यक है, तो हम इसे हटाकर कोड को और भी सरल बना सकते हैं।
00:02:06हम एक रिसाइज फिल्टर भी सेट कर सकते हैं, रीसैंपलिंग कर्नल को बदलकर, इमेज के साइज को और कम कर सकते हैं।
00:02:10हम इमेज को रोटेट या फ्लिप कर सकते हैं, और यह वास्तव में कूल है। हम चमक (ब्राइटनेस) या
00:02:15सैचुरेशन भी बदल सकते हैं, जिससे कुछ अजीब दिखने वाली इमेजेस बन सकती हैं। लेकिन कुछ बहुत चतुर है जो
00:02:19आप धीमे कनेक्शन के मामले में कर सकते हैं, जो कि प्लेसहोल्डर फंक्शन का उपयोग करना है ताकि
00:02:23मुख्य इमेज लोड होने के दौरान अपने आप एक धुंधली इमेज दिखाई दे। और ऐसा करने के लिए, मेरे पास यह फॉर लूप है जो
00:02:29हर उस फाइल से गुजर रहा है जिसमें ये एक्सटेंशन हैं उस डायरेक्टरी के अंदर जिसमें
00:02:34सारी ब्लॉग इमेजेस हैं। तो हर इमेज रिसाइज हो रही है, बिना क्रॉप हुए स्केल डाउन की जा रही है, और
00:02:39अपस्केल नहीं की जा रही है। फिर हम हर इमेज के लिए एक प्लेसहोल्डर बनाते हैं, जो थंब हैश बनाता है, जिसका अर्थ है
00:02:45कि यह किसी भी इमेज को 28-बाइट हैश में एनकोड करता है, जो धुंधली इमेज प्लेसहोल्डर के रूप में एकदम सही है।
00:02:49यह हैश एक प्लेसहोल्डर ऑब्जेक्ट में जोड़ा जा रहा है, और फिर इसे एक फाइल में लिखा गया है,
00:02:53जो इस तरह दिखता है। अब, कारण यह है कि प्लेसहोल्डर एक बेस64 इमेज है न कि एक
00:02:58अलग छोटी WebP इमेज, ताकि नेटवर्क को इसे लाने के लिए कोई रिक्वेस्ट न करनी पड़े।
00:03:02तो मैं क्या कर सकता हूँ कि सभी प्लेसहोल्डर्स को इम्पोर्ट करूँ और उन्हें CSS में बैकग्राउंड इमेज के रूप में जोड़ दूँ,
00:03:07मुख्य इमेज के लोड होने का इंतज़ार करते हुए, जो मेरे ब्लॉग की हर इमेज के लिए काम करेगा।
00:03:11लेकिन अगर आप इसे MDX फाइल में एक सिंगल इमेज के लिए करना चाहते हैं, तो आप बस बेस64 कोड को
00:03:16मैन्युअली जोड़ सकते हैं, जो बिल्कुल वैसे ही काम करता है। ध्यान दें, आप इसी तरह का व्यवहार पा सकते हैं
00:03:20JPEG इमेजेस का उपयोग करके, progressive को true सेट करके। बेशक, और भी बहुत सी चीजें हैं जो BUN इमेज
00:03:24सपोर्ट करता है जिन्हें मैंने अभी तक नहीं देखा है, जैसे S3 कम्पैटिबल बकेट से इमेजेस पाना,
00:03:28या बकेट में इमेजेस लिखना, इमेज पाइपलाइन को वैध रिस्पॉन्स बॉडी के रूप में उपयोग करना,
00:03:33और फॉलबैक फॉर्मेट कॉन्फ़िगर करना अगर कोई विशिष्ट OS किसी एक को सपोर्ट नहीं करता है।
00:03:37तो क्या यह इस्तेमाल करने लायक है? खैर, अगर आप पहले से ही BUN पर हैं, तो हाँ, यह तो सोचने वाली बात ही नहीं है।
00:03:41लेकिन अगर आप Node का उपयोग कर रहे हैं, तो Sharp बहुत अच्छा काम करता है और पूरी तरह आजमाया हुआ है,
00:03:45और सिर्फ इमेज प्रोसेसिंग के लिए पूरी तरह से अलग रनटाइम पर बदलने की कोई जरूरत नहीं है।
00:03:49याद है जब मैंने कहा था कि एक बड़ा कारण है कि BUN ने इसे जोड़ा? खैर, अगर आप देखें कि BUN क्या कर रहा है
00:03:54पिछले साल से, इन-बिल्ट SQLite, S3, Postgres, और अब इमेजेस, और यह मूल रूप से
00:03:59वह सब कुछ है जो आपको फुल-स्टैक ऐप के लिए चाहिए, सिवाय शायद ऑथ और ईमेल के। लेकिन यह मुझे सोचने पर मजबूर करता है,
00:04:04क्या BUN, JavaScript के लिए Laravel या Rails बनाने की कोशिश कर रहा है, लेकिन रनटाइम लेवल पर? अगर वे ऐसा कर रहे हैं,
00:04:11तो अगली चीज जिस पर वे काम करेंगे वह है ऑथ। और अगर ऐसा है, तो याद रखें, आपने इसे यहाँ सबसे पहले सुना।
00:04:15लेकिन दुर्भाग्य से, आजकल, आप Zig से Rust के बड़े रीराइट का जिक्र किए बिना BUN के बारे में बात नहीं कर सकते,
00:04:20जो, उम्मीद है, अगले वर्ज़न में आ जाएगा। चलो आशा करते हैं कि सब कुछ ठीक हो जाए।
00:04:25Zig की बात करें तो, अगर आप Vercel के लैंग्वेज जीरो के बारे में और जानना चाहते हैं जो Zig जैसा दिखता है,
00:04:29पर Zig नहीं है, और AI एजेंट्स के लिए बना है, तो जेम्स का यह वीडियो देखें।

Key Takeaway

Bun का नया इन-बिल्ट इमेज API सर्वर-साइड इमेज प्रोसेसिंग को Sharp से अधिक तेज बनाता है और इसे एक ऑल-इन-वन फुल-स्टैक रनटाइम के रूप में विकसित कर रहा है।

Highlights

  • Bun 1.3.14 में इन-बिल्ट इमेज प्रोसेसिंग API जोड़ा गया है, जो जीरो नेटिव डिपेंडेंसी के साथ रिसाइजिंग, क्रॉपिंग और फॉर्मेट कन्वर्जन की सुविधा देता है।

  • Bun इमेज API मेटाडेटा रीड में Sharp से 70 गुना तेज है और रिसाइजिंग में लगभग 30% अधिक प्रदर्शन प्रदान करता है।

  • मुख्य थ्रेड से हटकर काम करने के कारण, Bun की इमेज प्रोसेसिंग सर्वर को ब्लॉक नहीं करती है।

  • इमेज को 28-बाइट के 'थंब हैश' में एनकोड करके, बिना किसी अतिरिक्त नेटवर्क रिक्वेस्ट के धुंधले प्लेसहोल्डर दिखाए जा सकते हैं।

  • Bun में इमेज प्रोसेसिंग सीधे रनटाइम में मौजूद है, जिससे Sharp जैसी बाहरी लाइब्रेरी और libvips नेटिव बाइनरी पर निर्भरता खत्म हो जाती है।

Timeline

Bun इमेज API का परिचय और Sharp से तुलना

  • Bun 1.3.14 ने इमेज प्रोसेसिंग को सीधे रनटाइम के अंदर एकीकृत कर दिया है।
  • Sharp लाइब्रेरी की तुलना में, Bun मेटाडेटा पढ़ने में 70 गुना और रिसाइजिंग में 30% ज्यादा तेज है।
  • Sharp libvips जैसी बाहरी नेटिव बाइनरी पर निर्भर है, जिससे अक्सर Docker और CI पाइपलाइन में इंस्टालेशन संबंधी समस्याएं आती हैं।

इमेज प्रोसेसिंग के लिए अक्सर Sharp लाइब्रेरी का उपयोग किया जाता है, जो libvips पर निर्भर है। Bun ने इस समस्या को दूर करने के लिए रनटाइम में ही इमेज प्रोसेसिंग सुविधा जोड़ी है। यह मुख्य थ्रेड को ब्लॉक किए बिना काम करता है, जिससे प्रदर्शन में सुधार होता है।

इमेज प्रोसेसिंग के तकनीकी उपयोग और डेमो

  • प्रोफाइल पिक्चर जैसी इमेजेस के फाइल साइज को 99% तक कम किया जा सकता है।
  • Bun.image के जरिए इमेज रिसाइजिंग, रोटेशन, फ्लिपिंग, चमक और सैचुरेशन को आसानी से नियंत्रित किया जा सकता है।
  • 28-बाइट थंब हैश का उपयोग करके मुख्य इमेज लोड होने से पहले धुंधले प्लेसहोल्डर दिखाए जा सकते हैं।

Bun का इमेज API बहुत सरल है। इसे WebP जैसे विभिन्न फॉर्मेट्स में आउटपुट देने के लिए कॉन्फ़िगर किया जा सकता है। थंब हैश का उपयोग करके इसे बेस64 इमेज के रूप में सीधे CSS में शामिल किया जा सकता है, जिससे नेटवर्क रिक्वेस्ट की आवश्यकता नहीं पड़ती।

भविष्य की दिशा और निष्कर्ष

  • Bun SQLite, S3 और Postgres के बाद अब इमेज प्रोसेसिंग को जोड़कर एक संपूर्ण फुल-स्टैक रनटाइम बन रहा है।
  • इमेज प्रोसेसिंग की आवश्यकता के लिए केवल Bun पर स्विच करना आवश्यक नहीं है यदि मौजूदा प्रोजेक्ट्स में Sharp का उपयोग पहले से ही सफलतापूर्वक हो रहा है।
  • भविष्य में Bun ऑथेंटिकेशन (Auth) जैसे फीचर्स जोड़कर Laravel या Rails जैसा अनुभव प्रदान करने की दिशा में बढ़ सकता है।

Bun तेजी से उन सभी सुविधाओं को रनटाइम में शामिल कर रहा है जिनकी आवश्यकता एक वेब ऐप को होती है। यह रुझान बताता है कि Bun भविष्य में एक व्यापक फुल-स्टैक टूलकिट बनने की तैयारी कर रहा है।

Community Posts

No posts yet. Be the first to write about this video!

Write about this video