当前位置: 首页 > news >正文

打车网站开发微信网站响应式网站

打车网站开发,微信网站响应式网站,免费推广平台排行,网站密码管理制度说起数据加载的机制,有一个绕不开的话题就是前端性能,很多电商门户的首页其实都会做一些垂直的定制优化,比如让请求在页面最早加载,或者在前一个页面就进行预加载等等。随着react18的发布,请求机制这一块也是被不断谈起…

说起数据加载的机制,有一个绕不开的话题就是前端性能,很多电商门户的首页其实都会做一些垂直的定制优化,比如让请求在页面最早加载,或者在前一个页面就进行预加载等等。随着react18的发布,请求机制这一块也是被不断谈起,并且在后续其实也给出了明确的方向。

假如我们页面中有三个组件C1、C2、C3依次嵌套,每个组件中有对应的请求F1、F2、F3,通常大多数人会使用useeffect和state变量来实现数据流的获取,这样就意味着必须在组件加载时才能发起请求,所有数据获取都发生在组件的生命周期中,如下图所示,我们可以将这种获取数据的方式称作瀑布流渲染,但是这种方式有一个问题是,在这种方法中,组件之间的数据获取是按顺序进行的,这实际上意味着它们彼此阻塞,如果组件的层级嵌套很深的话,就会导致页面的加载时间特别长。

render then fetch.png

为了阻止组件间数据获取的这种顺序阻塞,另一种方法就是在组件加载前可以使用Promise.all获取所有的请求数据,这样在组件加载时就已经获取到所有的数据了。这种方式解决了组件加载顺序阻塞彼此数据流获取的问题,但是也产生了一个新的问题,在请求完成之前页面都会是空白的。

先请求再渲染.png

基于第二种先请求后渲染的方式,还可以使用Suspense将请求和渲染并行化,Suspense 可以使得组件可以“等待”某些操作结束后,再进行渲染。而这种方式如果要用到实际项目中,还需要考虑C1、C2、C3对应的请求写在哪里,如果写在组件中,那么加载还是慢的。如果拆分出来,就需要考虑文件拆分、code splitting等工程化问题。

边请求边渲染.png

在认真的分析了以上三种方式以后,发现各有优劣,同时基于上述方案,我也提供一个请求优化的思路,首先将请求的JS单独拆分出来打一个文件request.js,在html头部引入request.js并使用async属性让脚本并行执行(如下代码所示),这样既可以保证我们的请求在最开始就能发出,也能不阻塞后续React代码打包的js文件的执行,相当请求和渲染的代码在并行执行。

// html头部引入request.js
<script async src="/js/request.js"></script>

在发送完请求之后,需要将返回的数据注入到React组件中,这部分怎么注入呢?简单的代码示例如下:

// request.js 中请求部分 evt是发布订阅模式的一个实例
window.InitData = {data: null,on: (msg, fn) => evt.on(msg, e => fn(e)),emit: (msg, data) => evt.emit(msg, data),
};fetch().then(rs => {InitData.data = rs;InitData.emit("init_data", rs);return rs;
});
// index.js react代码逻辑…….useEffect(() => {if (InitData.data !== null) {// 这里已经获取到了请求的返回值doSomething();} else {InitData.on("init_data", (data) => {			// 利用发布订阅模式获取到数据doSomething();});}
}, []);…….

总体思路就是在html中最先加载单独打包出来的请求文件并加入async属性使脚本并行执行,将返回的数据挂载到window下或者利用发布订阅模式将数据注入到react组件中。这样其实类似于边请求边渲染的模式,利用提前请求来减少加载的时间。后续也是希望能用工程化的方式去解决数据的请求机制。

未来的话在开发时肯定是更倾向于边请求边渲染的这种模式,在React的官网中也有说到未来计划让Suspense 处理更多的场景,包括获取数据等等,在新发布的React18中Suspense也是支持了服务端渲染,包括近期开源的remix也都在优化请求机制能够让应用更快的加载。也欢迎有兴趣的小伙伴一起来讨论和实践。

作者:京东零售 梁峰峰

来源:京东云开发者社区

http://www.yayakq.cn/news/941579/

相关文章:

  • 网站到期查询wordpress mysql port
  • 学校门户网站建设管理办法wordpress添加记录
  • 大型网站开发语言排名网络营销策划的定义
  • 网站创建器株洲网站建设网站建设
  • wordpress 默认评论桂林网站优化公司
  • 厦门安岭路网站建设徐州seo推广公司
  • 简单的网站源码怎样在百度上做网站
  • 云服务器可以放几个网站做编程的网站一个月多少钱
  • 建自己的网站做外贸vs2013 网站建设
  • 网站404是什么意思海南网站建设推广
  • 网站制作价格多少钱长沙php网站建设
  • 专业的网站公司到哪里找安卓手机搭建网页
  • 仙游住房与城乡建设局网站东莞百度快照优化排名
  • 怎么修改自己公司网站客户关系管理系统功能
  • 深圳营销型网站建网站建设类文章要发多少片
  • 网站建设教论坛诸暨做网站广告的电话
  • 百度首页网站推广多少钱一年wordpress点赞插件
  • 找出网站所有死链接wordpress get cat id
  • 网站301是什么网站效果检测
  • 做旅游计划的网站wordpress静态cdn
  • 福州公司网站建设一定要用主流程序php语言网站模块如何添加
  • 建站方案书怎么免费制作企业网站
  • 网站开发流程图和介绍自建网站需要什么手续
  • 怎么建自己的摄影网站网站使用特殊字体
  • 商城小程序开发报价平原县网站seo优化排名
  • 如何写代码做网站6网站建设流程分为哪几个阶段
  • 福州企业网站企业网站建设电话
  • 杭州行业网站建设wordpress不能添加文章
  • 精通网站建设 100浦东做营销网站
  • 小米网站建设书中国建设银行网站首页下载