cari
Rumahhujung hadapan webView.jsnode和laravel项目中预渲染vue.js应用程序

node和laravel项目中预渲染vue.js应用程序

服务器端渲染现在非常流行。但它也并非没有缺点。预渲染是一种替代方法,在某些情况下甚至可能更好。下面我们来看一下如何预渲染vue.js应用程序。

在本文中,我们将探讨预渲染如何与vue.js一起工作,并看两个示例:一个是node.js项目,一个是laravel项目。

相关教程推荐:node js教程 、vue.js教程 、laravel教程

一、服务端渲染

基于javascript的应用程序的一个缺点是,浏览器从服务器接收到的页面基本上是空的。在下载并运行Javascript之前,无法构建DOM。

这意味着用户必须等待更长的时间才能看到任何东西。如果爬虫程序不能快速查看页面内容,它也会对SEO产生影响。

服务器端呈现(SSR)通过在服务器上呈现应用程序来克服这个问题,以便客户端在加载页面时(甚至在Javascript运行之前)接收完整的DOM内容。

而不是浏览器从服务器接收这个:

<head> ... </head>
<body>
<div id="app">
  <!--This is empty, Javascript will populate it later-->
</app>
</body>

使用SSR,它接收一个完整的内容页面:

<head> ... </head>
<body>
<div id="app">
  <div class="container">
    <h1>Your Server-Side Rendered App</h1>
    <div class="component-1">
      <p>Hello World</p>
      <!--etc etc. This was all rendered on the server-->
</app>
</body>

服务器端渲染缺点

  • 你的应用程序需要在服务器上可执行,所以你需要设计你的代码是“通用的”,也就是说,它可以在浏览器和节点服务器上工作。

  • 您的应用程序将运行在每一个请求到服务器,添加一个传统的负载和缓慢的响应。缓存可以部分缓解这种情况。

  • 你只能用Node.js做SSR。如果您的主后端是Laravel、Django等,那么您必须在主后端运行一个节点服务器来处理SSR。

二、预渲染

还有另一种方法可以解决空页问题:预渲染。使用这种方法,您可以在部署应用程序之前运行应用程序,捕获页面输出并用捕获的输出替换HTML文件。

它与SSR的概念基本相同,只是它是在开发环境中预先部署的,而不是在活动服务器中。

预渲染通常使用PhantomJS这样的无头浏览器来执行,并且可以与Webpack、Gulp等一起集成到构建流中。

预渲染的优点

  • 没有额外的服务器负载,因此比SSR更快更便宜

  • 更简单的生产设置和更简单的应用程序代码,因此更不容易出错

  • 不需要Node.js生产服务器

预渲染的缺点

  • 对于显示不断变化的数据的页面(例如表),不能很好地工作。

  • 不适用于具有特定用户内容的页面,例如包含用户个人信息的帐户页面。然而,无论如何,这些类型的页面对于预呈现都不那么重要;这是我们主要的,经常使用的页面,我们想要提供快速。

  • 你需要在应用程序中单独预渲染每条路线。

对照表


仅客户端渲染 服务端渲染 预渲染
生产服务器 Any/none Node.js only Any/none
额外的服务器负载 No Yes No
个性化用户数据? N/A Yes No

三、Vue.js预渲染示例

让我们做一个简单的例子来预渲染一个vue.js应用程序,一次在node.js环境中,一次在laravel环境中。

在这些示例中,我们将使用webpack和pre render spa插件来执行预渲染。

1、Vue和Node

第1步:项目安装

我们将使用vue-cli和webpack-simple模板。

$ vue init webpack-simple vue-node-pr-test
$ cd vue-node-pr-test
$ npm install

我们还需要另外三个模块,后面还有解释。

$ npm install --save-dev http-server html-webpack-plugin prerender-spa-plugin

第2步:在Webpack构建中包含index.html

Webpack -simple模板在Webpack构建输出中不包含index.html文件。然而,当我们预渲染应用程序时,我们需要覆盖我们的索引。因此,让我们将它添加到输出中,以免破坏原始的。

在我们的Webpack .config.js文件中使用html-webpack-plugin将文件包含在Webpack构建中:

var HtmlWebpackPlugin = require(&#39;html-webpack-plugin&#39;);

module.exports.plugins.push(
  new HtmlWebpackPlugin({
    template: &#39;./index.html&#39;,
    inject: false
  }),
);

现在我们改变了我们的Webpack公共路径,因为index.html现在和其他静态资产在同一个文件夹中:

output: {
  path: path.resolve(__dirname, &#39;./dist&#39;),
  filename: &#39;build.js&#39;,
  publicPath: &#39;/&#39;, // was originally &#39;dist&#39;
},

由于路径的变化,我们还需要将index.html中的cb21fb7e4d5e2fbcc4c3e1e91588031f2cacc6d41bbb37262a98f745aa00fbf0更改为aad0d9c45216e818a39fb4405cc912dc2cacc6d41bbb37262a98f745aa00fbf0。

第3步:测试Webpack生成版本

现在我们建造:

$ npm run build

我们的dist文件夹应该是这样的:

- dist
-- build.js
-- index.html
-- logo.png

如果我们检查dist/index.html,它会是这样的:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>vue-node-pr-test</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/javascript" src="/build.js"></script>
  </body>
</html>

现在我们可以使用http-server并从dist文件夹中提供应用程序。默认情况下,它将运行在localhost:8080:

$ ./node_modules/.bin/http-server ./dist

第4步:预渲染应用程序

现在我们的index.html文件在Webpack构建中,我们可以使用预呈现的HTML更新它。

首先,我们需要在webpack配置中添加prerender-spa-plugin。确保它在html-webpack-plugin之后。

var PrerenderSpaPlugin = require(&#39;prerender-spa-plugin&#39;);

module.exports.plugins.push(
  new PrerenderSpaPlugin(
    path.join(__dirname, &#39;./dist&#39;),
    [ &#39;/&#39; ]
  )
);

PrerenderSpaPlugin的第一个参数是index.html文件的位置,第二个参数是应用程序中的路由列表。在这个例子中,我们只有一条路径。

现在我们再次建造:

$ npm run build

我们的构建将比以前花费更长的时间,因为预渲染插件正在做的事情:

  1. 它创建一个Phantom JS实例并运行应用程序

  2. 获取DOM的快照

  3. 将快照输出到生成文件夹中的HTML文件

它会对每条路径重复这个过程,所以如果你有很多页面,构建应用程序可能需要相当长的时间。

在建立后,我们的dist/index.html现在应该包括所有预渲染的HTML:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>prerender-test</title>
  <style type="text/css">#app {
    font-family: Avenir, Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-align: center;
    color: #2c3e50;
    margin-top: 60px
  }

  h1, h2 {
    font-weight: 400
  }

  ul {
    list-style-type: none;
    padding: 0
  }

  li {
    display: inline-block;
    margin: 0 10px
  }

  a {
    color: #42b983
  }</style>
</head>
<body>
<div id="app"><img src="/logo.png?82b9c7a5a3f405032b1db71a25f67021">
  <h1></h1>
  <h2>Essential Links</h2>
  <ul>
    <li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
    <li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
    <li><a href="https://gitter.im/vuejs/vue" target="_blank">Gitter Chat</a></li>
    <li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
  </ul>
  <h2>Ecosystem</h2>
  <ul>
    <li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
    <li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
    <li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
    <li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
  </ul>
</div>
<script type="text/javascript" src="/build.js"></script>

</body>
</html>

2、Vue 和 Laravel

如果您跳过了Vue和Node示例,我建议您先回去阅读它,因为它包含了对任何常见步骤的更全面的解释。

第1步:项目安装

首先,我们将设置一个新的Laravel项目。

$ laravel new vue-laravel-pr-test
$ cd vue-laravel-pr-test
$ npm install

我们还将增加两个我们需要的NPM模块:

$ npm install --save-dev html-webpack-plugin prerender-spa-plugin

第2步:提供一个普通的HTML文件

默认情况下,Laravel在根URL处提供Blade模板文件。 为了使示例简单,我们将使用我们将在resources / views / index.html创建的以下纯HTML文件替换它

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Laravel</title>
    <link rel="stylesheet" href="/css/app.css">
<body>
<div id="app">
  <example></example>
</div>
<script type="text/javascript" src="/js/app.js"></script>
</body>
</html>

现在,我们需要在根路径上提供该文件,而不是刀片服务器模板。将route /web.php更改为:

Route::get(&#39;/&#39;, function () {
  return File::get(public_path() . &#39;/index.html&#39;);
});

这实际上指向我们的build文件夹,我们很快就会生成它。

第3步:将HTML文件添加到构建中

像在节点示例中一样,我们希望在Webpack构建中包含index.html,以便稍后使用预呈现的HTML覆盖它。

我们需要做一些Webpack配置。在本例中,我使用的是Laravel 5.4,它使用的是Laravel Mix。Mix没有提供本地webpack配置文件,因为它使用自己的默认文件,所以让我们从laravel-mix模块复制一个配置文件:

$ cp ./node_modules/laravel-mix/setup/webpack.config.js .

我们还需要让我们的NPM生产脚本指向这个配置文件,因此编辑包。json,并将生产脚本更改为:

cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js 
--progress --hide-modules --config=webpack.config.js

现在我们将html-webpack-plugin添加到webpack.config.js文件中。把这个添加到文件的底部上面的混合定型部分:

var HtmlWebpackPlugin = require(&#39;html-webpack-plugin&#39;);

module.exports.plugins.push(
  new HtmlWebpackPlugin({
    template: Mix.Paths.root(&#39;resources/views/index.html&#39;),
    inject: false
  });
);

第4步:测试Weback生成版本

现在让我们为生产和服务:

$ npm run production
$ php artisan serve

不过,在运行应用程序时,浏览器中可能会出现错误,因为我们从未为window.Laravel.csrfToken设置值。对于这个简单的例子,注释掉会更快,所以像这样修改resources/assets/js/bootsta .js:

window.axios.defaults.headers.common = {
  &#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;
  // &#39;X-CSRF-TOKEN&#39;: window.Laravel.csrfToken;
};

第5步:预渲染应用程序

我们现在需要在webpack配置中使用prerender spa插件来执行预渲染。确保它在HTML网页包插件之后。

var PrerenderSpaPlugin = require(&#39;prerender-spa-plugin&#39;);

module.exports.plugins.push(
  new PrerenderSpaPlugin(
    Mix.output().path,
    [ &#39;/&#39; ]
  )
);

现在我们可以做一个生产构建:

$ npm run production

如果您选中build文件夹,dist/index.html现在应该如下所示,并使用预渲染HTML完成:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Laravel</title>
    <link rel="stylesheet" href="/css/app.css">
</head>
<body>
<div id="app">
    <div>
        <div>
            <div class="col-md-8 col-md-offset-2">
                <div class="panel panel-default">
                    <div>Example Component</div>
                    <div>
                        I&#39;m an example component!
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="/js/app.js"></script>
</body>
</html>

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci node和laravel项目中预渲染vue.js应用程序. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:vuejsdevelopers. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Fungsi Vue.js: Meningkatkan Pengalaman Pengguna di FrontendFungsi Vue.js: Meningkatkan Pengalaman Pengguna di FrontendApr 19, 2025 am 12:13 AM

Vue.js meningkatkan pengalaman pengguna melalui pelbagai fungsi: 1. Sistem responsif menyedari maklum balas data masa nyata; 2. Pembangunan komponen meningkatkan kebolehgunaan semula kod; 3. Vuerouter menyediakan navigasi lancar; 4. Data dinamik mengikat dan animasi peralihan meningkatkan kesan interaksi; 5. Mekanisme pemprosesan ralat memastikan maklum balas pengguna; 6. Pengoptimuman prestasi dan amalan terbaik meningkatkan prestasi aplikasi.

Vue.js: Menentukan peranannya dalam pembangunan webVue.js: Menentukan peranannya dalam pembangunan webApr 18, 2025 am 12:07 AM

Peranan vue.js dalam pembangunan web adalah bertindak sebagai rangka kerja JavaScript yang progresif yang memudahkan proses pembangunan dan meningkatkan kecekapan. 1) Ia membolehkan pemaju memberi tumpuan kepada logik perniagaan melalui pengikatan data yang responsif dan pembangunan komponen. 2) Prinsip kerja Vue.js bergantung kepada sistem responsif dan DOM maya untuk mengoptimumkan prestasi. 3) Dalam projek sebenar, adalah amalan biasa untuk menggunakan VUEX untuk menguruskan keadaan global dan mengoptimumkan respons data.

Memahami Vue.js: Terutama rangka kerja frontendMemahami Vue.js: Terutama rangka kerja frontendApr 17, 2025 am 12:20 AM

Vue.js adalah kerangka JavaScript yang progresif yang dikeluarkan oleh You Yuxi pada tahun 2014 untuk membina antara muka pengguna. Kelebihan terasnya termasuk: 1. Pengikatan data responsif, Paparan Kemas Kini Automatik Perubahan Data; 2. Pembangunan komponen, UI boleh dibahagikan kepada komponen bebas dan boleh diguna semula.

Frontend Netflix: Contoh dan Aplikasi React (atau Vue)Frontend Netflix: Contoh dan Aplikasi React (atau Vue)Apr 16, 2025 am 12:08 AM

Netflix menggunakan React sebagai kerangka depannya. 1) Model pembangunan komponen React dan ekosistem yang kuat adalah sebab utama mengapa Netflix memilihnya. 2) Melalui komponen, Netflix memisahkan antara muka kompleks ke dalam ketulan yang boleh diurus seperti pemain video, senarai cadangan dan komen pengguna. 3) Kitaran Hayat DOM dan Komponen Maya React mengoptimumkan kecekapan rendering dan pengurusan interaksi pengguna.

Landskap Frontend: Bagaimana Netflix menghampiri pilihannyaLandskap Frontend: Bagaimana Netflix menghampiri pilihannyaApr 15, 2025 am 12:13 AM

Pilihan Netflix dalam teknologi front-end terutamanya memberi tumpuan kepada tiga aspek: pengoptimuman prestasi, skalabilitas dan pengalaman pengguna. 1. Pengoptimuman Prestasi: Netflix memilih React sebagai kerangka utama dan alat yang dibangunkan seperti SpeedCurve dan Boomerang untuk memantau dan mengoptimumkan pengalaman pengguna. 2. Skalabiliti: Mereka mengamalkan seni bina front-end mikro, memisahkan aplikasi ke dalam modul bebas, meningkatkan kecekapan pembangunan dan skalabilitas sistem. 3. Pengalaman Pengguna: Netflix menggunakan perpustakaan komponen bahan-UI untuk terus mengoptimumkan antara muka melalui ujian A/B dan maklum balas pengguna untuk memastikan konsistensi dan estetika.

React vs Vue: Rangka kerja mana yang digunakan oleh Netflix?React vs Vue: Rangka kerja mana yang digunakan oleh Netflix?Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled "gibbon" Builtonreact, notreactorsvuedirectly.1) TeamExperience: chectionBasedOnfamiliarity.2) ProjectOplePlexity: VueforsImplerProjects, ReactForComplexones.3)

Pilihan Rangka Kerja: Apa yang mendorong keputusan Netflix?Pilihan Rangka Kerja: Apa yang mendorong keputusan Netflix?Apr 13, 2025 am 12:05 AM

Netflix terutamanya menganggap prestasi, skalabiliti, kecekapan pembangunan, ekosistem, hutang teknikal dan kos penyelenggaraan dalam pemilihan rangka kerja. 1. Prestasi dan Skalabiliti: Java dan Springboot dipilih untuk memproses data besar -besaran dan permintaan serentak yang tinggi. 2. Kecekapan Pembangunan dan Ekosistem: Gunakan React untuk meningkatkan kecekapan pembangunan front-end dan menggunakan ekosistemnya yang kaya. 3. Hutang Teknikal dan Penyelenggaraan Kos: Pilih Node.js untuk membina mikroservis untuk mengurangkan kos penyelenggaraan dan hutang teknikal.

React, Vue, dan Masa Depan Frontend NetflixReact, Vue, dan Masa Depan Frontend NetflixApr 12, 2025 am 12:12 AM

Netflix terutamanya menggunakan React sebagai rangka kerja front-end, ditambah dengan VUE untuk fungsi tertentu. 1) Komponen React dan DOM maya meningkatkan prestasi dan kecekapan pembangunan aplikasi Netflix. 2) VUE digunakan dalam alat dalaman dan projek kecil Netflix, dan fleksibiliti dan kemudahan penggunaannya adalah kunci.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)