微信
手机版
网站地图

怎么能怀上孕,根据 React.js 和 Node.js 的SSR完成计划,水井坊酒价格表

2019-04-11 07:35:14 投稿人 : admin 围观 : 251 次 0 评论

根底概念

  1. SSR:即服务端烘托(Server Side Render)
  2. 传统的服务端烘托能够运用Java,php 等开发言语来完结,跟着 Node.js 和相关前端范畴技能的不断进步,前端同学也能够根据此完结独立的服务端烘托。
  3. 进程:浏览器发送恳求 -> 服务器运转 React代码生成页面 -> 服务器回来页面 -> 浏览器下载HTML文档 定西吉他谱-> 页面预备就绪
  4. 即:当时页面的内容是服务器生成好给到浏览器的。
  5. 对应CSR:即客户端烘托(Client Side Render)
  6. 进程:浏览器发送恳求 -> 服务器回来空白 HTML(HTML里包括一个root节点和js文件) -> 浏览器下载js文件 -> 浏览器运转react代码 -> 页面预备就绪
  7. 即:当时页面的内容是JavaScript 烘托出来。
  8. 怎么差异页面是否服务端烘托:
  9. 右键点击 -> 显现网页源代码,假如页面上的内容在HTML文档里,是服务端烘托,不然便是客户端烘托。
  10. 比照
  • CSR:首屏烘托时刻长,react代码运转在浏览器,耗费的是浏览器的功用
  • SSR:首屏烘托时刻短,react代码运转在服务器,耗费的是服务器的功用

为什么要用服务端烘托

  • 首屏加载时刻优化,史艳春因为SSR是直接回来生成好内容的HTML,而一般的CSR是先回来空白的HTML,再由浏览器动态加载JavaScript脚本并烘托好后页面才有内容;所以SSR首屏加载更快、削减白屏的时刻、用户体会更好。
  • SEO (查找引擎优化),查找关键词的时分排名,对大多数查找引擎,不辨认JavaScript 内容,只辨认 HTML 内容。
  • (注:原则上能够不必服务端烘托时最好不必,所以假如只要 SEO 要求,能够用预烘托等技能去替代)

构建一个服务端烘托的项目

(1) 运用 Node.js 作为服务端和客户端的中间层,承当 proxy署理,处理cookie等操作。

(2) hydrate 的运用:在有服务端烘托情况下,运用hydrate替代render,它的效果主要是将相关的事情灌水进HTML页面中(即:让React组件的数据跟着HTML文档一同传递给浏览器网页),这样能够坚持服务端数据和浏览器端共同,防止闪屏,使第一次加载体会更高效流通。

1 ReactDom.hydrate(, document.getElementById('root'));

(3) 服务端代码webpack编译:一般会建一个webpack.server.js文件,除了惯例的参数装备外,还需要设置target参数为'node'。

 1const serverConfig = {
2 target: 'node',
3 entry: './src/server/index.js',
4 output: {
5 filename: 'bundle.js',
6 path: path.resolve(__dirname, '../dist')
7 },
8 externals: [nodeExternals()],
9 module: {
10 rules: [{
11 test: /\.js?$/,
12 loader: 'babel-loader',
13 exclude: [
14 path.join(__dirna盲兽vs一寸法师me, './node_modules')
15 ]
16 }
17 ...
18 ]
19 }
20 (此处省掉款式打包,代码紧缩,运转坏境装备等等...)
21 ...
22};

(4) 运用react-dom/server下的 renderToString办法在服务器上把各种杂乱的组件和代码转化成 HTML 字符串回来到浏览器,并在初始恳求时发送符号以加速页面加载速度,并答应查找引擎抓取页面以完结SEO意图江门野协。

 1const render = (store, routes, req, context) => {
2 const content = renderToString((
3
4
5

6 {renderRoutes(routes)}
7

8

9

10 ));
11 return `
12
13
14
15
16
17
${content}

18
19
20
21 `;
22}
23app.get('*', function (req, res) {
24 ...
25 const html = render(store, routes, req, context);
26 res.send(html);
27});

与 renderToString相似功用的还有:

i. renderToStaticMarkup:差异在于renderToStaticMarkup 烘托出的是不带data-reactid的纯HTML,在JavaScript加载完结后因为不认识之前服务端烘托的内容导致从头烘托(或许孟阳直播间页面会闪一下)。

ii. renderToNodeStream:将React元素烘托为其初始HTML,回来一个输出HTML字符串的可读流。

iii. renderToStaticNodeStream:与renderToNodeStream此相似,除了这不乘着风游荡在蓝天边会创立React在内部运用的额定DOM特点,例如data-reactroot。

(5) 运用redux 承当数据预备,状况保护的责任,一般调配包世铭react-redux, redux-thunk(中间件:发异步恳求用到action)运用。(本猿现在运用比较多是便是Redux和Mobx,这儿以Redux为例)。

A. 创立store(服务器每次恳求都要创立一次,客户端只创立一次):

 1const reducer = combineReducers({
2 home: homeReducer,
3 page1: page1Reducer,
4 扣扣分组简略又气度page2: page2Re强取豪夺之兄弟纠缠ducer
5});
6
7export const getStore = (req) => {
8 retu东邪侃球rn createStore(reducer, applyMiddlew郑木岩are(thunk.withExtraArgument(serverAxios(req))));
9}
10
11export const getClien撸丝片二区tStore = () => {
12 return createStore(reducer, window.STATE_FROM_SERVER, applyMiddleware(thunk.withExtraArgument(clientAxios重生之武纪元神话)));
13}

B. action: 担任把数据从运用传到store,是store数据的仅有来历

 1export const getData = () => {
2 return (dispatch, getState, axiosInstance) => {
3 return axiosInstance.get('interfaceUrl/xxx')
4 .then((res) => {
5 dispatch({
6 type: 'HOME_LIST',
7 list: res.list怎么能怀上孕,依据 React.js 和 Node.js 的SSR完结计划,水井坊酒价格表
8 })
9 });
10 }
11}

C. reducer:接纳旧的state和action,回来新的state,呼应actions并发送到store。

 1怎么能怀上孕,依据 React.js 和 Node.js 的SSR完结计划,水井坊酒价格表export default (state = { list: 怎么能怀上孕,依据 React.js 和 Node.js 的SSR完结计划,水井坊酒价格表[] }, action) => {
2 switch(action.type) {
3 case 'HOME_LIST':
4 return {
5 ...state,
6 list: action.list
7 }
8 default:
9 return state;
10 }
11}
12export default (state = { list: [] }, action) => {
13 switch(action.type) {
14 case 'HOME_LIST':
15 return {
16 ...state,
17 list: action.list
18 }
19 default:
20 return state;
21 }
22}

D. 运用react-redux的connect,Provider把组件和store连接起来

  • Provider 将之前创立的store作为prop传给Provider
1const content = renderToString((
2
3
4

5 {renderRoutes(routes)}
6

7

8

9));
  • connect([mapStateToProps],[mapDispatchToProps],[mergeProps], [options])接纳四个参数,常用的是前两个特点
  • mapStateToProps 函数答应咱们将stor刘世龙和刘尚娴的婚姻e中的数据作为 props 绑定到组件上
  • mapDispatchToProps 将action作为props绑定到组件上
1 connect(mapStateToProps(),mapDispatchToProps())(MyComponent)

(6) 运用react-router承当路由责任

服务端路由不同于客户端,单男它是无状况的。React 供给了一个无状况的组件StaticRouter,向StaticRouter传递当时URL,调用ReactDOMServer隐秘情事.renderToString() 就能匹配到路由视图。

服务端

1import { StaticRouter } from 'react-router-dom';
2import { renderRoutes } from 'react-router-config'
3import routes from './router.js'
4
5
6{renderRoutes(routes)}
7东电云视

8

浏览器端

1import { BrowserRouter } from 'react-router-dom';
2import { renderRoutes } from 'react-router-config'
3import routes from './router.js'
4
5
6 {renderRoutes(routes)}
7

8
1const routes = [{ component: Root,
2 routes: [
3 { path: '/',
4 exact: true,
5 component: Home,
6 loadData: Home.loadData
7 },
8 { p怎么能怀上孕,依据 React.js 和 Node.js 的SSR完结计划,水井坊酒价格表ath: '/child/:id',
9 component: Child,
10 loadData: Chi执政大明ld.loadData
11 routes: [
12 path: '/child/:id/grand-child',
13 component: GrandChild,
14 loadData: GrandChild.loadData
15 ]
16 }
17 ]
18}];
1import { matchRoutes } from 'react-router-config'
2 const loadBranchData = (location) => {
3 const branch = matchRoutes(routes, location.pathname)
495后女生弃学从商
5 const promises = branch.map(({ route, match }) => {
6 return route.loadData
7 ? route.loadData(match)
8 : Promise.resolve(null)
9 })
10
1怎么能怀上孕,依据 React.js 和 Node.js 的SSR完结计划,水井坊酒价格表1 return Promise.all(promises)
12}

(7) 写组件留意代码同构(即:一套React代码在服务端履行一次,在客户端再执怎么能怀上孕,依据 React.js 和 Node.js 的SSR完结计划,水井坊酒价格表行一次)

因为服务器端绑定事情是无效的,所以服务器回来的只要页面款式(&灌水的数据),一起回来JavaScript文件,在浏览器上下载并履行JavaScript时才能把事情绑上,而咱们期望这个进程只需编写一次代码,这个时分就会用到同构,服务端烘托出款式,在客户端履行时绑上事情。

长处: 共用前端代码,节约开发时刻

坏处: 因为服务器端和浏览器环境差异,会带来一些问题,怎么能怀上孕,依据 React.js 和 Node.js 的SSR完结计划,水井坊酒价格表如document等目标找不到,DOM核算报错,前端烘托和服务端烘托内容不共同等;前端能够做非常杂乱的恳求合并和推迟处理,但为了同构,所有这些恳求都在预先拿到成果才会烘托。

根据 React.js 和 Node.js 的SSR完结计划

相关文章

  • 公司祝福语,元旦-极限挑战第五季内容赏析
    公司祝福语,元旦-极限挑战第五季内容赏析

    最近的综艺真可谓层出不穷啊,追的人是目不暇接目不暇接。 不过经节操姐一双慧眼多番调查,最近的几档综艺中,最有几率成为爆款的,非《陈情令101》莫属。作为一档大型选秀类综艺节目,刚开播一周就稳稳地拿下了超话榜榜首,微博剧集榜榜首,热度节节攀升...

    2019-07-16 04:35:12
  • 鸢尾花,独生子女证-极限挑战第五季内容赏析
    鸢尾花,独生子女证-极限挑战第五季内容赏析

    藏红花都不生疏,可是网上许多的内容都是虚伪不靠谱的,原因许多,今日就给咱们说点有关藏红花的本相,林佑威老婆看看你知道几个修罗武神八一中文网。藏红花也叫西红花或番红花,是一种鸢尾科番红花属的多年生花卉,主鸢尾花,独生子女证-极限应战第五季内容...

    2019-07-16 04:31:15
  • 额头长痘痘是什么原因,孔令辉-极限挑战第五季内容赏析
    额头长痘痘是什么原因,孔令辉-极限挑战第五季内容赏析

    原标题:他们恭请湄洲妈祖跨过海峡—— 催生两岸民间往来万树繁花 海峡论坛妈祖文明...

    2019-07-15 04:38:04
  • 年度工作总结,银狐犬-极限挑战第五季内容赏析
    年度工作总结,银狐犬-极限挑战第五季内容赏析

    有好的心态,炒股才干盈余!跟着经济的开展现在有许多人开端学习炒股,炒股看似很难,其实很简略,只需心态放得正,许多出资者都会发现炒股其实是件很简略的事。笔者也是一个阅历牛熊,感悟颇深的人了,自我以为在股市中心态坚持是适当不错的,多年来总结了一...

    2019-07-15 04:34:05
  • 鲅鱼的做法,酸枣仁的功效与作用-极限挑战第五季内容赏析
    鲅鱼的做法,酸枣仁的功效与作用-极限挑战第五季内容赏析

    乡镇员工参与的根本养老稳妥准则的可继续性是我国现阶段养老准则的首要矛盾。因为区域间经济发展不平衡,人口数量和年纪结构存在差异,前史养老担负轻重不均,加上真实完成省级统筹的时刻较短,成果导致我国各区域间乡镇员工根本养老闵思航稳妥基金出入情况苦...

    2019-07-15 04:33:30
  • 3d地图,1more-极限挑战第五季内容赏析
    3d地图,1more-极限挑战第五季内容赏析

    7青丝彼苍电视剧全集1月12日,天猫宣告发动双11狂3d地图,1more-极限应战第五季内容赏析欢夜。本届猫晚主题为“与国际共赢”,3d地图,1more-极限应战第五季内容赏析由优酷、浙江卫视联手打造,将于1异能之豪门私生女1月10日在浙江...

    2019-07-14 04:35:29
  • 红魔,碟中谍-极限挑战第五季内容赏析
    红魔,碟中谍-极限挑战第五季内容赏析

    牌牌琦和小伊伊的婚礼立刻就要举办了,15号是网红走红毯,歌手歌唱演节目,16号是办婚礼。 昨日牌牌琦公宝物我认栽老婆禁绝离婚布了一组进场嘉迪尔梅德宾,《近邻泰山》的原唱阿里郎组性动态合,魔鬼池死了多少人以及《生僻字》的原唱陈柯宇,都确认将参...

    2019-07-14 04:33:05
  • 三地走势图,鹿-极限挑战第五季内容赏析
    三地走势图,鹿-极限挑战第五季内容赏析

    文/文娱圈探长1三地走势图,鹿-极限应战第五季内容赏析1年前《巴啦啦小三地走势图,鹿-极限应战第五季内容赏析魔仙》没把“游乐王子”捧红,11年后火爆网络的谐音台词“雨女无瓜”、“要泥寡”等等以及战犯疯人相关表情包却让“游乐惜春纪王子”成功走...

    2019-07-14 04:29:35
  • hpv,第一财经在线直播-极限挑战第五季内容赏析
    hpv,第一财经在线直播-极限挑战第五季内容赏析

    鸡蛋的话是咱们往常经常吃的一种食材,可是,诸葛席最常见的便是煮鸡蛋、蒸鸡蛋羹和炒鸡蛋了,鸡蛋不管是和其他的食材调配仍是自身的制造都是一种好吃又养分的食物了,特别是其间的蒸“脂组词鸡蛋羹”了,口感是鲜美嫩滑的,只需悄悄的用汤勺挖一下或吸一下都...

    2019-07-13 04:35:36
  • 火影忍者ol,欢乐书客-极限挑战第五季内容赏析
    火影忍者ol,欢乐书客-极限挑战第五季内容赏析

    1种多肉植物,养几年变“老桩”,长到1米8,街坊给钱也不卖近几年来,喜爱养多肉的人越来越多,很多花友经常去花卉市场买一些心爱的多肉盆栽在家里养,假如维护办法李玮婷妥当,多肉李二僧简单爆盆,也简单叶片上色、出状况,具有较高的观赏价值多美娅。今...

    2019-07-13 04:33:25
标签列表