《seo点击》react如何seo

  • A+
所属分类:黑帽技巧
摘要

?初学者对React可能满怀期待,觉得React可能完爆其它一切框架,基本上了把甚至不切实际地认为React可能连原生的渲染都能完爆mdashmdash对框架的狂热确实会出现这样的不切实际的期待。让我们来看看React的官方是怎么说的。React官方文档在Adv

?

初学者对React可能满怀期待,觉得React可能完爆其它一切框架,基本上了把甚至不切实际地认为React可能连原生的渲染都能完爆mdashmdash对框架的狂热确实会出现这样的不切实际的期待。让我们来看看React的官方是怎么说的。React官方文档在AdvancedPerformanec这一节,这样写道:

OneofthefirstquestionspeopleaskwhenconsideringReactforaprojectiswhethertheirapplicationwillbeasfastandresponsiveasanequivalentnon-Reactversion

但是react的默认做法是调用所有组件的render,可能这种方式也可以再对生成的虚拟DOM进行对比,如不变则不进行更新。这样的render和虚拟DOM的对比明显是在浪费,如下图(黄色表示浪费的render和虚拟DOM对比)

componentWillReceiveProps(objectnextProps):当挂载的组件接收到新的props时被调用。此方法应该被用于比较this.props和nextProps以用于使用this.setState()执行状态转换。(组件内部数据有变化,使用state┶,大致来讲但是在更新阶段又要在props改变的时候改变statereact如何seo,则在这个生命周期里面)

我们可以这样认为shouldComponentUpdate(objectnextProps,objectnextState):-boolean当组件决定任何改变是否要更新到DOM时被调用。作为一个优化实现比较this.props和nextProps、this.state和nextState,如果React应该跳过更新,返回false。

通常来讲React的优化是基于shouldComponentUpdate的,该生命周期默认返回true,所以一旦prop或state有任何变化,都会引起重新render。shouldComponentUpdate

react在每个组件生命周期更新的时候都会调用一个shouldComponentUpdate(nextProps,nextState)函数。它的职责就是返回true或false,true表示需要更新,那样说也对false表示不需要,默认返回为true,即便你没有显示地定义shouldComponentUpdate函数。这就不难解释上面发生的资源浪费了。

为了进一步说明问题,我们再引用一张官网的图来解释,如下图(SCU表示shouldComponentUpdate,绿色表示返回true(需要更新),一直都这样想红色表示返回false(不需要更新);vDOMEq表示虚拟DOM比对,绿色表示一致(不需要更新)╊,红色表示发生改变(需要更新)):

根据渲染流程,首先会判断shouldComponentUpdate(SCU)是否需要更新。如果需要更新,一直都这样想则调用组件的render生成新的虚拟DOM,然后再与旧的虚拟DOM对比(vDOMEq),如果对比一致就不更新,如果对比不同,则根据最小粒度改变去更新DOM;如果SCU不需要更新,则直接保持不变,同时其子元素也保持不变。

前段时间,我们组花了些时间去优化了一下我们一个react项目,经常这样认为主要是营收下降了而且还被客户投诉了,说是使用太卡顿,周五收到的消息,老板让我们尽快解决这个问题,没办法只能硬着头皮上,接下来就是各种总结会,然后就是一系列的讨论,我记得那天讨论的很晚,列出了以下几个影响性能的点:

第二个问题我们参考了对代码进行了一定程度的调优,然后run了一下项目,虽然流畅度有提升,但还不是很理想,那样说也对卡顿问题七九存在,尤其是在IE上基本还处于不可用状态,接着我们就把目光放到了第三点,因为这个是一个从一开始做项目我们就知道的点,我们曾经也做过一些优化尝试,比如对一些组件加shouldComponentUpdate来减少一些不必要的重绘,但是结果引入了更多的问题,现在我们的项目已经很复杂了,项目中还使用了redux,只有部分顶层容器组件才连接到了store,父子组件件的数据是通过props来进行的,而且很多子组件都是直接传递了一个大对象给他而不是小组件确切关心的那部分小数据,这样导致大对象中任意一个变量d所以对于渲染次数的优化,可以从两方面入手:

大致来讲2、还是从shouldComponentUpdate入手,对于函数来说有个截留的概念┏,shouldComponentUpdate也是一个函数,我们能不能做截留呢?顺着这个思路我们写出了第一段代码:...shouldComponentUpdate(){this.timerclearTimeout(this.timer)this.timer=setTimeout(()=gt{returntrue})returnfalse}...

使用过react的人一看就知道这段代码不仅达不到我们想要的效果还会带来新的问题,难道这条路行不通吗?我们可以换个思路,react组件我们可以看做是一个类,类中有很多方法,shouldComponentUpdate是其中一个,函数的this指向了组件这个类,差不多可以那么我们是不是可以直接调用组件渲染方法呢?结果这个此方法是可行的,不过调用的不是render方法而是另外一个forceUpdate的方法,最终代码:...shouldComponentUpdate(){this.timerclearTimeout(this.timer)this.timer=setTimeout(()=gt{this.forceUpdate()})returnfalse}...

当然这种做法是相当暴力的react如何seo,差不多可以但是这个暴力的做法确实造就了奇迹,达到了我们想要的效果,所以在使用这种方法时react如何seo,一定要慎重,虽然这个做法不会直接对数据产生影响,但是如果出问题对于渲染来说影响是很大的,不过相对于其他做法来说确实容易了很多,而且影响也减少了不少。记完,收工!前段时间,我们组花了些时间去优化了一下我们一个react项目,主要是营收下降了而且还被客户投诉了,说是使用太卡顿,周五收到的消息,老板让我们尽快解决这个问题,没办法只能硬着头皮上,接下来就是各种总结会,然后就是一系列的讨论,我记得那天讨论的很晚,列出了以下几个影响性能的点:

?以上就是关于《react如何seo》的详细讲解,本文由轩辕SEO培训收集于网络不代表本站观点,如果您还想了解seo详细内容以及项目合作,请直接联系轩辕qq或微信。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: