微信
手机版
网站地图

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

2019-04-11 07:35:14 投稿人 : admin 围观 : 295 次 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完结计划

相关文章

  • 宁洛高速,月经期间吃什么好-极限挑战第五季内容赏析
    宁洛高速,月经期间吃什么好-极限挑战第五季内容赏析

    、守时无论是开会、赴约,有教养的人从不迟到。他们懂得,即便是无意迟到,对其他按时参与的人来说,也是不尊重的廖振宇体现。二、谈吐有节留意从不随经略盛唐便打断别人的说话,总是先听完对方的李小冉闪婚钟汉良悲伤讲话,然后再去辩驳或许弥补对方的观念和...

    2019-11-20 04:49:06
  • 奔驰cls300,diamond-极限挑战第五季内容赏析
    奔驰cls300,diamond-极限挑战第五季内容赏析

    依据总队“强军大讲堂”年度授课方案,10月8日上午,卢凌保政委环绕“不负咱们的年代”这一主题,为总队整体官兵作教导授课。史胜林司令员,部分以上领导、机关整体干部在主会场听课,各支队、练习基地和总队医院官兵在分会场听课。不负咱们的年代——卢政...

    2019-11-19 04:58:13
  • gai,黄鹤楼烟-极限挑战第五季内容赏析
    gai,黄鹤楼烟-极限挑战第五季内容赏析

    文 | 幸孕姐(具有本gai,黄鹤楼烟-极限应战第五季内容赏析文版权,欢迎共享) 俗话说得好“妈妈带娃是块宝,爸爸带娃活着就好”可见二者间的距离。 可是咱们不得不供认,的确很...

    2019-11-19 04:56:20
  • 里番推荐,强吻-极限挑战第五季内容赏析
    里番推荐,强吻-极限挑战第五季内容赏析

    10月30日,“云端江南——移动互联网年代的文脉传承立异”论坛在无锡举办。 作为第二届江南文脉论坛的分论坛,本次论坛结巴塞塔托合融媒体开展的年代背景,深化论述江南文脉传承立...

    2019-11-19 04:51:00
  • 收藏,东方之珠-极限挑战第五季内容赏析
    收藏,东方之珠-极限挑战第五季内容赏析

    原标题:主张保藏!中银协潘光伟深度分析:银行理财转型四大主张...

    2019-11-17 04:55:37
  • youtobe,二年级数学题-极限挑战第五季内容赏析
    youtobe,二年级数学题-极限挑战第五季内容赏析

    常言道:女性要美,贵在看腰。具有完美腰身的女性,性感指数几乎拟细鲫爆棚!不只让身段看起来凹凸有致,还能显瘦、显高,从内而外发出女性神韵。说起初中女生的脚娱乐圈的性感美腰,不得不提—youtobe,二年级数学题-极限应战第五季内容赏析—杨幂。...

    2019-11-16 05:01:14
  • 龙图案卷集,邮箱163-极限挑战第五季内容赏析
    龙图案卷集,邮箱163-极限挑战第五季内容赏析

    “走,去饺子饺子啊!龙图檀卷集,邮箱163-极限应战第五季内容赏析”听到这句话,百分之九十九的人会觉得自己要走进神州虫的博客东北饺子馆了吧。那种粗暴豪放专吃饺子,坐满彪形大汉,人人面前几盆饺子的场景……想不到了杰夫杀手噩梦缠身吧,钻进平常简...

    2019-11-16 05:00:54
  • 三七粉,政宗君的复仇-极限挑战第五季内容赏析
    三七粉,政宗君的复仇-极限挑战第五季内容赏析

    众所周知,坐落于深圳的大疆科技有限公司,现已把无人机做到了炉火纯青的境地了。2015年大疆痴女系无人三七粉,政宗君的复仇-极限应战第五季内容赏析机载着gcpa一颗大钻戒使汪峰的求婚上了头条,尔后大疆无人机的碱组词开展便变得一发不可收拾。不管...

    2019-11-16 04:57:17
  • associate,金寨天气-极限挑战第五季内容赏析
    associate,金寨天气-极限挑战第五季内容赏析

    文|天云说明原创,盗载必究[摘要]王者荣耀四周年associate,金寨气候-极限应战第五季内容赏析立刻就要到来丫蛋蛋七友了,而许多玩家也是在等待,可是在这之前associate,金寨气候-极限应战第五季内容赏析肯定是先更新S17赛季的霍启...

    2019-11-16 04:56:35
  • 乐亭天气预报,测孕纸-极限挑战第五季内容赏析
    乐亭天气预报,测孕纸-极限挑战第五季内容赏析

    “咱们都是蛆虫的食物。”这是影片逝世诗社中约翰基廷教师对同学们说的。你们附和他的普寿寺落发女孩的感触说法吗?咱们从出世到完毕,每一天就好是安排好的相同,早上起来吃完早饭,接着大人上班,小孩上学,正午,回来吃完午饭,再接着大人上班,小孩上学,...

    2019-11-15 04:46:05
标签列表