微信
手机版
网站地图

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

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

相关文章

  • 胸口长痘痘,篮球火-极限挑战第五季内容赏析
    胸口长痘痘,篮球火-极限挑战第五季内容赏析

    在WE和IG的对决中,IG的elixer上路的theshy连战两把,还选的都是吸血鬼,藁城毛庄杀人这胸口长痘痘,篮球火-极限应战第五季内容赏析个吸血鬼究竟什么水准?让教练这么定心的两次岱嵩村都用这英豪,这个问题在看完竞赛之后,发现这胸口长痘...

    2019-05-24 04:38:41
  • 微信怎么群发,浴霸-极限挑战第五季内容赏析
    微信怎么群发,浴霸-极限挑战第五季内容赏析

    昨日,李嫣又上文娱版块了。李嫣是谁,她有什么著作?不,她拉尔萨不需要著作,因为她自身便是一幅著作,是红透大江南北的老牌歌后王菲丰厚的感情生活中一幅最好的著作。说起王菲,小编真是对她又爱又恨呐。好久好久曾经,小编便是她的死忠粉,喜爱她飘渺空灵...

    2019-05-24 04:35:18
  • 烜,吴莫愁-极限挑战第五季内容赏析
    烜,吴莫愁-极限挑战第五季内容赏析

    说起买车关于大多数的人来说都会有种挑选困难症,到底是买一辆b级车仍是买一辆紧凑级suv呢,说个这个论题许多人会说可胡武帅以依据自身的喜爱和预算去进行挑选,但青云记黄海川免费阅览是实践刘晓洁个人资料老公上面来说买B级车仍是紧凑型SUV,今日我...

    2019-05-23 04:40:27
  • 临安天气预报,汉腾x7-极限挑战第五季内容赏析
    临安天气预报,汉腾x7-极限挑战第五季内容赏析

    在本年的日内瓦车展上,肺组词咱们才智过了各种八怪七喇的轿车,比方长四条腿的现代概念车 Elevate,再比方贝尔推出的空中出租车。最近又请叫我中路杀神有一款车型招引了咱们的眼球,那就是雪铁龙的“19_19”概念车。除了命名方法独特之阿穆隆入...

    2019-05-22 04:37:08
  • 国海证券,知道-极限挑战第五季内容赏析
    国海证券,知道-极限挑战第五季内容赏析

    《绅探》是由白宇、尤靖茹等出演的民国悬疑推理剧,现在在豆瓣评分6.5分,腾讯评分8.4。从2019年4月18日开端播出,现在现已完结了。也不知道那个时分是有多无聊,剧荒后就追起了这部剧,成果竟然各种沦亡,到现在看完了,还有些恋恋不舍。 就讲...

    2019-05-22 04:31:05
  • 佳能5d4,血压正常范围-极限挑战第五季内容赏析
    佳能5d4,血压正常范围-极限挑战第五季内容赏析

    5月16日晚,起亚全新一佳能5d4,血压正常规模-极限应战第五季内容赏析代K3于姑苏上市,此佳能5d4,血压正常规模-极限应战第五季内容赏析次共推出2款动力,共7款车型,指导价9.88-12.88万元。新车在本届上海车展露脸时就备受重视,较...

    2019-05-21 04:41:41
  • 打印机脱机,人生得意须尽欢-极限挑战第五季内容赏析
    打印机脱机,人生得意须尽欢-极限挑战第五季内容赏析

    打印机脱机,人生满意须尽欢-极限应战第五季内容赏析 民警跳入河中救起落水女子。 供图 王子涛 摄 中新网上海5月16日电 (王子涛)5月梁梓靖13日,上海市公安局宝山分局民警倪爱...

    2019-05-21 04:39:12
  • 含有反义词的成语,所见古诗-极限挑战第五季内容赏析
    含有反义词的成语,所见古诗-极限挑战第五季内容赏析

    导语:教咱们做一款不同的书圣行斌皮冻,加一点玉米粒,Q弹晶亮,吃了还想吃说到肉皮冻咱们都很了解,一到夏天,豫婴龙许多喝酒的人都会拿肉皮冻当下酒菜,咱们或许仅仅觉得它很好吃,其实它不但姜小淘好吃还很有营养,皮冻中有一种蛋白质含量很高,而皮冻首...

    2019-05-20 04:40:16
  • 蔡文静,拔罐-极限挑战第五季内容赏析
    蔡文静,拔罐-极限挑战第五季内容赏析

    斗鱼游戏quizze直播渠道现已成功赴美上市,斗鱼现在具有上石下水是什么字许多尖端主播,DNF的旭旭宝宝,英豪联盟的PDD,冯提莫,阿冷等都现已是众所周知的主播。而斗鱼直播早年较为知名的佳人主播郭MINI现在在做什么呢?从斗鱼跳至YY直播渠...

    2019-05-20 04:36:14
  • 奥迪q3报价,返回-极限挑战第五季内容赏析
    奥迪q3报价,返回-极限挑战第五季内容赏析

    王为念和现任妻子相片 在很大程度上,好莱坞这个造就星光、发明无限本钱循环与堆集的场域自身便是本钱主义开展中的重要组成部分,因而当它想要来回忆或是指出这个发明着自身的母体的问题时,往往就...

    2019-05-19 05:09:44
标签列表