🌳 Tree Shaking in JavaScript I’ve been diving deeper into one of the most powerful (yet often overlooked) concepts in modern JavaScript — Tree Shaking. Back in the days, when we heavily relied on CommonJS ("require"), bundlers didn’t have enough static information to eliminate unused code. This meant our applications often carried unnecessary baggage, impacting performance. But with the shift to ES Modules ("import/export"), things changed dramatically. 👉 What is Tree Shaking? Tree shaking is the process of removing unused (dead) code during the build step. It works because ES Modules are statically analyzable, allowing bundlers to determine what’s actually being used. --- 🚀 How it works in real frameworks 🔷 Angular Angular leverages tools like Webpack under the hood. When we use: import { Component } from '@angular/core'; Only the required parts are included in the final bundle. Combined with: - AOT (Ahead-of-Time Compilation) - Build Optimizer Angular ensures unused services, modules, and components are eliminated effectively. --- ⚛️ React React applications (especially with modern setups like Vite or Webpack) fully benefit from tree shaking when using ES Modules: import { debounce } from 'lodash-es'; Instead of importing the entire library, only the required function gets bundled. Key enablers: - ES Module syntax - Production builds ("npm run build") - Minifiers like Terser --- 💡 Why this matters - Smaller bundle size 📦 - Faster load times ⚡ - Better performance & user experience --- 📌 My takeaway Tree shaking isn’t just a “bundler feature” — it’s a mindset shift in how we write imports. Writing clean, modular, and explicit imports directly impacts application performance. Understanding this deeply has changed the way I structure code in both Angular and React projects. --- If you're working on frontend performance, this is one concept you cannot ignore. #JavaScript #Angular #React #WebPerformance #FrontendDevelopment #TreeShaking
Tree Shaking in JavaScript: Angular & React Performance Boost
More Relevant Posts
-
🔍 JavaScript Concept You Might Be Using Daily (Prototypes) Quick question 👇 const arr = [1, 2, 3]; arr.map(x => x * 2); 👉 Did you ever define map inside this array? 👉 Also… arr is an array, not a plain object… So how are we accessing .map like a property? Now another one 👇 const str = "hello"; console.log(str.toUpperCase()); // ? 👉 Did you define toUpperCase on this string? No. Still it works. So what’s going on? This happens because of Prototypes 📌 What is a Prototype? 👉 A prototype is an object that provides shared properties and methods to other objects. Simple way: 👉 Even though arrays and strings look different, they are handled like objects in JavaScript. 📌 What’s actually happening? When you do: 👉 arr.map JS checks: Inside arr → ❌ not found Inside Array.prototype → ✔ found When you do: 👉 str.toUpperCase() JS checks: Inside str → ❌ not found Inside String.prototype → ✔ found 📌 Why do we need it? Instead of adding methods again and again… 👉 JavaScript stores them once in prototypes ✔ Saves memory ✔ Enables reuse ✔ Powers inheritance 📌 Prototype Chain (simple view) arr → Array.prototype → Object.prototype → null str → String.prototype → Object.prototype → null 💡 Takeaway: ✔ Arrays & strings can access methods via prototypes ✔ Prototype = shared methods storage ✔ JS looks up the chain to find properties 👉 You didn’t define these methods… JavaScript already had them ready 💬 Comment “Yes” if you knew this 💬 Comment “No” if this clarified something 🔁 Save this for later ❤️ Like for more JavaScript deep dives #javascript #frontend #codingtips #webdevelopment #js #developer
To view or add a comment, sign in
-
#js #11 **What is Event Loop in Javascript, How it Works** Let’s lock this concept in your mind in a clear, step-by-step way 👇 🧠 What is Event Loop? 👉 The Event Loop is: A mechanism that checks when the call stack is empty and then moves async tasks to it 👉 Simple definition: Event Loop = a watcher that keeps checking “Can I run the next task?” 📦 First understand 3 building blocks 1. Call Stack 🥞 Where JavaScript executes code One task at a time (single-threaded) 2. Web APIs 🌐 Provided by browser like Google Chrome Handles: setTimeout API calls DOM events 3. Callback Queue 📥 Stores completed async tasks Waiting for execution 🔄 How Event Loop Works (Step-by-Step) Let’s take a simple example: console.log("Start"); setTimeout(() => { console.log("Async Task"); }, 2000); console.log("End"); 🟢 Step 1: Run "Start" Goes into Call Stack Executes → prints Start Removed 🟡 Step 2: setTimeout Sent to Web APIs Timer starts (2 sec) 👉 JS does NOT wait ❗ 🔵 Step 3: Run "End" Executes immediately Prints End ⏳ Step 4: Timer completes Callback moves to Callback Queue 🔁 Step 5: Event Loop checks 👉 It continuously checks: ✔ “Is Call Stack empty?” If YES → take task from queue Push into Call Stack 🔴 Step 6: Execute callback Prints Async Task ✅ Final Output: Start End Async Task 🎯 Golden Rule (Very Important) 👉Event Loop only pushes tasks to the Call Stack when it is EMPTY 🧑🍳 Real-Life Analogy Chef 👨🍳 example: Cooking = Call Stack Oven = Web APIs Ready dishes = Callback Queue Chef checking → Event Loop 👉 Chef only picks new dish when free ⚡ Why Event Loop is needed? Because JavaScript is: Single-threaded Synchronous by default 👉 Event loop makes it: Non-blocking Efficient 🧾 Final Summary Event Loop manages async execution Works with: Call Stack Web APIs Callback Queue Ensures smooth execution without blocking 💡 One-line takeaway 👉Event Loop allows JavaScript to handle async tasks by running them only when the call stack is free #Javascript #ObjectOrientedProgramming #SoftwareDevelopment
To view or add a comment, sign in
-
What is AstroJS, and why do I love it so much? (Part 3) I believe that AstroJS--and VueJS for that matter--have an incredibly bright future ahead of them. (Which is good news, as I use Astro and Vue in two of my app projects.) In order to understand why, we need to look at Astro and Vue's build tool--Vite. Vite is a modern web development build tool that provides fast, incremental rebuilds and efficient development experiences for your applications. It's a way of building your AstroJS--and VueJS--applications. Now, previously, Vite used JavaScript bundling tools Rollup and ESM-Build. They were slow, and not the most efficient thing in the world, causing build times to be dozens of seconds long in many cases. However, a recent project has now officially turned that on its head. As of March 12, 2026, Vite announced that they had incorporated the new RC version of a new JavaScript build tool--Rolldown, which is a game changer in terms of website load and build times. Rolldown is a significant improvement over the Rollup + ESBuild approach to building an AstroJS or VueJS application. Rolldown is written in Rust--a language that, if you've seen my past posts, is an extremely powerful and performant language for all sorts of different things. This makes Rolldown up to 3000% (or arguably even higher than that!) faster than Rollup. It offers many of the same features as ESBuild, such as Node.js compatible module resolution, CSS bundling, TypeScript / JSX / syntax lowering transforms, etc. The newest version of Vite--Vite 8--swaps out Rollup and ESBuild for Rolldown, providing massive performance gains. AstroJS currently uses Vite 7, but Vite 8 will soon be rolled out to AstroJS versions--it's on the timeline! If you haven't already, I highly recommend trying out an AstroJS + VueJS approach for the frontend of your business web applications. You now have an incredibly powerful frontend at your disposal. Take a look at Rolldown here, and you'll quickly see why it's so powerful: https://rolldown.rs/
To view or add a comment, sign in
-
*🚀 JavaScript Hoisting* Hoisting is one of the most confusing but important concepts in JavaScript. 👉 Hoisting is JavaScript's behavior of moving declarations to top of their scope during execution. *🔹 1. What Gets Hoisted?* - var: Hoisted, initialized as undefined - let: Hoisted, not initialized (TDZ) - const: Hoisted, not initialized (TDZ) - function: Fully hoisted *🔹 2. Variable Hoisting (var)* console.log(x); var x = 5; 👉 Output: undefined 👉 Behind the scenes: var x; console.log(x); // undefined x = 5; *🔹 3. let & const Hoisting (TDZ)* console.log(a); let a = 10; 👉 Output: ReferenceError 👉 Why? Because of Temporal Dead Zone (TDZ) 👉 Variable exists but cannot be accessed before declaration *🔹 4. Function Hoisting* ✅ Function Declaration (Fully Hoisted) greet(); function greet(){ console.log("Hello"); } 👉 Works perfectly ❌ Function Expression (Not Fully Hoisted) greet(); var greet = function(){ console.log("Hello"); } 👉 Output: TypeError: greet is not a function *🔹 5. Temporal Dead Zone (TDZ)* 👉 Time between: Variable hoisted Variable declared During this time → ❌ cannot access variable { console.log(x); // ❌ Error let x = 5; } *🔹 6. Common Mistakes* ❌ Using variables before declaration ❌ Confusing var with let ❌ Assuming all functions behave the same *⭐ Most Important Points* ✅ var → hoisted with undefined ✅ let/const → hoisted but in TDZ ✅ Function declarations → fully hoisted ✅ Function expressions → not fully hoisted *🎯 Quick Summary* - JavaScript moves declarations up, not values - var → usable before declaration (but undefined) - let/const → cannot use before declaration - Functions → behave differently based on type *Double Tap ❤️ For More* #js #js #javascript #js #growaccout #growpage
To view or add a comment, sign in
-
Back to Basics: Building a High-Performance Project in Vanilla JS! Recently, I worked on a project with a very specific client requirement: No Frameworks. Just Vanilla HTML, CSS, and JavaScript. Coming from a React.js background, where everything is component-based and state-managed, going back to the basics was both a challenge and a massive learning experience! Here’s what I realized during this build: The "Manual" Struggle: Managing the DOM manually and handling state without hooks like useState or useEffect definitely feels more "boring" and time-consuming at first. Optimization is a Real Test: Without React’s Virtual DOM, optimizing for speed and performance in plain JS is much harder. It forced me to write cleaner, more efficient scripts to keep the UI snappy. The Power of Control: While React makes everything "easy," Vanilla JS gives you absolute control over every single pixel and event listener. The Lesson? Frameworks like React are productivity powerhouses, but a strong grip on the fundamentals is what makes a developer truly "Future-Proof." It was a great experience delivering exactly what the client needed while sharpening my core engineering skills. Developers, do you think we rely too much on frameworks today? Let’s talk in the comments! 👇 #WebDevelopment #VanillaJS #JavaScript #CodingFundamentals #ClientSuccess #MERNStack #SoftwareEngineering #CareerGrowth
To view or add a comment, sign in
-
🔍 JavaScript Quirk: this behaves differently than you think This is one of the most confusing parts of JavaScript 👇 const user = { name: "Avinash", greet: function () { console.log(this.name); } }; user.greet(); // ? ✅ Output: "Avinash" Here, this refers to the object calling the function. Now look at this 👇 const greet = user.greet; greet(); // ? 💥 Output: undefined Why? Because this is no longer bound to user. In this case, this refers to the global object (or undefined in strict mode). Now the tricky part 👇 const user = { name: "Avinash", greet: () => { console.log(this.name); } }; user.greet(); // ? 💥 Output: undefined Why? Arrow functions don’t have their own this. They inherit it from their surrounding scope. 🚨 NEVER use this inside arrow functions for object methods. 💡 Takeaway: ✔ this depends on HOW a function is called ✔ Regular functions → dynamic this ✔ Arrow functions → lexical this ✔ Arrow + this in methods = bug waiting to happen 👉 Master this = fewer hidden bugs 🔁 Save this for later 💬 Comment "this" if it clicked ❤️ Like if this helped #javascript #frontend #webdevelopment #codingtips #js #developer
To view or add a comment, sign in
-
🧠 JavaScript Event Loop Explained Simply At some point, every frontend developer hears about the Event Loop — but it can feel confusing at first. Here’s a simple way I understand it 👇 JavaScript is single-threaded, which means it can do one thing at a time. But then how does it handle things like: • API calls • setTimeout • user interactions That’s where the Event Loop comes in. 🔹 How it works (simplified) Code runs in the Call Stack Async tasks (like API calls) go to Web APIs Their callbacks move to the Callback Queue The Event Loop pushes them back to the Call Stack when it’s empty 🔹 Why this matters Understanding the event loop helps you: ✅ debug async issues ✅ avoid unexpected behavior ✅ write better async code 🔹 Simple example console.log("Start"); setTimeout(() => { console.log("Async Task"); }, 0); console.log("End"); Output: Start End Async Task Even with 0 delay, async code runs later. 💡 One thing I’ve learned: Understanding how JavaScript works internally makes you a much stronger frontend developer than just using frameworks. Curious to hear from other developers 👇 What concept in JavaScript took you the longest to fully understand? #javascript #frontenddevelopment #webdevelopment #reactjs #softwareengineering #developers
To view or add a comment, sign in
-
-
Mastering Core JavaScript Design Principles: DRY, KISS, and YAGNI Explained Unlock cleaner, more maintainable JavaScript code! Dive into the essential DRY, KISS, and YAGNI design principles and see how to apply them effectively. #JavaScript #SoftwareDesign #CodingTips Read the full post: https://lnkd.in/g_aVkQmE
To view or add a comment, sign in
-
One of the most critical concepts in JavaScript — and a topic that every serious developer must understand to master async behavior. Many developers know how to use setTimeout, Promises, or fetch, but far fewer understand how JavaScript actually executes asynchronous code under the hood. In this post, I’ve broken down the complete JavaScript Asynchronous Execution Model, including the role of the Call Stack, Web APIs, Event Loop, and task queues. Covered in this slide set: 1. Why JavaScript is single-threaded and what that actually means 2. How the Call Stack executes synchronous code line by line 3. How asynchronous tasks are offloaded to Browser Web APIs 4. How completed async tasks move into Callback Queue (Macrotask Queue) 5. How Microtask Queue (Promises) has higher priority than normal callbacks 6. How the Event Loop coordinates everything to keep JavaScript non-blocking Clear explanation of: 1. Why setTimeout(..., 0) still runs after synchronous code 2. Why Promises execute before setTimeout 3. How fetch() integrates with the microtask queue 4. Why infinite microtasks can cause Callback Starvation 5. How the Event Loop constantly monitors the Call Stack Also explains an important rule of async JavaScript: 👉 Execution order is always Call Stack → Microtask Queue → Callback Queue Understanding this model makes it much easier to reason about: 1. Closures 2. Callbacks 3. Promises & async/await 4. React state updates 5. Node.js event-driven architecture These notes focus on execution clarity, interview readiness, and real-world understanding of the JavaScript runtime — not just memorizing behavior. Part of my JavaScript Deep Dive series, where I break down core JS concepts from the engine and runtime perspective. #JavaScript #AsyncJavaScript #EventLoop #WebAPIs #CallStack #MicrotaskQueue #CallbackQueue #Promises #JavaScriptRuntime #FrontendDevelopment #BackendDevelopment #WebDevelopment #MERNStack #NextJS #NestJS #SoftwareEngineering #JavaScriptInterview #DeveloperCommunity #LearnJavaScript #alihassandevnext
To view or add a comment, sign in
-
🔍 JavaScript Behavior You Might Have Seen (Array methods: mutate vs not) You write this: const arr = [1, 2, 3]; const newArr = arr.push(4); console.log(arr); // ? console.log(newArr); // ? You expect: 👉 newArr to be a new array But you get: 👉 arr → [1, 2, 3, 4] 👉 newArr → 4 This happens because of mutating array methods 📌 What does “mutate” mean? 👉 It means changing the original array In this case: 👉 push() modifies arr directly 👉 And returns the new length (not a new array) Now look at this 👇 const arr = [1, 2, 3]; const newArr = arr.map(x => x * 2); console.log(arr); // ? console.log(newArr); // ? 👉 arr → [1, 2, 3] 👉 newArr → [2, 4, 6] This is a non-mutating method 👉 It creates a new array 👉 Original array stays unchanged 📌 Common mutating methods: ✔ push ✔ pop ✔ shift ✔ unshift ✔ splice ✔ sort ✔ reverse 📌 Common non-mutating methods: ✔ map ✔ filter ✔ slice ✔ concat ✔ reduce 📌 Real problem: You think you’re creating a new array… 👉 But you accidentally modify the original one 💡 Takeaway: ✔ Mutating methods change original array ✔ Non-mutating methods return a new array ✔ Always be careful when updating state (especially in React) 👉 One wrong method can break your logic silently 🔁 Save this for later 💬 Comment “array” if this made sense ❤️ Like for more JavaScript deep dives #javascript #frontend #codingtips #webdevelopment #js #developer
To view or add a comment, sign in
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development