",{"type":30,"value":311}," déclenche cet appel, récupère le HTML et l’insère dans le DOM.",{"type":17,"tag":51,"props":313,"children":314},{},[315,320],{"type":17,"tag":39,"props":316,"children":317},{},[318],{"type":30,"value":319},"Si c’est un “pure server component”",{"type":30,"value":321},", aucun JS n’est chargé côté client, donc pas d’hydratation.",{"type":17,"tag":51,"props":323,"children":324},{},[325],{"type":30,"value":326},"On peut faire d’autres scénarios (ex. re-fetcher le composant si des props changent).",{"type":17,"tag":276,"props":328,"children":330},{"id":329},"_32-différence-server-component-vs-island",[331],{"type":30,"value":332},"3.2 Différence “Server Component” vs “Island”",{"type":17,"tag":83,"props":334,"children":335},{},[336,398],{"type":17,"tag":51,"props":337,"children":338},{},[339,344,346,352,354],{"type":17,"tag":39,"props":340,"children":341},{},[342],{"type":30,"value":343},"Server Component",{"type":30,"value":345}," (suffixe ",{"type":17,"tag":291,"props":347,"children":349},{"className":348},[],[350],{"type":30,"value":351},".server.vue",{"type":30,"value":353},") :",{"type":17,"tag":83,"props":355,"children":356},{},[357,368,373,386],{"type":17,"tag":51,"props":358,"children":359},{},[360,362,367],{"type":30,"value":361},"Se comporte comme un composant Vue classique, mais ",{"type":17,"tag":39,"props":363,"children":364},{},[365],{"type":30,"value":366},"rendu côté serveur uniquement",{"type":30,"value":115},{"type":17,"tag":51,"props":369,"children":370},{},[371],{"type":30,"value":372},"Pas de JS envoyé au client, pas d’hydratation.",{"type":17,"tag":51,"props":374,"children":375},{},[376,378,384],{"type":30,"value":377},"On peut utiliser des APIs 100% côté serveur (",{"type":17,"tag":291,"props":379,"children":381},{"className":380},[],[382],{"type":30,"value":383},"useRuntimeConfig()",{"type":30,"value":385},", requêtes directes à la DB, etc.).",{"type":17,"tag":51,"props":387,"children":388},{},[389,391,397],{"type":30,"value":390},"Se déclare habituellement dans ",{"type":17,"tag":291,"props":392,"children":394},{"className":393},[],[395],{"type":30,"value":396},"components/xxx.server.vue",{"type":30,"value":115},{"type":17,"tag":51,"props":399,"children":400},{},[401,406,408,414,415],{"type":17,"tag":39,"props":402,"children":403},{},[404],{"type":30,"value":405},"Island",{"type":30,"value":407}," (dans ",{"type":17,"tag":291,"props":409,"children":411},{"className":410},[],[412],{"type":30,"value":413},"components/islands/",{"type":30,"value":353},{"type":17,"tag":83,"props":416,"children":417},{},[418,429],{"type":17,"tag":51,"props":419,"children":420},{},[421,423,428],{"type":30,"value":422},"On l’appelle via ",{"type":17,"tag":291,"props":424,"children":426},{"className":425},[],[427],{"type":30,"value":309},{"type":30,"value":115},{"type":17,"tag":51,"props":430,"children":431},{},[432,434,439],{"type":30,"value":433},"Permet d’",{"type":17,"tag":39,"props":435,"children":436},{},[437],{"type":30,"value":438},"isoler",{"type":30,"value":440}," l’exécution d’un composant (qui peut lui-même être “server only”) avec, potentiellement, la possibilité de rechargements, de mises en cache, etc.",{"type":17,"tag":276,"props":442,"children":444},{"id":443},"_33-principales-fonctionnalités-déjà-disponibles",[445],{"type":30,"value":446},"3.3 Principales fonctionnalités déjà disponibles",{"type":17,"tag":83,"props":448,"children":449},{},[450,460,470,487],{"type":17,"tag":51,"props":451,"children":452},{},[453,458],{"type":17,"tag":39,"props":454,"children":455},{},[456],{"type":30,"value":457},"Slots",{"type":30,"value":459}," (depuis Nuxt 3.4) : passer du contenu parent (potentiellement interactif) vers un composant serveur.",{"type":17,"tag":51,"props":461,"children":462},{},[463,468],{"type":17,"tag":39,"props":464,"children":465},{},[466],{"type":30,"value":467},"Payload cache",{"type":30,"value":469}," : mémoriser la réponse du composant serveur avec des props identiques.",{"type":17,"tag":51,"props":471,"children":472},{},[473,478,480,485],{"type":17,"tag":39,"props":474,"children":475},{},[476],{"type":30,"value":477},"Remote Islands",{"type":30,"value":479}," (Nuxt 3.7) : on peut rendre une île via un ",{"type":17,"tag":39,"props":481,"children":482},{},[483],{"type":30,"value":484},"autre serveur",{"type":30,"value":486}," (distant) si celui-ci renvoie le format attendu (ex. un CMS headless), ce qui ouvre la porte à une architecture distribuée.",{"type":17,"tag":51,"props":488,"children":489},{},[490,499,501,507],{"type":17,"tag":39,"props":491,"children":492},{},[493],{"type":17,"tag":291,"props":494,"children":496},{"className":495},[],[497],{"type":30,"value":498},"\u003Cnext-client>",{"type":30,"value":500}," (bientôt en 3.8) : rendre un sous-composant réellement “client side” dans une île, si on veut une petite partie interactive (ex. ",{"type":17,"tag":291,"props":502,"children":504},{"className":503},[],[505],{"type":30,"value":506},"NuxtLink",{"type":30,"value":508},").",{"type":17,"tag":72,"props":510,"children":511},{},[],{"type":17,"tag":76,"props":513,"children":515},{"id":514},"_4-avantages",[516],{"type":30,"value":517},"4. Avantages",{"type":17,"tag":83,"props":519,"children":520},{},[521,531,541],{"type":17,"tag":51,"props":522,"children":523},{},[524,529],{"type":17,"tag":39,"props":525,"children":526},{},[527],{"type":30,"value":528},"Moins de JavaScript",{"type":30,"value":530}," à charger et exécuter côté client pour les blocs “statiques” (pur SSR).",{"type":17,"tag":51,"props":532,"children":533},{},[534,539],{"type":17,"tag":39,"props":535,"children":536},{},[537],{"type":30,"value":538},"Performance",{"type":30,"value":540}," améliorée : on évite la double-exécution “SSR + client” pour les composants non interactifs.",{"type":17,"tag":51,"props":542,"children":543},{},[544,549],{"type":17,"tag":39,"props":545,"children":546},{},[547],{"type":30,"value":548},"Sécurité",{"type":30,"value":550}," : on peut directement utiliser des API côté serveur sans exposer des secrets au client.",{"type":17,"tag":72,"props":552,"children":553},{},[],{"type":17,"tag":76,"props":555,"children":557},{"id":556},"_5-roadmap",[558],{"type":30,"value":559},"5. Roadmap",{"type":17,"tag":83,"props":561,"children":562},{},[563,576,586],{"type":17,"tag":51,"props":564,"children":565},{},[566,568,574],{"type":30,"value":567},"Stabilisation de l’API (slots, ",{"type":17,"tag":291,"props":569,"children":571},{"className":570},[],[572],{"type":30,"value":573},"IslandResponse",{"type":30,"value":575},"…) : certains aspects sont encore en phase “expérimentale”.",{"type":17,"tag":51,"props":577,"children":578},{},[579,584],{"type":17,"tag":39,"props":580,"children":581},{},[582],{"type":30,"value":583},"Server-only",{"type":30,"value":585}," dans un composant mixte : pouvoir définir une portion du template comme “server only” (ex. un bloc lourd de Markdown, le reste est hydraté).",{"type":17,"tag":51,"props":587,"children":588},{},[589,591,596,598,604],{"type":30,"value":590},"“",{"type":17,"tag":39,"props":592,"children":593},{},[594],{"type":30,"value":595},"Deep client components",{"type":30,"value":597},"” : marquer spécifiquement un sous-composant comme interactif (",{"type":17,"tag":291,"props":599,"children":601},{"className":600},[],[602],{"type":30,"value":603},"\u003CFoo nuxt-client>",{"type":30,"value":605},"), même s’il est dans une “island”.",{"type":17,"tag":72,"props":607,"children":608},{},[],{"type":17,"tag":76,"props":610,"children":612},{"id":611},"conclusion",[613],{"type":30,"value":614},"Conclusion",{"type":17,"tag":33,"props":616,"children":617},{},[618,619,624,626,631,633,638,640,645,647,653],{"type":30,"value":184},{"type":17,"tag":39,"props":620,"children":621},{},[622],{"type":30,"value":623},"composants serveur",{"type":30,"value":625}," et l’",{"type":17,"tag":39,"props":627,"children":628},{},[629],{"type":30,"value":630},"architecture Islands",{"type":30,"value":632}," de Nuxt répondent à la volonté de rendre un site plus ",{"type":17,"tag":39,"props":634,"children":635},{},[636],{"type":30,"value":637},"rapide",{"type":30,"value":639}," et ",{"type":17,"tag":39,"props":641,"children":642},{},[643],{"type":30,"value":644},"léger",{"type":30,"value":646}," côté client, tout en bénéficiant d’un SSR flexible. C’est en cours d’évolution (avec des attributs ",{"type":17,"tag":291,"props":648,"children":650},{"className":649},[],[651],{"type":30,"value":652},"nuxt-client",{"type":30,"value":654},", la gestion de slots, etc.), mais déjà fonctionnel dans Nuxt 3. L’implémentation continuera de s’affiner, permettant de mieux scinder l’app en “îlots” : certains 100% serveur, d’autres 100% client, et d’autres encore un mix des deux.",{"title":8,"searchDepth":656,"depth":656,"links":657},2,[658],{"id":27,"depth":656,"text":31,"children":659},[660,662,663,664,665,666],{"id":78,"depth":661,"text":81},3,{"id":138,"depth":661,"text":141},{"id":241,"depth":661,"text":244},{"id":514,"depth":661,"text":517},{"id":556,"depth":661,"text":559},{"id":611,"depth":661,"text":614},"markdown","content:talks:nuxt-islands-julien-huang-vue-js-paris-24.md","content","talks/nuxt-islands-julien-huang-vue-js-paris-24.md","talks/nuxt-islands-julien-huang-vue-js-paris-24","md",{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"videoId":11,"date":12,"body":674,"_type":667,"_id":668,"_source":669,"_file":670,"_stem":671,"_extension":672},{"type":14,"children":675,"toc":1171},[676],{"type":17,"tag":18,"props":677,"children":678},{":video-id":20,":video-title":21,":video-description":22},[679,683,692,711,714,718,757,760,764,840,843,847,856,871,875,910,914,1003,1007,1057,1060,1064,1091,1094,1098,1134,1137,1141],{"type":17,"tag":25,"props":680,"children":681},{"id":27},[682],{"type":30,"value":31},{"type":17,"tag":33,"props":684,"children":685},{},[686,687,691],{"type":30,"value":37},{"type":17,"tag":39,"props":688,"children":689},{},[690],{"type":30,"value":43},{"type":30,"value":45},{"type":17,"tag":47,"props":693,"children":694},{},[695,703],{"type":17,"tag":51,"props":696,"children":697},{},[698,702],{"type":17,"tag":39,"props":699,"children":700},{},[701],{"type":30,"value":58},{"type":30,"value":60},{"type":17,"tag":51,"props":704,"children":705},{},[706,710],{"type":17,"tag":39,"props":707,"children":708},{},[709],{"type":30,"value":68},{"type":30,"value":70},{"type":17,"tag":72,"props":712,"children":713},{},[],{"type":17,"tag":76,"props":715,"children":716},{"id":78},[717],{"type":30,"value":81},{"type":17,"tag":83,"props":719,"children":720},{},[721,744,753],{"type":17,"tag":51,"props":722,"children":723},{},[724,728,729,733,734,738,739,743],{"type":17,"tag":39,"props":725,"children":726},{},[727],{"type":30,"value":43},{"type":30,"value":94},{"type":17,"tag":39,"props":730,"children":731},{},[732],{"type":30,"value":99},{"type":30,"value":101},{"type":17,"tag":39,"props":735,"children":736},{},[737],{"type":30,"value":106},{"type":30,"value":108},{"type":17,"tag":39,"props":740,"children":741},{},[742],{"type":30,"value":113},{"type":30,"value":115},{"type":17,"tag":51,"props":745,"children":746},{},[747,748,752],{"type":30,"value":120},{"type":17,"tag":39,"props":749,"children":750},{},[751],{"type":30,"value":125},{"type":30,"value":127},{"type":17,"tag":51,"props":754,"children":755},{},[756],{"type":30,"value":132},{"type":17,"tag":72,"props":758,"children":759},{},[],{"type":17,"tag":76,"props":761,"children":762},{"id":138},[763],{"type":30,"value":141},{"type":17,"tag":47,"props":765,"children":766},{},[767,804],{"type":17,"tag":51,"props":768,"children":769},{},[770,774],{"type":17,"tag":39,"props":771,"children":772},{},[773],{"type":30,"value":152},{"type":17,"tag":83,"props":775,"children":776},{},[777,786,795],{"type":17,"tag":51,"props":778,"children":779},{},[780,781,785],{"type":30,"value":160},{"type":17,"tag":39,"props":782,"children":783},{},[784],{"type":30,"value":165},{"type":30,"value":167},{"type":17,"tag":51,"props":787,"children":788},{},[789,790,794],{"type":30,"value":172},{"type":17,"tag":39,"props":791,"children":792},{},[793],{"type":30,"value":177},{"type":30,"value":179},{"type":17,"tag":51,"props":796,"children":797},{},[798,799,803],{"type":30,"value":184},{"type":17,"tag":39,"props":800,"children":801},{},[802],{"type":30,"value":189},{"type":30,"value":191},{"type":17,"tag":51,"props":805,"children":806},{},[807,811],{"type":17,"tag":39,"props":808,"children":809},{},[810],{"type":30,"value":199},{"type":17,"tag":83,"props":812,"children":813},{},[814,818,827],{"type":17,"tag":51,"props":815,"children":816},{},[817],{"type":30,"value":207},{"type":17,"tag":51,"props":819,"children":820},{},[821,822,826],{"type":30,"value":212},{"type":17,"tag":39,"props":823,"children":824},{},[825],{"type":30,"value":217},{"type":30,"value":219},{"type":17,"tag":51,"props":828,"children":829},{},[830,834,835,839],{"type":17,"tag":39,"props":831,"children":832},{},[833],{"type":30,"value":58},{"type":30,"value":228},{"type":17,"tag":39,"props":836,"children":837},{},[838],{"type":30,"value":233},{"type":30,"value":235},{"type":17,"tag":72,"props":841,"children":842},{},[],{"type":17,"tag":76,"props":844,"children":845},{"id":241},[846],{"type":30,"value":244},{"type":17,"tag":33,"props":848,"children":849},{},[850,851,855],{"type":30,"value":249},{"type":17,"tag":39,"props":852,"children":853},{},[854],{"type":30,"value":254},{"type":30,"value":256},{"type":17,"tag":83,"props":857,"children":858},{},[859,867],{"type":17,"tag":51,"props":860,"children":861},{},[862,866],{"type":17,"tag":39,"props":863,"children":864},{},[865],{"type":30,"value":267},{"type":30,"value":269},{"type":17,"tag":51,"props":868,"children":869},{},[870],{"type":30,"value":274},{"type":17,"tag":276,"props":872,"children":873},{"id":278},[874],{"type":30,"value":281},{"type":17,"tag":83,"props":876,"children":877},{},[878,888,898,906],{"type":17,"tag":51,"props":879,"children":880},{},[881,882,887],{"type":30,"value":289},{"type":17,"tag":291,"props":883,"children":885},{"className":884},[],[886],{"type":30,"value":296},{"type":30,"value":298},{"type":17,"tag":51,"props":889,"children":890},{},[891,892,897],{"type":30,"value":303},{"type":17,"tag":291,"props":893,"children":895},{"className":894},[],[896],{"type":30,"value":309},{"type":30,"value":311},{"type":17,"tag":51,"props":899,"children":900},{},[901,905],{"type":17,"tag":39,"props":902,"children":903},{},[904],{"type":30,"value":319},{"type":30,"value":321},{"type":17,"tag":51,"props":907,"children":908},{},[909],{"type":30,"value":326},{"type":17,"tag":276,"props":911,"children":912},{"id":329},[913],{"type":30,"value":332},{"type":17,"tag":83,"props":915,"children":916},{},[917,967],{"type":17,"tag":51,"props":918,"children":919},{},[920,924,925,930,931],{"type":17,"tag":39,"props":921,"children":922},{},[923],{"type":30,"value":343},{"type":30,"value":345},{"type":17,"tag":291,"props":926,"children":928},{"className":927},[],[929],{"type":30,"value":351},{"type":30,"value":353},{"type":17,"tag":83,"props":932,"children":933},{},[934,943,947,957],{"type":17,"tag":51,"props":935,"children":936},{},[937,938,942],{"type":30,"value":361},{"type":17,"tag":39,"props":939,"children":940},{},[941],{"type":30,"value":366},{"type":30,"value":115},{"type":17,"tag":51,"props":944,"children":945},{},[946],{"type":30,"value":372},{"type":17,"tag":51,"props":948,"children":949},{},[950,951,956],{"type":30,"value":377},{"type":17,"tag":291,"props":952,"children":954},{"className":953},[],[955],{"type":30,"value":383},{"type":30,"value":385},{"type":17,"tag":51,"props":958,"children":959},{},[960,961,966],{"type":30,"value":390},{"type":17,"tag":291,"props":962,"children":964},{"className":963},[],[965],{"type":30,"value":396},{"type":30,"value":115},{"type":17,"tag":51,"props":968,"children":969},{},[970,974,975,980,981],{"type":17,"tag":39,"props":971,"children":972},{},[973],{"type":30,"value":405},{"type":30,"value":407},{"type":17,"tag":291,"props":976,"children":978},{"className":977},[],[979],{"type":30,"value":413},{"type":30,"value":353},{"type":17,"tag":83,"props":982,"children":983},{},[984,994],{"type":17,"tag":51,"props":985,"children":986},{},[987,988,993],{"type":30,"value":422},{"type":17,"tag":291,"props":989,"children":991},{"className":990},[],[992],{"type":30,"value":309},{"type":30,"value":115},{"type":17,"tag":51,"props":995,"children":996},{},[997,998,1002],{"type":30,"value":433},{"type":17,"tag":39,"props":999,"children":1000},{},[1001],{"type":30,"value":438},{"type":30,"value":440},{"type":17,"tag":276,"props":1004,"children":1005},{"id":443},[1006],{"type":30,"value":446},{"type":17,"tag":83,"props":1008,"children":1009},{},[1010,1018,1026,1039],{"type":17,"tag":51,"props":1011,"children":1012},{},[1013,1017],{"type":17,"tag":39,"props":1014,"children":1015},{},[1016],{"type":30,"value":457},{"type":30,"value":459},{"type":17,"tag":51,"props":1019,"children":1020},{},[1021,1025],{"type":17,"tag":39,"props":1022,"children":1023},{},[1024],{"type":30,"value":467},{"type":30,"value":469},{"type":17,"tag":51,"props":1027,"children":1028},{},[1029,1033,1034,1038],{"type":17,"tag":39,"props":1030,"children":1031},{},[1032],{"type":30,"value":477},{"type":30,"value":479},{"type":17,"tag":39,"props":1035,"children":1036},{},[1037],{"type":30,"value":484},{"type":30,"value":486},{"type":17,"tag":51,"props":1040,"children":1041},{},[1042,1050,1051,1056],{"type":17,"tag":39,"props":1043,"children":1044},{},[1045],{"type":17,"tag":291,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":30,"value":498},{"type":30,"value":500},{"type":17,"tag":291,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":30,"value":506},{"type":30,"value":508},{"type":17,"tag":72,"props":1058,"children":1059},{},[],{"type":17,"tag":76,"props":1061,"children":1062},{"id":514},[1063],{"type":30,"value":517},{"type":17,"tag":83,"props":1065,"children":1066},{},[1067,1075,1083],{"type":17,"tag":51,"props":1068,"children":1069},{},[1070,1074],{"type":17,"tag":39,"props":1071,"children":1072},{},[1073],{"type":30,"value":528},{"type":30,"value":530},{"type":17,"tag":51,"props":1076,"children":1077},{},[1078,1082],{"type":17,"tag":39,"props":1079,"children":1080},{},[1081],{"type":30,"value":538},{"type":30,"value":540},{"type":17,"tag":51,"props":1084,"children":1085},{},[1086,1090],{"type":17,"tag":39,"props":1087,"children":1088},{},[1089],{"type":30,"value":548},{"type":30,"value":550},{"type":17,"tag":72,"props":1092,"children":1093},{},[],{"type":17,"tag":76,"props":1095,"children":1096},{"id":556},[1097],{"type":30,"value":559},{"type":17,"tag":83,"props":1099,"children":1100},{},[1101,1111,1119],{"type":17,"tag":51,"props":1102,"children":1103},{},[1104,1105,1110],{"type":30,"value":567},{"type":17,"tag":291,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":30,"value":573},{"type":30,"value":575},{"type":17,"tag":51,"props":1112,"children":1113},{},[1114,1118],{"type":17,"tag":39,"props":1115,"children":1116},{},[1117],{"type":30,"value":583},{"type":30,"value":585},{"type":17,"tag":51,"props":1120,"children":1121},{},[1122,1123,1127,1128,1133],{"type":30,"value":590},{"type":17,"tag":39,"props":1124,"children":1125},{},[1126],{"type":30,"value":595},{"type":30,"value":597},{"type":17,"tag":291,"props":1129,"children":1131},{"className":1130},[],[1132],{"type":30,"value":603},{"type":30,"value":605},{"type":17,"tag":72,"props":1135,"children":1136},{},[],{"type":17,"tag":76,"props":1138,"children":1139},{"id":611},[1140],{"type":30,"value":614},{"type":17,"tag":33,"props":1142,"children":1143},{},[1144,1145,1149,1150,1154,1155,1159,1160,1164,1165,1170],{"type":30,"value":184},{"type":17,"tag":39,"props":1146,"children":1147},{},[1148],{"type":30,"value":623},{"type":30,"value":625},{"type":17,"tag":39,"props":1151,"children":1152},{},[1153],{"type":30,"value":630},{"type":30,"value":632},{"type":17,"tag":39,"props":1156,"children":1157},{},[1158],{"type":30,"value":637},{"type":30,"value":639},{"type":17,"tag":39,"props":1161,"children":1162},{},[1163],{"type":30,"value":644},{"type":30,"value":646},{"type":17,"tag":291,"props":1166,"children":1168},{"className":1167},[],[1169],{"type":30,"value":652},{"type":30,"value":654},{"title":8,"searchDepth":656,"depth":656,"links":1172},[1173],{"id":27,"depth":656,"text":31,"children":1174},[1175,1176,1177,1178,1179,1180],{"id":78,"depth":661,"text":81},{"id":138,"depth":661,"text":141},{"id":241,"depth":661,"text":244},{"id":514,"depth":661,"text":517},{"id":556,"depth":661,"text":559},{"id":611,"depth":661,"text":614},["Reactive",1182],{"$scolor-mode":1183},{"preference":1184,"value":1184,"unknown":1185,"forced":7},"system",true,["Set"],["ShallowReactive",1188],{"content-${path}":-1,"content-query-JTlqNwzzqf":-1}]