這個是針對小白入門的文章,大神請繞過。
本文首發: http://shudong.wang/article/101
一套代碼既能夠在服務端運行又能夠在客戶端運行,這就是同構應用。簡而言之, 就是服務端直出和客戶端渲染的組合, 可以充分結合二者的優點,並有效避免二者的不足。html
歸納地說,同構就是服務端(Node)替客戶端請求接口,獲取到數據後,將有數據和結構的頁面渲染好以後返回給客戶端,這樣避免了客戶端頁面首次渲染,同時服務端RPC比客戶端請求要快。vue
能夠看看這個文章 https://www.zhihu.com/questio...node
性能: 下降首屏渲染時間
SEO: seo友好react
若是搜索引擎蜘蛛來到你的網站,網站返回的的內容幾乎沒有,這就不太友好了,它就無功而返,相對你的網站就很難被搜索引擎收入。
通常配合後端框架 如: koa express 用什麼本身選擇
若是你想體驗 ssr 渲染,最好理解請看這個分支
分支 simple-ssr
demo 地址webpack
這個demo 採用的express react webpack 最基礎的同構,後續會慢慢增長功能
每一個功能儘可能在一個分支,方便你們查看
react 有個成熟的解決方案 next ,通常這種方案,不適合遷移,靈活度不高 和 vue 的ssr nuxt 相似
這個配置主要把文件打包git
const path = require('path') module.exports = { target: "node", entry: { app: path.join(__dirname, '主要程序入口文件') //server-entry.js }, output: { filename: 'server-entry.js', path: path.join(__dirname, '../dist'), publicPath: '/public', libraryTarget: 'commonjs2' }, module: { rules: [ { test: /.jsx$/, loader: 'babel-loader' }, { test: /.js$/, loader: 'babel-loader', exclude: [ path.join(__dirname, '../node_modules') ] } ] } }
這個主要把react 導出
import React from 'react' import App from './App.js' export default <App />
當咱們訪問url 的時候,讓express去接管github
app.get('*', function (req, res) { const reactTpl = ReactSSR.renderToString(serverEntry) res.send(template.replace('<!-- stark -->', reactTpl)) })
const express = require('express') const ReactSSR = require('react-dom/server') const fs = require('fs') const path = require('path') const app = express() const serverEntry = require('../dist/server-entry').default // 裏面讀取的是編譯後的文件 const template = fs.readFileSync(path.join(__dirname, '../dist/index.html'), 'utf8') // 設置public加在的靜態目錄 app.use('/public', express.static(path.join(__dirname, '../dist'))) app.get('*', function (req, res) { const reactTpl = ReactSSR.renderToString(serverEntry) res.send(template.replace('<!-- stark -->', reactTpl)) }) app.listen(3006, function () { console.log('====================================') console.log('open url view website') console.log('====================================') console.log("http://localhost:3006") })
[*] 本地開發服務端重構
[*] 本地開發熱更新同步到服務端渲染
[*] 項目目錄架構web