[{"data":1,"prerenderedAt":849},["ShallowReactive",2],{"content:\u002Fjavascript-bundle-optimization-code-splitting\u002Fmodern-module-formats-esm-vs-commonjs\u002Fdeferring-non-critical-analytics-scripts-safely":3,"surroundings:\u002Fjavascript-bundle-optimization-code-splitting\u002Fmodern-module-formats-esm-vs-commonjs\u002Fdeferring-non-critical-analytics-scripts-safely":841},{"id":4,"title":5,"body":6,"description":833,"extension":834,"meta":835,"navigation":836,"path":837,"seo":838,"stem":839,"__hash__":840},"content\u002Fjavascript-bundle-optimization-code-splitting\u002Fmodern-module-formats-esm-vs-commonjs\u002Fdeferring-non-critical-analytics-scripts-safely\u002Findex.md","Deferring Non-Critical Analytics Scripts Safely: A Diagnostic & Implementation Guide",{"type":7,"value":8,"toc":823},"minimark",[9,13,23,28,36,39,45,60,64,67,113,116,136,144,148,162,166,169,199,206,210,227,231,234,247,257,263,269,375,516,612,616,634,638,641,662,669,673,684,688,691,722,726,737,741,770,774,783,798,807,813,819],[10,11,5],"h1",{"id":12},"deferring-non-critical-analytics-scripts-safely-a-diagnostic-implementation-guide",[14,15,16,17,22],"p",{},"Third-party analytics scripts frequently trigger Lighthouse warnings for render-blocking resources and excessive main-thread work. This directly degrades Core Web Vitals. This guide targets a narrow, high-impact workflow: safely deferring non-critical tracking code without breaking session stitching, consent compliance, or data accuracy. By isolating the exact execution window and applying deterministic loading patterns, frontend teams can recover 150–400ms on First Contentful Paint (FCP) while maintaining >99.5% tracking parity. The strategies outlined here integrate seamlessly with broader ",[18,19,21],"a",{"href":20},"\u002Fjavascript-bundle-optimization-code-splitting\u002F","JavaScript Bundle Optimization & Code Splitting"," initiatives and account for modern module resolution patterns that dictate how vendors package their SDKs.",[24,25,27],"h2",{"id":26},"root-cause-analysis-why-analytics-scripts-block-rendering","Root Cause Analysis: Why Analytics Scripts Block Rendering",[14,29,30,31,35],{},"Synchronous script tags in the ",[32,33,34],"code",{},"\u003Chead>"," halt HTML parsing until the resource is fetched, parsed, and executed. Analytics vendors frequently bundle heavy dependencies. These include DOM parsers, network queues, and consent managers that initialize before hydration. This creates immediate main-thread contention.",[14,37,38],{},"Network download time is rarely the bottleneck. Execution time inflates Total Blocking Time (TBT) and delays paint cycles. Heavy initialization routines compete directly with the browser’s compositor thread. This pushes FCP beyond acceptable thresholds.",[14,40,41],{},[42,43,44],"strong",{},"Key Takeaways:",[46,47,48,54,57],"ul",{},[49,50,51,52],"li",{},"Analytics scripts block HTML parsing when placed synchronously in ",[32,53,34],{},[49,55,56],{},"Execution time, not download time, causes TBT inflation",[49,58,59],{},"Heavy initialization routines compete with main thread for paint cycles",[24,61,63],{"id":62},"diagnostic-workflow-devtools-lighthouse-thresholds","Diagnostic Workflow: DevTools & Lighthouse Thresholds",[14,65,66],{},"Isolate the exact execution window before applying fixes. Follow this diagnostic sequence:",[68,69,70,77,84,91,102],"ol",{},[49,71,72,73,76],{},"Open Chrome DevTools → ",[42,74,75],{},"Performance"," tab.",[49,78,79,80,83],{},"Disable cache, set throttling to ",[42,81,82],{},"Simulated Fast 4G",", and record a page load.",[49,85,86,87,90],{},"Filter the timeline by ",[42,88,89],{},"Scripting"," and locate long tasks exceeding 50ms.",[49,92,93,94,97,98,101],{},"Expand the ",[42,95,96],{},"Call Tree"," or ",[42,99,100],{},"Bottom-Up"," view to trace execution back to analytics domains.",[49,103,104,105,108,109,112],{},"Run Lighthouse and audit ",[42,106,107],{},"Reduce unused JavaScript"," and ",[42,110,111],{},"Eliminate render-blocking resources",".",[14,114,115],{},"Target the following thresholds post-optimization:",[46,117,118,124,130],{},[49,119,120,123],{},[42,121,122],{},"FCP:"," \u003C 1.8s",[49,125,126,129],{},[42,127,128],{},"LCP:"," \u003C 2.5s",[49,131,132,135],{},[42,133,134],{},"TBT:"," \u003C 200ms",[14,137,138,139,143],{},"Module resolution overhead often compounds parsing delays. Understanding how vendors bundle dependencies aligns with patterns discussed in ",[18,140,142],{"href":141},"\u002Fjavascript-bundle-optimization-code-splitting\u002Fmodern-module-formats-esm-vs-commonjs\u002F","Modern Module Formats: ESM vs CommonJS",", where tree-shakable exports reduce initial parse cost.",[14,145,146],{},[42,147,44],{},[46,149,150,153,156],{},[49,151,152],{},"Use Performance tab to pinpoint exact execution start\u002Fend",[49,154,155],{},"Target TBT \u003C 200ms and eliminate >50ms long tasks from analytics",[49,157,158,159,161],{},"Lighthouse render-blocking warnings indicate ",[32,160,34],{}," synchronous scripts",[24,163,165],{"id":164},"safe-deferral-strategies-execution-timing-patterns","Safe Deferral Strategies: Execution Timing Patterns",[14,167,168],{},"Script loading attributes dictate execution timing and dependency safety.",[46,170,171,177,187,193],{},[49,172,173,176],{},[32,174,175],{},"async",": Downloads in parallel but executes immediately upon fetch completion. Unsafe for analytics dependent on consent managers or sequential libraries due to race conditions.",[49,178,179,182,183,186],{},[32,180,181],{},"defer",": Downloads in parallel but executes only after DOM parsing completes (",[32,184,185],{},"DOMContentLoaded","). Preserves script order and guarantees non-blocking behavior.",[49,188,189,192],{},[32,190,191],{},"dynamic import()",": Loads modules on-demand. Ideal for below-fold tracking or post-interaction events.",[49,194,195,198],{},[32,196,197],{},"requestIdleCallback",": Defers initialization until the main thread is idle. Prevents paint interference but requires a fallback timeout for older browsers.",[14,200,201,202,205],{},"Avoid ",[32,203,204],{},"setTimeout"," for deferral. It executes unpredictably relative to paint cycles. It can still block rendering if scheduled during critical layout phases.",[14,207,208],{},[42,209,44],{},[46,211,212,217,222],{},[49,213,214,216],{},[32,215,181],{}," guarantees DOM parsing completion before execution",[49,218,219,221],{},[32,220,197],{}," safely delays non-critical init until idle",[49,223,201,224,226],{},[32,225,175],{}," for scripts requiring sequential dependency loading",[24,228,230],{"id":229},"implementation-tag-manager-native-script-loading","Implementation: Tag Manager & Native Script Loading",[14,232,233],{},"Apply deterministic loading patterns using native HTML and JavaScript.",[14,235,236,241,242,244,245,112],{},[42,237,238,239],{},"Step 1: Replace synchronous tags with ",[32,240,181],{},"\nMove all third-party analytics scripts out of ",[32,243,34],{}," and append ",[32,246,181],{},[14,248,249,252,253,256],{},[42,250,251],{},"Step 2: Implement dataLayer buffering","\nInitialize the ",[32,254,255],{},"dataLayer"," array before the SDK loads to capture early events.",[14,258,259,262],{},[42,260,261],{},"Step 3: Wrap heavy SDKs in dynamic imports","\nTrigger initialization after user interaction or route completion.",[14,264,265,268],{},[42,266,267],{},"Step 4: Gate behind explicit consent","\nNever execute tracking until the consent state resolves.",[270,271,276],"pre",{"className":272,"code":273,"language":274,"meta":275,"style":275},"language-html shiki shiki-themes github-dark-high-contrast github-dark-high-contrast github-light-high-contrast","\u003C!-- Native defer pattern with dataLayer buffering -->\n\u003Cscript>\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({event: 'pageview'});\n\u003C\u002Fscript>\n\u003Cscript defer src=\"https:\u002F\u002Fwww.googletagmanager.com\u002Fgtag\u002Fjs?id=G-XXXXXXX\">\u003C\u002Fscript>\n","html","",[32,277,278,287,301,319,339,349],{"__ignoreMap":275},[279,280,283],"span",{"class":281,"line":282},"line",1,[279,284,286],{"class":285},"sXJMR","\u003C!-- Native defer pattern with dataLayer buffering -->\n",[279,288,290,294,298],{"class":281,"line":289},2,[279,291,293],{"class":292},"s3sCt","\u003C",[279,295,297],{"class":296},"sj_b3","script",[279,299,300],{"class":292},">\n",[279,302,304,307,311,313,316],{"class":281,"line":303},3,[279,305,306],{"class":292}," window.dataLayer ",[279,308,310],{"class":309},"sCJTb","=",[279,312,306],{"class":292},[279,314,315],{"class":309},"||",[279,317,318],{"class":292}," [];\n",[279,320,322,325,329,332,336],{"class":281,"line":321},4,[279,323,324],{"class":292}," window.dataLayer.",[279,326,328],{"class":327},"sGhOu","push",[279,330,331],{"class":292},"({event: ",[279,333,335],{"class":334},"sJdzJ","'pageview'",[279,337,338],{"class":292},"});\n",[279,340,342,345,347],{"class":281,"line":341},5,[279,343,344],{"class":292},"\u003C\u002F",[279,346,297],{"class":296},[279,348,300],{"class":292},[279,350,352,354,356,360,363,365,368,371,373],{"class":281,"line":351},6,[279,353,293],{"class":292},[279,355,297],{"class":296},[279,357,359],{"class":358},"s5hCx"," defer",[279,361,362],{"class":358}," src",[279,364,310],{"class":292},[279,366,367],{"class":334},"\"https:\u002F\u002Fwww.googletagmanager.com\u002Fgtag\u002Fjs?id=G-XXXXXXX\"",[279,369,370],{"class":292},">\u003C\u002F",[279,372,297],{"class":296},[279,374,300],{"class":292},[270,376,380],{"className":377,"code":378,"language":379,"meta":275,"style":275},"language-javascript shiki shiki-themes github-dark-high-contrast github-dark-high-contrast github-light-high-contrast","\u002F\u002F requestIdleCallback wrapper for non-critical init\nfunction initAnalytics() {\n if ('requestIdleCallback' in window) {\n requestIdleCallback(() => {\n window.gtag('config', 'G-XXXXXXX');\n }, { timeout: 2000 });\n } else {\n setTimeout(() => window.gtag('config', 'G-XXXXXXX'), 100);\n }\n}\n","javascript",[32,381,382,387,398,415,429,452,463,474,504,510],{"__ignoreMap":275},[279,383,384],{"class":281,"line":282},[279,385,386],{"class":285},"\u002F\u002F requestIdleCallback wrapper for non-critical init\n",[279,388,389,392,395],{"class":281,"line":289},[279,390,391],{"class":309},"function",[279,393,394],{"class":327}," initAnalytics",[279,396,397],{"class":292},"() {\n",[279,399,400,403,406,409,412],{"class":281,"line":303},[279,401,402],{"class":309}," if",[279,404,405],{"class":292}," (",[279,407,408],{"class":334},"'requestIdleCallback'",[279,410,411],{"class":309}," in",[279,413,414],{"class":292}," window) {\n",[279,416,417,420,423,426],{"class":281,"line":321},[279,418,419],{"class":327}," requestIdleCallback",[279,421,422],{"class":292},"(() ",[279,424,425],{"class":309},"=>",[279,427,428],{"class":292}," {\n",[279,430,431,434,437,440,443,446,449],{"class":281,"line":341},[279,432,433],{"class":292}," window.",[279,435,436],{"class":327},"gtag",[279,438,439],{"class":292},"(",[279,441,442],{"class":334},"'config'",[279,444,445],{"class":292},", ",[279,447,448],{"class":334},"'G-XXXXXXX'",[279,450,451],{"class":292},");\n",[279,453,454,457,460],{"class":281,"line":351},[279,455,456],{"class":292}," }, { timeout: ",[279,458,459],{"class":358},"2000",[279,461,462],{"class":292}," });\n",[279,464,466,469,472],{"class":281,"line":465},7,[279,467,468],{"class":292}," } ",[279,470,471],{"class":309},"else",[279,473,428],{"class":292},[279,475,477,480,482,484,486,488,490,492,494,496,499,502],{"class":281,"line":476},8,[279,478,479],{"class":327}," setTimeout",[279,481,422],{"class":292},[279,483,425],{"class":309},[279,485,433],{"class":292},[279,487,436],{"class":327},[279,489,439],{"class":292},[279,491,442],{"class":334},[279,493,445],{"class":292},[279,495,448],{"class":334},[279,497,498],{"class":292},"), ",[279,500,501],{"class":358},"100",[279,503,451],{"class":292},[279,505,507],{"class":281,"line":506},9,[279,508,509],{"class":292}," }\n",[279,511,513],{"class":281,"line":512},10,[279,514,515],{"class":292},"}\n",[270,517,519],{"className":377,"code":518,"language":379,"meta":275,"style":275},"\u002F\u002F Dynamic import with consent check\nasync function loadAnalyticsSafely() {\n const consent = await checkUserConsent();\n if (consent) {\n const { init } = await import('.\u002Fheavy-analytics-sdk.js');\n init({ trackingId: 'UA-XXXXX' });\n }\n}\n",[32,520,521,526,538,558,565,591,604,608],{"__ignoreMap":275},[279,522,523],{"class":281,"line":282},[279,524,525],{"class":285},"\u002F\u002F Dynamic import with consent check\n",[279,527,528,530,533,536],{"class":281,"line":289},[279,529,175],{"class":309},[279,531,532],{"class":309}," function",[279,534,535],{"class":327}," loadAnalyticsSafely",[279,537,397],{"class":292},[279,539,540,543,546,549,552,555],{"class":281,"line":303},[279,541,542],{"class":309}," const",[279,544,545],{"class":358}," consent",[279,547,548],{"class":309}," =",[279,550,551],{"class":309}," await",[279,553,554],{"class":327}," checkUserConsent",[279,556,557],{"class":292},"();\n",[279,559,560,562],{"class":281,"line":321},[279,561,402],{"class":309},[279,563,564],{"class":292}," (consent) {\n",[279,566,567,569,572,575,577,579,581,584,586,589],{"class":281,"line":341},[279,568,542],{"class":309},[279,570,571],{"class":292}," { ",[279,573,574],{"class":358},"init",[279,576,468],{"class":292},[279,578,310],{"class":309},[279,580,551],{"class":309},[279,582,583],{"class":309}," import",[279,585,439],{"class":292},[279,587,588],{"class":334},"'.\u002Fheavy-analytics-sdk.js'",[279,590,451],{"class":292},[279,592,593,596,599,602],{"class":281,"line":351},[279,594,595],{"class":327}," init",[279,597,598],{"class":292},"({ trackingId: ",[279,600,601],{"class":334},"'UA-XXXXX'",[279,603,462],{"class":292},[279,605,606],{"class":281,"line":465},[279,607,509],{"class":292},[279,609,610],{"class":281,"line":476},[279,611,515],{"class":292},[14,613,614],{},[42,615,44],{},[46,617,618,625,631],{},[49,619,620,621,624],{},"Buffer ",[32,622,623],{},"dataLayer.push"," calls before SDK loads to prevent data loss",[49,626,627,628,630],{},"Use ",[32,629,191],{}," for below-fold or post-interaction tracking",[49,632,633],{},"Always defer until consent state is explicitly resolved",[24,635,637],{"id":636},"validation-monitoring-ensuring-data-integrity","Validation & Monitoring: Ensuring Data Integrity",[14,639,640],{},"Verify deferral does not compromise tracking accuracy.",[68,642,643,646,656,659],{},[49,644,645],{},"Compare the network waterfall pre- and post-deployment. Confirm analytics requests shift below the critical rendering path.",[49,647,648,649,97,652,655],{},"Validate tracking parity using Real-Time dashboards and the Network inspector. Filter for ",[32,650,651],{},"collect",[32,653,654],{},"batch"," endpoints.",[49,657,658],{},"Implement synthetic monitoring to detect script load failures or CSP violations.",[49,660,661],{},"Configure fallback logging to capture dropped events during deferral windows.",[14,663,664,665,668],{},"Maintain an acceptable data variance threshold of ",[42,666,667],{},"\u003C0.5%",". Any deviation beyond this requires immediate rollback or buffer adjustment.",[14,670,671],{},[42,672,44],{},[46,674,675,678,681],{},[49,676,677],{},"Verify tracking parity via network endpoint inspection",[49,679,680],{},"Monitor script load failures with synthetic checks",[49,682,683],{},"Maintain \u003C0.5% acceptable data variance during deferral",[24,685,687],{"id":686},"edge-cases-compliance-considerations","Edge Cases & Compliance Considerations",[14,689,690],{},"Deferral introduces specific architectural and legal constraints.",[46,692,693,710,716],{},[49,694,695,698,699,97,702,705,706,709],{},[42,696,697],{},"SPA Routing:"," Deferred scripts miss virtual pageviews. Hook into the router’s ",[32,700,701],{},"afterEach",[32,703,704],{},"history"," listener to manually trigger ",[32,707,708],{},"pageview"," events after SDK initialization.",[49,711,712,715],{},[42,713,714],{},"Consent Mode:"," GDPR\u002FCCPA requires explicit user approval before tracking. Consent banners must load synchronously or with high priority. Only defer the tracking SDK until consent resolves.",[49,717,718,721],{},[42,719,720],{},"Ad Blockers:"," Deferred scripts remain vulnerable to network-level blocking. Design for graceful degradation by wrapping analytics calls in try\u002Fcatch blocks and routing to first-party fallback endpoints.",[14,723,724],{},[42,725,44],{},[46,727,728,731,734],{},[49,729,730],{},"SPA routing requires manual pageview triggers after deferral",[49,732,733],{},"Consent mode must gate script execution, not defer it",[49,735,736],{},"Ad blockers may still block deferred scripts; design for graceful degradation",[24,738,740],{"id":739},"common-mistakes","Common Mistakes",[46,742,743,752,755,761,767],{},[49,744,745,746,748,749,751],{},"Using ",[32,747,175],{}," on scripts that depend on ",[32,750,255],{}," initialization, causing race conditions and dropped events",[49,753,754],{},"Deferring consent-required trackers without gating them behind explicit user approval, violating GDPR\u002FCCPA",[49,756,757,758,760],{},"Relying on ",[32,759,204],{}," for deferral, which executes unpredictably and can still block paint",[49,762,763,764,766],{},"Failing to buffer early ",[32,765,623],{}," calls, resulting in lost pageview data on first load",[49,768,769],{},"Ignoring SPA routing, causing deferred scripts to miss subsequent virtual pageviews",[24,771,773],{"id":772},"faq","FAQ",[14,775,776,779,780,782],{},[42,777,778],{},"Does deferring analytics scripts break tracking accuracy?","\nNo, provided you buffer early events using a ",[32,781,255],{}," array and ensure the SDK initializes before the user navigates away. Proper deferral maintains >99.5% tracking parity while significantly improving FCP and TBT.",[14,784,785,788,789,791,792,794,795,797],{},[42,786,787],{},"Should I use async or defer for third-party analytics?","\nAlways use ",[32,790,181],{}," for analytics. ",[32,793,175],{}," executes immediately upon download, which can cause race conditions with consent managers or dependent libraries. ",[32,796,181],{}," guarantees execution after DOM parsing, preserving script order and preventing render-blocking.",[14,799,800,803,804,806],{},[42,801,802],{},"How do I defer analytics in a Single Page Application (SPA)?","\nIn SPAs, defer the initial SDK load, then manually trigger pageview events using the router's ",[32,805,701],{}," or history listener. Ensure the SDK is fully initialized before pushing virtual pageviews to avoid dropped data.",[14,808,809,812],{},[42,810,811],{},"What Lighthouse thresholds indicate successful deferral?","\nSuccessful deferral should eliminate \"Eliminate render-blocking resources\" warnings, reduce Total Blocking Time (TBT) to \u003C200ms, and push First Contentful Paint (FCP) under 1.8s on simulated 4G Fast connections.",[14,814,815,818],{},[42,816,817],{},"Can I safely defer consent management scripts?","\nNo. Consent banners and preference centers must load synchronously or with high priority to comply with GDPR\u002FCCPA. Only defer the actual analytics tracking SDKs until explicit consent is granted.",[820,821,822],"style",{},"html pre.shiki code .sXJMR, html code.shiki .sXJMR{--shiki-default:#BDC4CC;--shiki-dark:#BDC4CC;--shiki-light:#66707B}html pre.shiki code .s3sCt, html code.shiki .s3sCt{--shiki-default:#F0F3F6;--shiki-dark:#F0F3F6;--shiki-light:#0E1116}html pre.shiki code .sj_b3, html code.shiki .sj_b3{--shiki-default:#72F088;--shiki-dark:#72F088;--shiki-light:#024C1A}html pre.shiki code .sCJTb, html code.shiki .sCJTb{--shiki-default:#FF9492;--shiki-dark:#FF9492;--shiki-light:#A0111F}html pre.shiki code .sGhOu, html code.shiki .sGhOu{--shiki-default:#DBB7FF;--shiki-dark:#DBB7FF;--shiki-light:#622CBC}html pre.shiki code .sJdzJ, html code.shiki .sJdzJ{--shiki-default:#ADDCFF;--shiki-dark:#ADDCFF;--shiki-light:#032563}html pre.shiki code .s5hCx, html code.shiki .s5hCx{--shiki-default:#91CBFF;--shiki-dark:#91CBFF;--shiki-light:#023B95}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":275,"searchDepth":289,"depth":289,"links":824},[825,826,827,828,829,830,831,832],{"id":26,"depth":289,"text":27},{"id":62,"depth":289,"text":63},{"id":164,"depth":289,"text":165},{"id":229,"depth":289,"text":230},{"id":636,"depth":289,"text":637},{"id":686,"depth":289,"text":687},{"id":739,"depth":289,"text":740},{"id":772,"depth":289,"text":773},"Third-party analytics scripts frequently trigger Lighthouse warnings for render-blocking resources and excessive main-thread work. This directly degrades Core Web Vitals. This guide targets a narrow, high-impact workflow: safely deferring non-critical tracking code without breaking session stitching, consent compliance, or data accuracy. By isolating the exact execution window and applying deterministic loading patterns, frontend teams can recover 150–400ms on First Contentful Paint (FCP) while maintaining >99.5% tracking parity. The strategies outlined here integrate seamlessly with broader JavaScript Bundle Optimization & Code Splitting initiatives and account for modern module resolution patterns that dictate how vendors package their SDKs.","md",{},true,"\u002Fjavascript-bundle-optimization-code-splitting\u002Fmodern-module-formats-esm-vs-commonjs\u002Fdeferring-non-critical-analytics-scripts-safely",{"title":5,"description":833},"javascript-bundle-optimization-code-splitting\u002Fmodern-module-formats-esm-vs-commonjs\u002Fdeferring-non-critical-analytics-scripts-safely\u002Findex","499wRlTUaPKU31q6dEqn9TQ9s17ZdkTXqABg7Peve5E",[842,845],{"title":142,"path":843,"stem":844,"children":-1},"\u002Fjavascript-bundle-optimization-code-splitting\u002Fmodern-module-formats-esm-vs-commonjs","javascript-bundle-optimization-code-splitting\u002Fmodern-module-formats-esm-vs-commonjs\u002Findex",{"title":846,"path":847,"stem":848,"children":-1},"Tree Shaking and Dead Code Elimination: Advanced Implementation & Diagnostics","\u002Fjavascript-bundle-optimization-code-splitting\u002Ftree-shaking-and-dead-code-elimination","javascript-bundle-optimization-code-splitting\u002Ftree-shaking-and-dead-code-elimination\u002Findex",1777925997723]