तीन साल पहले मैं टोरंटो में एक क्लायंट के साथ कॉल पर बैठा था, Next.js बिल्ड को 94 सेकंड तक घिसटते हुए देख रहा था, जबकि हम दोनों इसके साथ ठीक होने का नाटक कर रहे थे। Webpack। आठ हज़ार मॉड्यूल। एक मोनोरेपो साझा UI कंपोनेंट्स के साथ जिसे किसी ने 2021 के बाद से ऑडिट नहीं किया था। क्लायंट ने पूछा कि क्या हम इसे "तेज़ बना सकते हैं।" मैंने दो दिन की काम की कीमत बताई। इसमें चार दिन लगे। और फिर भी हमने इसे 61 सेकंड तक घटाया, जो किसी ऐसी दौड़ में जीतने जैसा लगा जिसमें कोई भी शामिल होना नहीं चाहता था।
Turbopack ने वह कहानी बदल दी। ज्यादातर। लेकिन यहाँ 2026 में, मैं डेवलपर्स को यह मानते हुए देख रहा हूँ कि Turbopack में स्विच करना एक फिनिश लाइन है, शुरुआती बिंदु नहीं। वे फ़्लैग को फ्लिप करते हैं, अपने डेव सर्वर स्टार्टअप से 40% शेव करते हैं, और इसे ख़त्म मान लेते हैं। असली बॉटलनेक्स बस कहीं शांत हो गई।
तो मैं आपको बताता हूँ कि जब आप Turbopack को एक असली प्रोडक्शन कोडबेस में चला रहे हैं तो बिल्ड टाइम वास्तव में कहाँ जाता है। कोई टुडु ऐप नहीं। कोई Next.js उदाहरण टेम्पलेट नहीं। एक असली साइट 200+ routes के साथ, एक CMS इंटीग्रेशन के साथ, और एक क्लायंट जो हर सेकंड को नोटिस करता है।
डेव मोड और प्रोडक्शन बिल्ड्स के बीच का अंतर
यहाँ वह चीज़ है जो ज्यादातर लोग मिस करते हैं: Turbopack की सबसे बड़ी जीत डेव सर्वर में हैं। इनक्रिमेंटल कंपाइलेशन, मॉड्यूल-स्तरीय कैशिंग, पूरा Rust-चालित ग्राफ। डेव मोड में, यह सच में ट्रांसफॉर्मेटिव है। मैंने Seahawk क्लायंट प्रोजेक्ट पर एक कोल्ड स्टार्ट को 28 सेकंड से webpack के तहत 4 के नीचे Turbopack के साथ क्लॉक किया। यह कोई राउंडिंग एरर नहीं है।
लेकिन next build एक अलग जानवर है। जनवरी 2026 की शुरुआत तक, Turbopack का प्रोडक्शन बिल्ड सपोर्ट स्थिर है लेकिन यह पूरी पाइपलाइन को नहीं लिखता है। स्टैटिक एनालिसिस, पेज ऑप्टिमाइज़ेशन, और SWC कंपाइलर सभी Turbopack के बंडलर के साथ भारी लिफ्टिंग अभी भी कर रहे हैं। आप प्रोडक्शन आउटपुट पर यूनिफॉर्म 10x नहीं पा रहे हैं।
यह मायने रखता है क्योंकि डेवलपर्स गलत चीज़ को बेंचमार्क करते हैं। वे next dev को स्पिन अप होते देखते हैं और निष्कर्ष निकालते हैं कि बिल्ड तेज़ है। फिर CI 3 मिनट लेता है और वे कंधे उचकाते हैं।
Turbopack आर्किटेक्चर वास्तव में क्या करता है
Turbopack एक डिमांड-ड्रिवन कंप्यूटेशन मॉडल पर काम करता है। यह केवल जो माँगा गया है वह बनाता है, मॉड्यूल स्तर पर कैश करता है, और व्यापक रूप से नहीं बल्कि सटीक रूप से अमान्य करता है। यही कारण है कि Vercel टीम का आर्किटेक्चर राइटअप "फंक्शन-स्तरीय मेमोइज़ेशन" के बारे में बात करता है। यह मार्केटिंग कॉपी नहीं है। यह असली मैकेनिज़्म है कि एक कंपोनेंट को छूने से पूरा री-बंडल क्यों नहीं होता है।
इसका मतलब: आपका सबसे तेज़ लाभ वहाँ होता है जहाँ अमान्यकरण पहले बहुत व्यापक था। साझा उपयोगिता फ़ाइलें, बड़े बैरल एक्सपोर्ट्स, गहरी नेस्टेड री-एक्सपोर्ट्स। वह जगह है जहाँ Webpack आपको चुपचाप दंडित कर रहा था।
2026 में समय वास्तव में कहाँ गायब होता है
मैंने NEXT_TURBOPACK_TRACING=1 का उपयोग करके पिछली तिमाही में चार कोडबेस को ऑडिट किया। हाँ, वह एनवी वेरिएबल मौजूद है और हाँ, यह एक ट्रेस फ़ाइल थूकता है जो आप Chrome के परफॉर्मेंस पैनल में लोड कर सकते हैं। किसी विशेष चीज़ को कसूरवार मानने से पहले इसे अत्यधिक अनुशंसित करता हूँ।
यहाँ वह है जो मैंने पाया, मोटे तौर पर उनके दिखने की आवृत्ति से रैंक किया गया:
- बैरल फ़ाइल विस्फोट। एक ही
index.tsजो डिज़ाइन सिस्टम से 60 कंपोनेंट्स को री-एक्सपोर्ट कर रहा है, उन सभी मॉड्यूल्स को ग्राफ में खींचता है भले ही आप दो का उपयोग करें। Turbopack यह Webpack की तुलना में बेहतर संभालता है लेकिन यह समस्या को गायब नहीं करता है। सुधार दानेदार आयात है। हमेशा। - टाइप-चेकिंग बंडलिंग से अलग नहीं की गई है। एक ही बिल्ड पाइपलाइन के अंदर
tsc --noEmitचलाना जो Turbopack प्रोसेस कर रहा है आपके वॉल टाइम को दोगुना कर रहा है। उन्हें अलग करें। TypeScript टाइप चेकिंग और Turbopack बंडलिंग CI में समानांतर नौकरियाँ होनी चाहिए, क्रमागत चरण नहीं। - तीसरे पक्ष के पैकेजों में अस्थिर मॉड्यूल आईडी। कुछ npm पैकेज अभी भी डायनामिक रिक्वायर्स के साथ CommonJS शिप करते हैं। Turbopack को इनके लिए धीमे विश्लेषण पथों में वापस आना पड़ता है। मैंने पिछले महीने एक PDF जनरेशन लाइब्रेरी के पुराने संस्करण के साथ यह मार दिया। इसे अपग्रेड किया, 8 सेकंड बचाए।
- बिल्ड के समय इमेज ऑप्टिमाइज़ेशन। अगर आप
next/imageके साथ हज़ारों इमेज वेरिएंट प्री-जेनरेट कर रहे हैं और एक स्टैटिक एक्सपोर्ट कर रहे हैं, तो यह सिंक्रोनस और CPU-बाउंड है। यह Turbopack नहीं है। लेकिन यह बिल्ड ट्रेस में दिखता है और लोग बंडलर को दोष देते हैं। - बड़े `getStaticProps` डेटा पेलोड। बिल्ड के दौरान प्रति पेज 4MB CMS डेटा फेच करना, 300 पेजों में, एक नेटवर्क और पार्सिंग समस्या है। फिर से, यह Turbopack नहीं है। लेकिन यह उसी 180-सेकंड की बिल्ड के अंदर बैठता है और सामूहिक रूप से दोष पाता है।
असुविधाजनक सच यह है कि Turbopack ने बंडलिंग फेज को इतना तेज़ कर दिया कि इसके आसपास की हर चीज़ तुलना में धीमी लगने लगी। यह ऐसा है जैसे आप अपने रसोई के कूड़ेदान को ऑटोमैटिक खुलने के लिए अपग्रेड करें और फिर महसूस करें कि बाहर के व्हीली बिन तक की सैर ही असली परेशानी है।
बैरल फ़ाइल समस्या एक अलग सेक्शन के लायक है
मैं इस बात पर ज़ोर नहीं दे सकता। बैरल फ़ाइलें वह सबसे आम सेल्फ-इनफ्लिक्टेड बिल्ड समस्या हैं जो मैं एजेंसियों में देखता हूँ।
एक क्लाइंट 2025 के अंत में हमारे पास आया जिसके पास एक कंपोनेंट लाइब्रेरी थी जिसकी स्ट्रक्चर यह थी:
`` components/ index.ts (exports 140 named components) ``
हर पेज जो यहाँ तक कि एक बटन भी इम्पोर्ट कर रहा था, पूरे 140-कंपोनेंट ग्राफ को खींच रहा था। Webpack के साथ, ट्री-शेकिंग आउटपुट के समय आंशिक रूप से मदद करती थी। Turbopack के साथ, मॉड्यूल ग्राफ को अभी भी ट्रैवर्स और समझा जाना था कोई भी चीज़ काटने से पहले। डेव सर्वर धीमा नहीं था प्रति से, लेकिन कोल्ड स्टार्ट दर्दनाक थे।
हमने पाथ-स्पेसिफिक इम्पोर्ट्स के लिए रीस्ट्रक्चर किया:
`` import { Button } from '@company/ui/button' import { Modal } from '@company/ui/modal' ``
कोल्ड डेव स्टार्ट 11 सेकंड से 3 सेकंड से कम हो गया। प्रोडक्शन बिल्ड 22 सेकंड से गिरी। किसी ने Turbopack कॉन्फ़िग को छुआ नहीं। फिक्स बस था... इम्पोर्ट्स के बारे में आलसी न होना।
वास्तव में इन्हें पकड़ने के लिए एक अच्छा eslint-plugin-import रूल है: import/no-barrel-files। इसे अपनी लिंट कॉन्फ़िग में जोड़ें और वायलेशन को बिल्ड डेट मानें।
CI में कैशिंग: आप संभवतः 40 सेकंड टेबल पर छोड़ रहे हैं
Turbopack की लोकल कैशिंग बेहतरीन है। CI कैशिंग एक अलग समस्या है और ज़्यादातर टीमें इसे एक बार सेट करती हैं और फिर कभी दुबारा नहीं देखती।
Turbopack कैश डिफ़ॉल्ट रूप से .next/cache/turbopack में रहता है। अगर आपका CI पाइपलाइन (GitHub Actions, CircleCI, जो भी हो) रन्स के बीच उस डायरेक्टरी को परसिस्ट नहीं कर रहा है, तो आप हर बार पूरी कोल्ड बिल्ड कर रहे हैं। किसी भी उचित साइज़ की कोडबेस पर, वह 30 से 60 सेकंड की शुद्ध बर्बादी है प्रति रन।
GitHub Actions में एक Next.js + Turbopack सेटअप के लिए उचित कैश की यह दिखती है:
- कैश की:
package-lock.jsonका हैश +next.config.jsका हैश +tsconfig.jsonका हैश - कैश पाथ:
.next/cache - रेस्टोर की: समान ब्रांच पर पिछले कैश पर फॉलबैक, फिर main
बस इतना। ज़्यादातर टीमें केवल package-lock.json को हैश करती हैं। लेकिन अगर आपका next.config.js Turbopack कॉन्फ़िग बदलता है (experimental फीचर्स, मॉड्यूल एलियाज़, कस्टम लोडर्स), तो आप इसे इनवैलिडेट करना चाहते हैं। मैंने बग देखे हैं जहाँ एक स्टेल कैश कॉन्फ़िग चेंज के बाद गलत मॉड्यूल रेज़ोल्यूशन दे रहा था। रात 11 बजे डीबग करना बुरा है।
Seahawk के पास एक fintech प्रोजेक्ट था जहाँ सिर्फ कैश की स्ट्रक्चर को ठीक करने ने औसत CI बिल्ड को 4 मिनट 20 सेकंड से 2 मिनट 50 सेकंड तक गिरा दिया। समान कोड। समान हार्डवेयर। सिर्फ स्मार्टर कैश इनवैलिडेशन।
कस्टम लोडर्स और वे क्यों आपके लाभ को मार रहे हैं
Turbopack कस्टम लोडर्स को सपोर्ट करता है, लेकिन एक कीमत है। हर कस्टम लोडर आपको Turbopack के नेटिव फास्ट पाथ से बाहर करता है और एक कम्पैटिबिलिटी लेयर में डालता है। Vercel टीम Next.js Turbopack कॉन्फ़िगरेशन डॉक्स में इस बारे में काफ़ी ईमानदार है।
मैं यह सबसे अक्सर देखता हूँ:
- SVG लोडर्स (लोग SVGs को बिल्ड टाइम पर React कंपोनेंट्स में कन्वर्ट कर रहे हैं)
- भारी remark/rehype plugin chains के साथ MDX
- दुर्लभ plugins के साथ custom PostCSS configs वाले CSS Modules
SVGs के लिए विशेष रूप से, 2026 में यह है कि अपनी icon library को React components में pre-compile करें, यह एक अलग build step के रूप में करें, न कि Next.js build time पर। SVGR एक standalone script के रूप में इसके लिए बेहतरीन है। इसे अपने design tokens बदलने पर चलाएं, output को commit करें, और Turbopack को उन्हें regular .tsx files के रूप में treat करने दें।
MDX ज्यादा मुश्किल है। अगर आप 40 remark plugins चला रहे हैं, तो आपको इसका असर महसूस होगा। audit करें कि आपको वास्तव में कौन से चाहिए। मैंने ऐसे codebases देखे हैं जो remark-gfm, remark-smartypants, एक custom footnotes plugin, और दो अन्य चला रहे थे, जहां सिर्फ दो ही visible output differences पैदा कर रहे थे। अनावश्यक ones को हटा दें।
Module Resolution Tax जिसके बारे में कोई बात नहीं करता
Path aliases। सभी इन्हें use करते हैं। @/components, @/lib, ~/utils। ये convenient हैं। ये एक छोटा tax भी हैं जो compound होता है।
Turbopack हर import encounter पर aliases को resolve करता है। एक बड़े codebase में 4,000 imports और 12 aliases configured के साथ, यह 48,000 resolution operations per build है। Catastrophic नहीं है। लेकिन free भी नहीं है।
Fix यह नहीं है कि aliases को remove करें। यह है कि उनके साथ precise रहें। wildcard alias patterns से बचें जहां एक specific path काम करेगा। और अपने tsconfig.json paths को अपने next.config.js turbopack resolveAlias config के साथ sync रखें। इन दोनों के बीच drift होने से Turbopack redundant resolution work करता है। मैंने सिर्फ इसे clean करने से 4-5 second की बचत देखी है।
2026 में Turbopack अभी भी क्या नहीं करता
देखिए, मुझे Turbopack पसंद है। हम इसे Seahawk की अधिकांश नई projects में use करते हैं। लेकिन ईमानदारी मायने रखती है।
- Bundle analysis Webpack के ecosystem जितना mature नहीं है।
@next/bundle-analyzerकाम करता है लेकिन visualisation उतना granular नहीं है जितना आपकोwebpack-bundle-analyzerसे मिलता है। यह बेहतर हो रहा है लेकिन अभी वहां नहीं है। - Plugin ecosystem छोटा है। अगर आपका stack heavily customised Webpack plugins पर निर्भर है (कुछ legacy enterprise setups करते हैं), तो migration अभी भी एक real project है, afternoon का काम नहीं।
- Windows performance ने historically macOS और Linux के पीछे lag किया है। यह हर Next.js release के साथ बेहतर हो रहा है, लेकिन अगर आपकी team Windows-heavy है, तो commit करने से पहले benchmark करें।
ये में से कोई भी dealbreaker नहीं है। लेकिन ये real considerations हैं अगर आप evaluate कर रहे हैं कि एक existing project को migrate करें बनाम fresh start करें।
अपने Build को Actually कैसे Trace करें
Guessing बंद करें। यह चलाएं:
- अपने environment में
NEXT_TURBOPACK_TRACING=1set करें next buildचलाएं (याnext devअगर आप dev startup को profile कर रहे हैं).next/traceको Perfetto UI या Chrome केchrome://tracingमें खोलें- Duration के हिसाब से filter करें। एक single module में 2 seconds से अधिक कुछ भी investigating के लायक है।
यह वही approach है जो मैं किसी भी build optimisation engagement से पहले use करता हूं। Trace आपको बताता है कि समय कहां जाता है। बाकी सब कुछ expertise के रूप में तैयार किया गया guesswork है।
---
FAQ
क्या Turbopack 2026 में production builds के लिए stable है?
हां, production build support late 2024 में stable के रूप में आई और 2025 के दौरान significantly mature हुई है। अधिकांश Next.js projects जो fresh start कर रहे हैं, उनके लिए मैं बिना hesitation के Turbopack को default करूंगा। Heavy Webpack customisation वाली legacy projects के लिए, पहले एक spike करें और measure करें।
क्या Turbopack SWC को replace करता है?
नहीं। SWC TypeScript और JSX ट्रांसपायलर है। Turbopack बंडलर है। ये दोनों एक साथ काम करते हैं। Turbopack रूपांतरण के लिए अंदर से SWC का उपयोग करता है। आपको इनके बीच चुनना नहीं है।
मेरा Turbopack dev सर्वर तो तेज़ है लेकिन CI बिल्ड अभी भी धीमा क्यों है?
लगभग निश्चित रूप से इनमें से एक: type-checking बंडलिंग के साथ serial चल रहा है, .next/cache के लिए कोई CI cache कॉन्फ़िगर नहीं है, या image optimisation static generation phase में हावी हो रहा है। trace चलाएँ। यह आपको दिखाएगा कि कौन सा है।
क्या मुझे अभी अपने existing Webpack प्रोजेक्ट को Turbopack पर स्विच करना चाहिए?
अगर यह greenfield है या कम customisation वाला प्रोजेक्ट है, तो हाँ। अगर आपके पास 15 custom Webpack plugins हैं और एक जटिल loader chain है, तो एक proper migration sprint के लिए समय निकालिए। इसे Friday की दोपहर को अतिरिक्त काम मत बनाइए। (मैं यह व्यक्तिगत अनुभव से कह रहा हूँ। उस Friday के बारे में मत पूछिए।)
क्या Turbopack Nx या Turborepo monorepos के साथ काम करता है?
हाँ, और दरअसल काफ़ी अच्छे से। Turborepo caching Turbopack की internal caching के ऊपर अच्छी तरह stack होती है, और दोनों tools एक ही team की विरासत साझा करते हैं। यह combination बड़े monorepos के लिए genuinely अच्छा है जहाँ प्रति PR केवल packages का एक subset बदलता है।
---
Build tooling तब तक उबाऊ है जब तक आपका CI बिल $800 प्रति माह नहीं हो और आपकी dev team standup में cold starts की शिकायत नहीं करने लगे। Turbopack ने bottleneck को हिलाया, जो progress है। लेकिन इसने समय कहाँ जाता है, इसके बारे में स्पष्ट सोच की ज़रूरत को ख़त्म नहीं किया। पहले trace करिए। फिर optimize करिए। और सब कुछ के लिए, अपनी barrel files को ठीक कीजिए।
