Speed Up Your React Apps With Code Splitting

FREE React Hooks Simplified Course: courses.webdevsimplified.com/...
Performance is something people always worry about, especially in React, but oftentimes the bundle size of an application is ignored when doing performance optimization. In this video I want to talk about how you can minimize the bundle size of your application by using code splitting to only download the code you need when you need it.
📚 Materials/References:
FREE React Hooks Simplified Course: courses.webdevsimplified.com/...
🌎 Find Me Here:
My Blog: blog.webdevsimplified.com
My Courses: courses.webdevsimplified.com
Patreon: / webdevsimplified
Twitter: / devsimplified
Discord: / discord
GitHub: github.com/WebDevSimplified
CodePen: codepen.io/WebDevSimplified
⏱️ Timestamps:
00:00 - Introduction
00:25 - Setup
01:11 - What Is Code Splitting
02:39 - Code Splitting A Function
04:30 - Code Splitting Components
10:40 - Conditional Code Splitting
12:52 - Advanced Code Splitting Concepts
#React #WDS #CodeSplitting

Пікірлер: 262

  • @LockeAG4
    @LockeAG4 Жыл бұрын

    7:53 You can always simulate slow connections via Web Console > Network > throttling > Slow3G

  • @pearl911

    @pearl911

    Жыл бұрын

    I was wondering why he didn't do that also because he's already used it in videos such as kzread.info/dash/bejne/jIqpyZhul7qTlsY.html

  • @Flash136

    @Flash136

    Жыл бұрын

    @@pearl911 I'd say using a wait function makes the wait time more deterministic. And you can change the wait time to however long you want.

  • @lleytonmorris6305

    @lleytonmorris6305

    Жыл бұрын

    Thought the exact same thing. Best part IMO of the network tab is the ability to set a custom TTFB which is a very real and practical scenario to test.

  • @victormog

    @victormog

    Жыл бұрын

    Kyle showed an example of a useful Promise 😉

  • @Pete133

    @Pete133

    Жыл бұрын

    That is pretty useful, but for what it's worth doing this particular task with dev tools throttling would have required waiting much longer for react itself to download than for the component to download... the way he did it was actually a lot better for the demonstration.

  • @theyreMineralsMarie
    @theyreMineralsMarie Жыл бұрын

    Asynchronous imports aren't just a cheat code to making your app faster. You should only use it if there are portions of the app that are not needed until the user initiates some process. For example if some component is hidden until the user clicks a button, then you could asynchronously import that component.

  • @gabrielemarino1360

    @gabrielemarino1360

    Жыл бұрын

    There is also a prefetch variable for webpack which download that resource when the engine is idling. It is not quite the same situation but i wanted to point that out

  • @mithunkumar-vm5iw

    @mithunkumar-vm5iw

    Жыл бұрын

    Like lazy loading in angular?

  • @jackykwan6534

    @jackykwan6534

    Жыл бұрын

    @@gabrielemarino1360 this should be better, let the engine do the job for u

  • @Cotita

    @Cotita

    Жыл бұрын

    And why would you not load portions of the app that are not needed yet? Why not just load them from the beginning? To make the app faster, genius.

  • @theyreMineralsMarie

    @theyreMineralsMarie

    Жыл бұрын

    @@Cotita yes but my point was that it's important to know how and why to use this feature. Just throwing around async imports everywhere isn't necessarily going to improve anything.

  • @yadneshkhode3091
    @yadneshkhode3091 Жыл бұрын

    Please bring more videos related to performance improvement, aria, testing related, logging, debugging issues, improving css loading time etc

  • @techjourney2754

    @techjourney2754

    Жыл бұрын

    this guy is a busy guy bro, probably has a full time dev job, he runs his own business and he makes videos, 😂, work ethic i aspire to have

  • @xdmemeguy
    @xdmemeguy Жыл бұрын

    At 07:52 To depict Loading... you don't need to add wait. You can simply open up your console, Go into Network Tab. In the bottom layer, you'll see "No throttling", click that and change it to "Slow 3G" and there you go. You can actually see how your fallback will work when there is a delay in your network.

  • @LilAlbus
    @LilAlbus Жыл бұрын

    The quality of these vids has gone way up over the years man! Well spoken.

  • @kaylee_reed
    @kaylee_reed Жыл бұрын

    That's the best thing ever. I didn't even think that this could be a thing in React at all. Thanks for making this video! 💕

  • @MuhammadAvicena
    @MuhammadAvicena Жыл бұрын

    I always wait for your content about React JS. Thank you for the knowledge 🙏

  • @aarona3144
    @aarona3144 Жыл бұрын

    Kyle, this is a great video. However, I think there are a few additions that would've made it better: 1) In addition to showing files being downloaded piece by piece, demonstrating this using network tab in the dev console would've also be a great way to show people how to also make the most out of the dev console by debugging network latency, Showing them that you're downloading the entire client app in one go versus downloading it bit by bit as the user uses the site over time. 2) Another dev console trick would've been to demo the way emulation of 4g internet works by using the throttling feature in the network tab as well. That wait function is pretty cool but these tools were built for developers in mind. 3) Finally, if you added a build script and built the app, showing people how the bundle was created as just one large js file before lazy loading but after adding lazy loading, it bundles itself into multiple smaller bundles.

  • @lima91rs

    @lima91rs

    Жыл бұрын

    "multiple smaller bundles" - a.k.a. chunks

  • @user-gi6yc5nu6g

    @user-gi6yc5nu6g

    Жыл бұрын

    3 was really missing! thanks :)

  • @xbsidesx

    @xbsidesx

    Жыл бұрын

    Nice suggestions indeed!

  • @filipniklas

    @filipniklas

    Жыл бұрын

    Great suggestions!

  • @JosprimaSihombing
    @JosprimaSihombing Жыл бұрын

    Great video clear explanation and example as usual ⭐

  • @yevhenlysenko7444
    @yevhenlysenko7444 Жыл бұрын

    I watched this lesson 2 month ago, but always try to revise your videos. Thanks!

  • @thesickandwounded
    @thesickandwounded Жыл бұрын

    Always things i've never heard about before. Great stuff!

  • @amauryperalta4364
    @amauryperalta4364 Жыл бұрын

    I loved this video. I understood way better the concept of code splitting. I can now apply this knowledge, Thank you very much Kile😁

  • @Andyclanclanclan
    @Andyclanclanclan Жыл бұрын

    Great video Mr. Simplified. Thank you!

  • @yordanov5.0
    @yordanov5.06 ай бұрын

    Man, you are a true hero! Thank you very very much for the amazing content!

  • @bernhardsmuts2265
    @bernhardsmuts2265 Жыл бұрын

    Great video as always! Keep it up, you're an essential instructor in the Javascript ecosystem 😎

  • @caiocavalcan
    @caiocavalcan Жыл бұрын

    Nicely done friend. I learn so much from your videos. Thank you.

  • @AmanSharma-zw1ht
    @AmanSharma-zw1ht Жыл бұрын

    I was waiting for your new video, hanging around the playlist section .

  • @engelshernandez5898
    @engelshernandez5898 Жыл бұрын

    Great as always. Thank you, Kyle!

  • @nekromenzer
    @nekromenzer Жыл бұрын

    Simply WOW , this may super useful when we working on complex applications

  • @everyonecanbefascist
    @everyonecanbefascist Жыл бұрын

    Learn so many stuff in just 15 mins, thanks a lot.

  • @joe_xyz
    @joe_xyz Жыл бұрын

    I think it's important to note that the helper function at 15:06 will not work in production builds depending on the build tool you're using because the transpiler can't guess ahead of time what you're going to import through that function (Vite even warns you about that). I tested it with Vite + TypeScript (no SWR) and while it does work fine in dev mode, it will not work in production mode. The transpiler doesn't create the imported JS files in the destination directory and the app will try to dynamically import "/assets/components/Something(.js/.ts)" which obviously doesn't exist. Unfortunately, I don't think there's a workaround for this in JS alone, but there could be build plugins for it.

  • @lijason3766

    @lijason3766

    Жыл бұрын

    which means you are expected to leave your code un-bundled as if in dev mode if you are going to use this dynamic import cheat.

  • @nicholasdickrell5118

    @nicholasdickrell5118

    Жыл бұрын

    100% this answer. When you run a large app, the last thing you want is failed to load dynamically imported module clogging up your logging and getting calls from your Bridge.

  • @IAmLesleh

    @IAmLesleh

    Жыл бұрын

    Just pass the import("whatever.js") to the helper function instead of just the filename, problem solved.

  • @botchusaimanoj4597

    @botchusaimanoj4597

    18 күн бұрын

    Thank you so much. i wasted so much time not knowing this.

  • @botchusaimanoj4597

    @botchusaimanoj4597

    18 күн бұрын

    This worked for me function lazyLoad(fileName, isNamed) { return lazy(() => { const promise = import(`./${fileName}`); if (isNamed) { return promise.then(module => ({ default: module[fileName] })); } return promise; }); }

  • @iamasifimam
    @iamasifimam10 ай бұрын

    thankyou for this useful information really appreciate you for this.

  • @xbsidesx
    @xbsidesx Жыл бұрын

    In the lazyLoad function, you don’t really need an else statement since you’re returning from the if. Without an else that would be an else regardless. I know some people prefer verbosity, but that’s actually confusing for some. Great video regardless, you’re a very good communicator!

  • @1Chitus
    @1Chitus Жыл бұрын

    Great video clear explanation and example as usual

  • @praveen_sinnur
    @praveen_sinnur Жыл бұрын

    Explained perfectly. Thank you

  • @clarkdnro
    @clarkdnro Жыл бұрын

    Nice, ive learn something new. Good job

  • @Lion-mh9rq
    @Lion-mh9rq Жыл бұрын

    This is really helpful , thank you!

  • @user-xg3hl3ni2g
    @user-xg3hl3ni2g Жыл бұрын

    Good God, finally a valid explanation of this topic. Thanx a lot sir.

  • @techtalk7671
    @techtalk7671 Жыл бұрын

    Very useful tutorial! Thanks

  • @ravikiranpalaparthi615
    @ravikiranpalaparthi615 Жыл бұрын

    Informative concept. Thanks

  • @ayushpal9704
    @ayushpal97047 ай бұрын

    Great Explanation Bro

  • @webtech7242
    @webtech7242 Жыл бұрын

    Have learned a lot from you bro, ❤️ from Bangladesh

  • @victormog
    @victormog Жыл бұрын

    Very useful and clear!

  • @rajeshdavide
    @rajeshdavide Жыл бұрын

    Great video. You can use both default and named export at the same time, so technically you can use default for the main component that needs to be loaded in the route. I always use both!

  • @tan2cang93

    @tan2cang93

    Жыл бұрын

    indeed, I always use the way like that,

  • @likatest7718

    @likatest7718

    8 ай бұрын

    If i use default should i adding second paraneter in lazyload function?

  • @elton-react-dev
    @elton-react-dev Жыл бұрын

    Amazing video, thanks!!

  • @piyushaggarwal5207
    @piyushaggarwal5207 Жыл бұрын

    I was struggling with permission based access for the user in my app. Things weren't working very well. Now, I think things will be fine when I use the useTransition hook. Great!

  • @atejap
    @atejap Жыл бұрын

    Another awesome video. Tks.

  • @danielradosa
    @danielradosa Жыл бұрын

    Great video, thank you. Splitting stuff into more bits is not just making app faster, but its also good for separation of concerns.

  • @maksymkyryliuk492
    @maksymkyryliuk492 Жыл бұрын

    Thanks for this video. Design is very human, easy to use) Thanks ❤

  • @faldinurikhsan5048
    @faldinurikhsan5048 Жыл бұрын

    as always, great video 👍

  • @shervangh9660
    @shervangh96606 ай бұрын

    tnx for your tipe's bro

  • @alexrusin
    @alexrusin Жыл бұрын

    Great video. Thank you.

  • @guieltorres
    @guieltorres Жыл бұрын

    You are incredible thx for the video ❤

  • @felipecouto9044
    @felipecouto9044 Жыл бұрын

    Great content! 👏

  • @nhutquangphan4160
    @nhutquangphan4160 Жыл бұрын

    I don't know why but somehow I can understand your video with my not really good English. Thank you so much mate !😁

  • @LordBoltagon
    @LordBoltagon Жыл бұрын

    Nice work! 👍🏼

  • @sob515
    @sob515 Жыл бұрын

    You forgot to add this is only suitable for really huge components. If you "lazyload" all the things you are actually slowing down your application at runtime to gain faster load at the start. This way your page/app will become laggy on slower connection speeds and this is not advised in production. It has terrible impact on look&feel. You want your apps to be responsive and snappy even if it loads 0.2s slower at the beginning, you will probably never reload this page (SPA) and most of the things will get cached.

  • @shadowangel8005
    @shadowangel8005 Жыл бұрын

    That's interesting. Qwik is doing something like this. It listens to the global window object then brings in the data when there are actions. It could certainly help bring code down on first load.

  • @JoaoPaulo-ox6pr
    @JoaoPaulo-ox6pr10 ай бұрын

    So useful! My react app was taking long minutes to be loaded it weights something around 700MB, and my computer is a little weak, i thought it could be this, cause, until now, i didn't even know this was possible.

  • @mukulsinghbisht2434
    @mukulsinghbisht2434Ай бұрын

    Thats some real advanced knowledge

  • @jeromealtariba7339
    @jeromealtariba7339 Жыл бұрын

    Excellent, thanks

  • @MatthewWeiler1984
    @MatthewWeiler1984 Жыл бұрын

    Thank you, this is a great feature of React that I wasn't aware of. But when using TypeScript, passing the path to the component into your lazyLoad function doesn't work. But if I changed the lazyLoad function to accept a Promise, then pass into it the import('...') and then the namedExport, it works fine.

  • @solomonowusu-ansah1751
    @solomonowusu-ansah1751 Жыл бұрын

    This was really helpful

  • @abdussametkaradeniz3596
    @abdussametkaradeniz3596 Жыл бұрын

    this video... golden!!!!!!

  • @TrishalWalia
    @TrishalWalia Жыл бұрын

    Great tutorial

  • @yusufaltundal3482
    @yusufaltundal3482 Жыл бұрын

    Incredible 👏

  • @eyobsamuel8722
    @eyobsamuel8722 Жыл бұрын

    Thanks, Kyle. Instead of writing wait promise and more codes (because this is web dev simplified), it was better to use fast or slow 3G throttling from network tab.

  • @pablonavarro2523
    @pablonavarro25232 ай бұрын

    Hi Kyle, TY for the content, very useful videos I usually use Lazy loading and suspense, but something that I didn't fully understand from your video was: What is the difference between using the fallback prop in VS useTransition ?

  • @kristijanlazarev
    @kristijanlazarev3 ай бұрын

    Very great video

  • @firewatermoonsun
    @firewatermoonsun Жыл бұрын

    Excellent!

  • @labhamjain3915
    @labhamjain3915 Жыл бұрын

    Huge love from India Kyle :) ❤️

  • @Ram-sc6or
    @Ram-sc6or10 ай бұрын

    Very helpful

  • @sairfan06
    @sairfan06 Жыл бұрын

    Thanks for an other amazing video, it would be great if you also add link to in description to related blog on your website. thanks

  • @tan2cang93
    @tan2cang93 Жыл бұрын

    I have changed many files from named export to default export in order to apply lazy loading. Then, I found a lib react-lazily which help me do the job. Anyways, thank for sharing the lazyLoading function. cool!

  • @geforcesong
    @geforcesong Жыл бұрын

    excellent stuff

  • @Amine-yx5vc
    @Amine-yx5vc5 ай бұрын

    Code Splitting is Splitting bundle into multiple parts that can be downloaded over time ('lazy loading") . That help us to easy optomize our application , fix real performance issues...

  • @abdulazizmashrabov6399
    @abdulazizmashrabov6399 Жыл бұрын

    useful. thanks

  • @harmez7
    @harmez7 Жыл бұрын

    very very useful

  • @sundersinghaithani7235
    @sundersinghaithani7235 Жыл бұрын

    great video,

  • @ramuramasamy7018
    @ramuramasamy7018 Жыл бұрын

    By the way, you can also simulate slow internet using your chrome browser by setting the network speed in the developer tools.

  • @paperinflames
    @paperinflames11 ай бұрын

    Thanks for sharing your knowledge ❤ Please make videos abour Angular alsoo... Please 😢

  • @Byte-flow
    @Byte-flow3 ай бұрын

    the way you explain >>>>

  • @quamzgraphix9826
    @quamzgraphix9826 Жыл бұрын

    great video

  • @dinghanlim7735
    @dinghanlim7735 Жыл бұрын

    considering its pros, should we always use it? there wasn’t much discussion about its disadvantages so i’m not sure if it’s bad to always split code like that

  • @cyclelife2.076
    @cyclelife2.076 Жыл бұрын

    Thanks from Kerala

  • @valentineedesiriefagene7565
    @valentineedesiriefagene7565 Жыл бұрын

    Thank you

  • @rishiraj2548
    @rishiraj2548 Жыл бұрын

    Thanks a million

  • @jasonhan3854
    @jasonhan3854 Жыл бұрын

    Hm.. for some reason I don't see all the folders as you see on your screen, I only get static folder under localhost and inside the static folder, there's only two folders that is `js` and `media` is there a different setting I need to enable to see folders such as 'src' folder?

  • @willyhorizont8672
    @willyhorizont8672 Жыл бұрын

    Great. I use the lazy Suspense in my router too. But what about error baoundary? How and where to use it?

  • @free2idol1
    @free2idol1 Жыл бұрын

    Thanks!

  • @WebDevSimplified

    @WebDevSimplified

    Жыл бұрын

    You're welcome!

  • @mokkamokka4097
    @mokkamokka4097 Жыл бұрын

    The best!

  • @bulentgercek
    @bulentgercek Жыл бұрын

    Kyle you have a problem your audio output on your videos. Use +0db or not use lower then -2db and alsoe there is audio balancer tools on video editing tools if you worried about audio changes. I just have to turn up the volume almost all the way for your videos and I can't turn anything else on, because any other audio output, video music etc. it's terribly loud.

  • @mustafaebid3800
    @mustafaebid3800 Жыл бұрын

    very useful

  • @FlashLim
    @FlashLim Жыл бұрын

    They are great strategy for specific need, however if u required to do so much of the code splitting on so many components, u might as well go for micro front-end, solve it entirely instead of pieces here and there

  • @govinda399
    @govinda399 Жыл бұрын

    You are awesome. Can you make a small code for login and register pages using fetch, that shows conditional component after login/before login? if you have already made such a video, can you provide a link?

  • @NavySturmGewehr
    @NavySturmGewehr Жыл бұрын

    What's the best way to manage having a significant number of elements? I'm building a react application for myself to do engine ecm editing. The binary is 3.4mb, the json for the parameters is 8mb and there are 17,600 parameters. About 2000 of those are x, xy and xyz tables. Total rendered component count is probably north of 25,000.

  • @hussainbharmal5998
    @hussainbharmal5998 Жыл бұрын

    you can also throttle your network from the chrome dev tools

  • @ekchills6948
    @ekchills6948 Жыл бұрын

    I love you thanks

  • @abdullah5ahmad
    @abdullah5ahmad Жыл бұрын

    I used this in my proj and had some issues, like sometime some components not working properly or styling is not there . I could not know what's the problem because it's some time just work fine . So i ended up returning to normal import.

  • @audujoel1736
    @audujoel17367 ай бұрын

    Nice video

  • @Alessandro-nq3tm
    @Alessandro-nq3tm Жыл бұрын

    Have you ever tried webpack's module federation plugin ?

  • @izyo8146
    @izyo81467 ай бұрын

    Thats basically a Resumable Hydration (Up to 4:25), that is what Qwik is doing under the hood

  • @johnflavian
    @johnflavian Жыл бұрын

    Wow... Thanks a bunch. This will help a lot. There's a project that I'm currently working on; after building it up... One of the main js files is about 24mb... How can I optimise it more... It takes a lot of data and time to load from the web server.

  • @hamishboddy1405
    @hamishboddy14052 ай бұрын

    Hey everyone! I found that when you use the `lazyLoad()` function that Kyle created, vite cannot analyze the dynamic path for the import and therefore will not be able to properly build the js and file paths for these components when you run the build command. To get around this I found that you can pass the whole import function into the custom function like this `lazyLoad(import('./components/AdminData.jsx'), 'AdminData')` and use that instead of assigning the promise variable. This keeps the import path static so vite can work with it during build time. `export const lazyLoad = (importCall, namedExport) => { return lazy(() => { if (namedExport == null) return importCall; return importCall.then(module => ({ default: module[namedExport] })); }); }`

  • @husler7424
    @husler7424 Жыл бұрын

    Do i need to make imports in all files lazy loading? (i.e. passing into the lazy component as a callback) or just import lazily imports of App.js file? Can you please elaborate?

  • @Richard_Nixon-mr6rq
    @Richard_Nixon-mr6rq Жыл бұрын

    Could you make some videos about node.js eventemmiters, the resources for them have always sucked

  • @mirazking7694
    @mirazking7694 Жыл бұрын

    That's why we Use Nextjs For production ready app.

  • @germain1984
    @germain1984 Жыл бұрын

    Is the lazy method in your routing example used by the Next.js team when using the component?

  • @Knight0wI
    @Knight0wI Жыл бұрын

    so if I lazy load context subscribers, it won't re-render all the context subscribers, when the context update?

  • @prabeshhumagain1008
    @prabeshhumagain10083 ай бұрын

    What if I want to lazily load home and store together and about separately ? During build phase, home, store and about is broken down into different js file. Is there a way, we can consolidate home and store together in a single js file and about in different js file?