DEV Community

Vijay Pagare
Vijay Pagare

Posted on

Common mistake to avoid while loading a file synchronously using script tag

You might think that loading a script synchronously would make the next line of code execute after the script has downloaded, right? But that's not what synchronous loading of javascript file means. The confusion arises when you're comparing async vs sync vs defer strategies of loading a particular file.

More on loading a javascript file in async vs sync vs defer manner at the end of the post.

Here we first talk w.r.t code execution. To execute the lines of code after the script has downloaded successfully, you can use onload attribute on script tag. Refer the code snippet below:

<html>

<head>
    <title>Sync Script Tag</title>
</head>

<body>
    <h1>Load script sync.</h1>
</body>
<script>
    function  afterLoad() {        
        console.log('script loaded successfully.') // executes after script has loaded   
    }    
    function  sync_load()  {        
        console.log('sync_load...')         
        var  s  =  document.createElement('script');        
        s.type  =  'text/javascript';        
        s.async  =  false; // load synchronously       
        s.onload  =  afterLoad;        
        s.src  =  "https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js";        
        var  x  =  document.getElementsByTagName('script')[0];        
        x.parentNode.insertBefore(s,  x);            
    }    
    console.log('JS entry')     
    sync_load();    
    console.log('next tick') // this executes before after_load 
</script>

</html>

Enter fullscreen mode Exit fullscreen mode

Output:

Output for the above code

Now, coming back to async vs sync vs defer strategy, please refer to the image below via stackoverflow:

JS loading explained - sync vs async vs defer

In this case, the difference between async vs sync comes into play w.r.t parsing HTML file. Remember that!

Happy coding ✨

Top comments (0)