Fonction de rendu côté serveur Vue.js et ASP.NET Core
Utilisez Vue.js sur le front-end, le rendu côté serveur Vue n'était pas pris en charge jusqu'à la deuxième version. Dans cet exemple, je souhaite montrer comment intégrer la fonctionnalité de rendu côté serveur Vue.js avec ASP.NET Core. Côté serveur, nous avons utilisé le package Microsoft.AspNetCore.SpaServices, qui fournit l'API ASP.NET Core afin que nous puissions utiliser des informations contextuelles pour appeler le code JavaScript hébergé par Node.js et injecter la chaîne HTML résultante dans la page rendue.
Dans cet exemple, l'application affichera une liste de messages et le serveur n'affichera que les deux derniers messages (triés par date). Les messages restants peuvent être téléchargés depuis le serveur en cliquant sur le bouton « Obtenir un message ».
La structure du projet est la suivante :
. ├── VuejsSSRSample | ├── Properties | ├── References | ├── wwwroot | └── Dependencies ├── Controllers | └── HomeController.cs ├── Models | ├── ClientState.cs | ├── FakeMessageStore.cs | └── Message.cs ├── Views | ├── Home | | └── Index.cshtml | └── _ViewImports.cshtml ├── VueApp | ├── components | | ├── App.vue | | └── Message.vue | ├── vuex | | ├── actions.js | | └── store.js | ├── app.js | ├── client.js | ├── renderOnServer.js | └── server.js ├── .babelrc ├── appsettings.json ├── Dockerfile ├── packages.json ├── Program.cs ├── project.json ├── Startup.cs ├── web.config ├── webpack.client.config.js └── webpack.server.config.js
Comme vous pouvez le voir, l'application Vue se trouve sous le dossier VueApp et comporte deux composants. , Un simple magasin Vuex contenant une mutation et une action et quelques autres fichiers dont nous parlerons ensuite : app.js, client.js, renderOnServer.js, server.js.
Implémentation du rendu côté serveur Vue.js
Pour utiliser côté serveur Pour le rendu, nous devons créer deux bundles différents à partir de l'application Vue : un pour le côté serveur (exécuté par Node.js) et un autre pour l'application hybride qui s'exécutera dans le navigateur et sur le client.
app.js
Amorce l'instance Vue dans ce module. Il est utilisé par les deux bundles.
import Vue from 'vue'; import App from './components/App.vue'; import store from './vuex/store.js'; const app = new Vue({ store, ...App }); export { app, store };
server.js
Le point d'entrée de ce bundle de serveur exporte une fonction, qui a un attribut de contexte, peut être utilisé pour transmettre toutes les données de l'appel de rendu.
client.js
Le point d'entrée du bundle client, qui remplace le store par un objet Javascript global nommé INITIAL_STATE (qui sera créé par le pré-rendu module) état actuel et monte l'application sur l'élément spécifié (.my-app).
import { app, store } from './app'; store.replaceState(__INITIAL_STATE__); app.$mount('.my-app');
Configuration du Webpack
Afin de créer le bundle, nous devons ajouter deux Fichiers de configuration Webpack (un pour le serveur et un pour la version client) N'oubliez pas d'installer Webpack si vous ne l'avez pas déjà fait : npm install -g webpack.
webpack.server.config.js const path = require('path'); module.exports = { target: 'node', entry: path.join(__dirname, 'VueApp/server.js'), output: { libraryTarget: 'commonjs2', path: path.join(__dirname, 'wwwroot/dist'), filename: 'bundle.server.js', }, module: { loaders: [ { test: /\.vue$/, loader: 'vue', }, { test: /\.js$/, loader: 'babel', include: __dirname, exclude: /node_modules/ }, { test: /\.json?$/, loader: 'json' } ] }, }; webpack.client.config.js const path = require('path'); module.exports = { entry: path.join(__dirname, 'VueApp/client.js'), output: { path: path.join(__dirname, 'wwwroot/dist'), filename: 'bundle.client.js', }, module: { loaders: [ { test: /\.vue$/, loader: 'vue', }, { test: /\.js$/, loader: 'babel', include: __dirname, exclude: /node_modules/ }, ] }, };
Exécutez webpack --config webpack.server.config.js Si l'opération réussit, vous pouvez trouver le service dans /wwwroot/dist/bundle. bundle de terminaux server.js. Pour obtenir le bundle client, veuillez exécuter webpack --config webpack.client.config.js. Le résultat correspondant se trouve dans /wwwroot/dist/bundle.client.js.
Implémentation du rendu groupé
Ce module sera exécuté par ASP.NET Core, qui est responsable de :
Le rendu celui que nous avons créé avant Le bundle serveur
définit **window.__ INITIAL_STATE__** sur l'objet envoyé depuis le serveur
process.env.VUE_ENV = 'server'; const fs = require('fs'); const path = require('path'); const filePath = path.join(__dirname, '../wwwroot/dist/bundle.server.js') const code = fs.readFileSync(filePath, 'utf8'); const bundleRenderer = require('vue-server-renderer').createBundleRenderer(code) module.exports = function (params) { return new Promise(function (resolve, reject) { bundleRenderer.renderToString(params.data, (err, resultHtml) => { // params.data is the store's initial state. Sent by the asp-prerender-data attribute if (err) { reject(err.message); } resolve({ html: resultHtml, globals: { __INITIAL_STATE__: params.data // window.__INITIAL_STATE__ will be the initial state of the Vuex store } }); }); }); };
Implémentation de la partie ASP.NET Core
Comme mentionné précédemment, nous avons utilisé le package Microsoft.AspNetCore.SpaServices, qui fournit des TagHelpers pour appeler facilement le Javascript hébergé par Node.js ( dans les coulisses, SpaServices utilise le package Microsoft.AspNetCore.NodeServices pour exécuter Javascript).
Views/_ViewImports.cshtml
Pour utiliser les TagHelpers de SpaServices, nous devons les ajouter à _ViewImports.
@addTagHelper "*, Microsoft.AspNetCore.SpaServices" Home/Index public IActionResult Index() { var initialMessages = FakeMessageStore.FakeMessages.OrderByDescending(m => m.Date).Take(2); var initialValues = new ClientState() { Messages = initialMessages, LastFetchedMessageDate = initialMessages.Last().Date }; return View(initialValues); }
Il récupère les deux derniers messages (triés par date dans l'ordre inverse) du MessageStore (certaines données statiques uniquement à des fins de démonstration) et crée un objet ClientState qui sera utilisé comme état initial du magasin Vuex.
État par défaut du magasin Vuex :
const store = new Vuex.Store({ state: { messages: [], lastFetchedMessageDate: -1 }, // ... }); ClientState 类: public class ClientState { [JsonProperty(PropertyName = "messages")] public IEnumerable<Message> Messages { get; set; } [JsonProperty(PropertyName = "lastFetchedMessageDate")] public DateTime LastFetchedMessageDate { get; set; } }
Vue de l'index
Enfin , nous avons l'état initial (du serveur) et l'application Vue, il n'y a donc qu'une seule étape : utiliser asp-prerender-module et asp-prerender-data TagHelper pour restituer les valeurs initiales de l'application Vue dans la vue.
@model VuejsSSRSample.Models.ClientState <!-- ... --> <body> <p class="my-app" asp-prerender-module="VueApp/renderOnServer" asp-prerender-data="Model"></p> <script src="~/dist/bundle.client.js" asp-append-version="true"></script> </body> <!-- ... -->
asp-prerender-module L'attribut est utilisé pour spécifier le module à rendre (dans notre cas VueApp/renderOnServer ). Nous pouvons utiliser l'attribut asp-prerender-data pour spécifier un objet qui sera sérialisé et envoyé à la fonction par défaut du module en tant que paramètre.
Vous pouvez télécharger l'exemple de code original à partir de l'adresse suivante :
http://github.com/mgyongyosi/VuejsSSRSample
Recommandations associées :
Explication détaillée des exemples de rendu côté serveur React
Solution de rendu côté serveur de page DIY_html/css_WEB-ITnose
Pratique de rendu côté serveur Nuxt Vue.js
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Le passage de C / C à JavaScript nécessite de s'adapter à la frappe dynamique, à la collecte des ordures et à la programmation asynchrone. 1) C / C est un langage dactylographié statiquement qui nécessite une gestion manuelle de la mémoire, tandis que JavaScript est dynamiquement typé et que la collecte des déchets est automatiquement traitée. 2) C / C doit être compilé en code machine, tandis que JavaScript est une langue interprétée. 3) JavaScript introduit des concepts tels que les fermetures, les chaînes de prototypes et la promesse, ce qui améliore la flexibilité et les capacités de programmation asynchrones.

Différents moteurs JavaScript ont des effets différents lors de l'analyse et de l'exécution du code JavaScript, car les principes d'implémentation et les stratégies d'optimisation de chaque moteur diffèrent. 1. Analyse lexicale: convertir le code source en unité lexicale. 2. Analyse de la grammaire: générer un arbre de syntaxe abstrait. 3. Optimisation et compilation: générer du code machine via le compilateur JIT. 4. Exécuter: Exécutez le code machine. Le moteur V8 optimise grâce à une compilation instantanée et à une classe cachée, SpiderMonkey utilise un système d'inférence de type, résultant en différentes performances de performances sur le même code.

Les applications de JavaScript dans le monde réel incluent la programmation côté serveur, le développement des applications mobiles et le contrôle de l'Internet des objets: 1. La programmation côté serveur est réalisée via Node.js, adaptée au traitement de demande élevé simultané. 2. Le développement d'applications mobiles est effectué par le reactnatif et prend en charge le déploiement multiplateforme. 3. Utilisé pour le contrôle des périphériques IoT via la bibliothèque Johnny-Five, adapté à l'interaction matérielle.

J'ai construit une application SAAS multi-locataire fonctionnelle (une application EdTech) avec votre outil technologique quotidien et vous pouvez faire de même. Premièrement, qu'est-ce qu'une application SaaS multi-locataire? Les applications saas multi-locataires vous permettent de servir plusieurs clients à partir d'un chant

Cet article démontre l'intégration frontale avec un backend sécurisé par permis, construisant une application fonctionnelle EdTech SaaS en utilisant Next.js. Le frontend récupère les autorisations des utilisateurs pour contrôler la visibilité de l'interface utilisateur et garantit que les demandes d'API adhèrent à la base de rôles


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

Dreamweaver CS6
Outils de développement Web visuel

Dreamweaver Mac
Outils de développement Web visuel