Essayez de charger vos JS de manière non bloquantes.
- Si votre script est modulaire et ne dépend d'aucun autre script utilisez
async - Si votre script depend d'un autre script ou d'autre script dépendent de lui utilisez
defer - Si votre script est légé et que des scripts chargés en
asyncdépendent de lui chargez le dans le document (inline)
$.getScript("somescript.js", function(){
alert("Script loaded and executed.");
});
D'autres solutions existent découvrez ces JavaScripts loader require.js / head.js
Peut importe où vous placez votre CSS (header / footer) il bloquera l'affichage ( rien ne sera affiché à l'écran tant que le CSS n'est pas complètement chargé). Il existe des pistes d'optimisation.

Vous pouvez utiliser critical pour faire l'extraction.
Installez le module:
npm install --save critical
Copiez coller cela dans le fichier de votre choix (ici app.js)
// app.js
var critical = require('critical');
critical.generate({
src: 'https://www.example.com', // url
dest: 'critical.css', // fichier de destination
width: 412, // largeur de la fenêtre
height: 732 // hauteur
});Puis tapez node app.js (si votre fichier se nomme app.js)
Vous allez normalement récupérer le css critique dans critical.css
exemple en php <style><?php include("css/critical.css");?></style>
Pour charger le CSS critique en async vous pouvez utiliser la librairie loadCss
Chargez la librairie loadCss.js
Puis chargez vos CSS non critique de cette manière :
loadCSS( "path/to/mystylesheet.css" );
