正在加载
请稍等

菜单

文章

Home 京东白条套现 项目布景
Home 京东白条套现 项目布景

项目布景

京东白条套现 by

  在 code_pc 项目中,前端需要利用 rrweb 对教员讲授内容进行录制,学员能够进行录制回放。为减小录制文件体积,当前的录制策略是先录制一次全量快照,后续录制增量快照,录制阶段现实就是通过 MutationObserver 监听 DOM 元素变化,然后将一个个事务 push 到数组中。

  为了进行持久化存储,能够将录制数据压缩后序列化为 JSON 文件。教员会将 JSON 文件放入课件包中,打成压缩包上传到教务系统中。学员回放时,前端会先下载压缩包,通过 JSZip 解压,取到 JSON 文件后,反序列化再解压后,获得原始的录制数据,再传入 rrwebPlayer 实现录制回放。

  在项目开辟阶段,测试录制都不会太长,因而录制文件体积不大(在几百 kb),回放比力流利。但跟着项目进入测试阶段,模仿长时间上课场景的录制之后,发觉录制文件变得很大,达到 10-20 M,QA 同窗反映打开学员回放页面的时候,页面较着卡顿,卡登时间在 20s 以上,在这段时间内,页面交互事务没有任何响应。

  页面机能是影响用户体验的次要要素,对于如斯长时间的页面卡顿,用户明显是无法接管的。

  颠末组内沟通后得知,可能导致页面卡顿的次要有两方面要素:前端解压 zip 包,和录制回放文件加载。同事思疑次要是 zip 包解压的问题,同时但愿我测验考试将解压过程放到 worker 线程中进行。那么能否确实好像事所说,前端解压 zip 包导致页面卡顿呢?

  对于页面卡顿问题,起首想到必定是线程堵塞惹起的,这就需要排查哪里呈现长使命。

  所谓长使命是指施行耗时在 50ms 以上的使命,大师晓得 Chrome 浏览器页面衬着和 V8 引擎用的是一个线程,若是 JS 脚本施行耗时太长,就会堵塞衬着线程,进而导致页面卡顿。

  对于 JS 施行耗时阐发,这块大师该当都晓得利用 performance 面板。在 performance 面板中,通过看火焰图阐发 call stack 和施行耗时。火焰图中每一个方块的宽度代表施行耗时,方块叠加的高度代表挪用栈的深度。

  能够看到,replayRRweb 明显是一个长使命,耗时接近 18s ,严峻堵塞了主线程。

  而 replayRRweb 耗时过长又是由于内部两个挪用惹起的,别离是右边浅绿色部门和左边深绿色部门。我们来看下挪用栈,看看哪里哪里耗时比力严峻:

  熟悉 Vue 源码的同窗可能曾经看出来了,上面这些耗时比力严峻的方式,都是 Vue 内部递归响应式的方式(左边显示这些方式来自 vue.runtime.esm.js)。

  为什么这些方式会长时间占用主线程呢?在 Vue 机能优化中有一条:不要将复杂对象丢到 data 里面,不然会 Vue 会深度遍历对象中的属性添加 getter、setter(即便这些数据不需要用于视图衬着),进而导致机能问题。

  在上面的代码中,建立了一个 rrwebPlayer 实例,并赋值给 rrWebplayer 的响应式数据。在建立实例的时候,还接管了一个 eventsRes 数组,这个数组很是大,包含几万条数据。

  数据没有事后定义在 data 选项中,而是在组件实例 created 之后再动态定义 this.rrwebPlayer (没有事先辈行依赖收集,不会递归响应式);

  数据事后定义在 data 选项中,可是后续点窜形态的时候,对象颠末 Object.freeze 处置(让 Vue 忽略该对象的响应式处置);

  数据定义在组件实例之外,以模块私有变量形式定义(这种体例要留意内存泄露问题,Vue 不会在组件卸载的时候销毁形态);

  从头加载页面,能够看到这时候页面虽然还卡顿,可是卡登时间较着缩短到5秒内了。察看火焰图可知,replayRRweb 挪用栈下,递归响应式的挪用栈曾经消逝不见了:

  能够看到问题仍是出在 replayRRweb 这个函数里面,到底是哪一步呢:

  因为 rrweb 录制回放 需要进行 dom 操作,必需在主线程运转,不克不及利用 worker 线程(获取不到 dom API)。对于主线程中的长使命,很容易想到的就是通过 时间分片,将长使命朋分成一个个小使命,通过事务轮回进行使命安排,在主线程空闲且当前帧有空闲时间的时候,施行使命,不然就衬着下一帧。方案确定了,下面就是选择哪个 API 和怎样朋分使命的问题。

  这里有同窗可能会提出疑问,为什么 unpack 过程不克不及放到 worker 线程施行,worker

  线程中对数据解压之后前往给主线程加载并回放,如许不就能够实现非堵塞了吗?

  若是细心想一想,当 worker 线程中进行 unpack,主线程必需期待,直到数据解压完成才能进行回放,这跟间接在主线程中 unpack

  没有素质区别。worker 线程只要在有若干并行使命需要施行的时候,才具有机能劣势。

  提到时间分片,良多同窗可能城市想到 requestIdleCallback 这个 API。requestIdleCallback 能够在浏览器衬着一帧的空闲时间施行使命,从而不堵塞页面衬着、UI 交互事务等。目标是为领会决当使命需要长时间占用主历程,导致更高优先级使命(如动画或事务使命),无法及时响应,而带来的页面丢帧(卡死)环境。因而,requestIdleCallback 的定位是处置不主要且不告急的使命。

  中衬着使命竣事且还有残剩时间,才会施行。这种环境下,下一帧需要在 requestIdleCallback 施行竣事才能继续衬着,所以

  30ms,若是长时间不将节制权交还给浏览器,会影响下一帧的衬着,导致页面呈现卡顿和事务响应不及时。

  如许看来 requestIdleCallback 似乎很完满,可否间接用在现实营业场景中呢?谜底是不可。我们查阅 MDN 文档就能够发觉,requestIdleCallback 还只是一个尝试性 API,浏览器兼容性一般:

  查阅 caniuse 也获得雷同的结论,所有 IE 浏览器不支撑,safari 默认环境下不启用:

  并且还有一个问题,requestIdleCallback 触发频次不不变,受良多要素影响。颠末现实测试,FPS 只要 20ms 摆布,一般环境下衬着一帧时长节制在16.67ms 。

  在项目中,考虑到 api fallback 方案、以及支撑打消使命功能(上面的代码比力简单,仅仅只要添加使命功能,无法打消使命),最终选用 React 官方源码实现。

  查阅 rrweb 文档得知,rrWebplayer 实例上供给一个 addEvent 方式,用于动态添加回放数据,可用于及时直播等场景。按照这个思绪,我们能够将录制回放数据进行分片,分多次挪用 addEvent 添加。

  按照上面的方案,我们从头加载学员回放页面看看,此刻曾经根基察觉不到卡顿了。我们找一个 20M 大文件加载,察看下火焰图可知,录制文件加载使命曾经被朋分为一条条很细的小使命,每个使命施行的时间在 10-20ms 摆布,曾经不会较着堵塞主线程了:

  优化后,页面仍有卡顿,这是由于我们拆分使命的粒度是 100 条,这种环境下加载录制回放仍有压力,我们察看 fps 只要十几,会有卡顿感。我们继续将粒度调整到 10 条,这时候页面加载较着流利了,根基上 fps 能达到 50 以上,但录制回放加载的总时间略微变长了。利用时间分片体例能够避免页面卡死,可是录制回放的加载平均还需要几秒钟时间,部门大文件可能需要十秒摆布,我们在这种耗时使命处置的时候加一个 loading 结果,以防用户在录制文件加载完成之前就起头播放。

  有同窗可能会问,既然都加 loading 了,为什么还要时间分片呢?假如不进行时间分片,因为 JS 脚本不断占用主线程,堵塞 UI 线程,这个 loading 动画是不会展现的,只要通过时间分片的体例,把主线程让出来,才能让一些优先级更高的使命(例如 UI 衬着、页面交互事务)施行,如许 loading 动画就无机会展现了。

  利用时间分片并不是没出缺点,正如上面提到的,录制回放加载的总时间略微变长了。可是好在 10-20M 录制文件只出此刻测试场景中,教员现实上课录制的文件都在 10M 以下,颠末测试录制回放能够在 2s 摆布就加载完毕,学员不会期待好久。

  假如后续录制文件很大,需要怎样优化呢?之前提到的 unpack 过程,我们没有放到 worker 线程施行,这是由于考虑到放在 worker 线程,主线程还得期待 worker 线程施行完毕,跟放在主线程施行没有区别。可是遭到时间分片开导,我们能够将 unpack 的使命也进行分片处置,然后按照 navigator.hardwareConcurrency 这个 API,开启多线程(线程数等于用户 CPU 逻辑内核数),以并行的体例施行 unpack ,因为操纵多核 CPU 机能,该当可以或许显著提拔录制文件加载速度。

  这篇文章中,我们通过 performance 面板的火焰图阐发了挪用栈和施行耗时,进而排查出两个惹起机能问题的要素:Vue 复杂对象递归响应式,和录制回放文件加载。

  对于 Vue 复杂对象递归响应式惹起的耗时问题,本文提出的处理方案是,将该对象转为非响应式数据。对于录制回放文件加载惹起的耗时问题,本文提出的方案是利用时间分片。

  因为 requestIdleCallback API 的兼容性及触发频次不不变问题,本文参考了 React 17 源码阐发了若何实现 requestIdleCallback 安排,并最终采用 React 源码实现了时间分片。颠末现实测试,优化前页面卡顿 20s 摆布,优化后曾经察觉不到卡顿,fps 能达到 50 以上。可是利用时间分片之后,录制文件加载时间略微变长了。后续的优化标的目的是将 unpack 过程进行分片,开启多线程,以并行体例施行 unpack,充实操纵多核 CPU 机能。

  思否手艺前锋年度榜单正式发布。网易有道手艺团队同时登榜思否年度手艺团队榜单和中国手艺品牌影响力企业。

  2022年1月13日,SegmentFault 思否作为中国领先的新一代开辟者社区,按照社区用户行为大数据(如文章 & 问答发布数量、获得声望 & 点赞量等)分析阐发,评选出了 30 个最精采的年度手艺团队。

  本次最终评选出 30 支年度手艺团队,有道手艺团队入选,登上思否2021中国手艺前锋年度榜单,荣获思否年度手艺团队称号。

  本文为网易有道企业成长高级效能项目司理张浩然《研发效能实践助力互联网行业项目办理“行之无效”》的演讲内容,环绕研发效能的实践和项目办理两个主题展开。

  我写分享PPT的时候,开初想的是针对于互联网行业的项目办理。但此刻不止是互联网,保守行业也在做数字化转型。所以,这个项目办理是全行业都能够一路切磋的。我之前做研发,后面次要做项目办理,过程中做过一段时间的产物办理。目上次要在网易有道企业成长部,做整个研发效能的推广和项目办理的提拔。

  有道纵横是网易有道旗下专为4-8岁孩子量身制造的在线年启动,自研了全国首部在线交互式围棋动漫课程,从孩子的理解力和爱好出发,采用直播互动的课程形式将围棋学问变得简单风趣、易懂勤学,协助孩子控制围棋的各类法则和技巧。不只如斯,课后还设有AI棋战功能,可以或许智能识别孩子的段位程度婚配对局操练,从根源培育孩子的思维习惯。每局棋战竣事后的智能阐发,会从大局观、计较力、不变性、战役和棋型五方面进行全方位阐发,协助孩子在复盘中前进。

  Google旗下Deepmind提出的AlphaGo、AlphaGo Zero、AlphaZero系列算法展现了深度强化进修在棋类范畴超凡的能力。2016年AlphaGo横空出生避世击败欧洲围棋冠军樊麾二段,2017年以4:1击败韩国围棋职业九段,14个世界冠军得主李世石,2018年无师自通的AlphaGo Zero以3:0击败最年轻的六冠王柯洁九段。至此当前再无人质疑AI在围棋范畴的霸主地位,同时激发了职业棋手进修AI招法的高潮。退职业围棋赛场上,时常呈现“狗招”,进修、研究AI招法的背后的逻辑,已是职业棋手的必修课。

  本次以Redis为典范,阐述了有道根本架构团队在根本设备容器化道路上的实践,次要将从声明式办理,Operator工作道理,容器编排,主从模式,集群模式,高可用策略,集群扩缩容等方面展开。

  Redis 是营业系统中较为常用的缓存办事,常用于流量高峰、数据阐发、积分排序等场景,而且通过两头件能够实现系统之间的解耦,提拔系统的可扩展性。

  保守物理机摆设两头件,需要运维人员手动搭建,启动时间较长,也晦气于后期维护,无法满足营业快速成长的需求。

  云原生相较于保守IT,能够助力营业滑润迁徙、快速开辟、不变运维,大幅降低手艺成本,节约硬件资本。

  云原生两头件是指依托容器化、办事网格、微办事、Serverless等手艺,建立可扩展的根本设备,持续交付用于出产系统的根本软件,在功能不变的前提下,提高了使用的可用性与不变性。

  在这种大趋向下,有道根本架构团队起头了云原生两头件的实践,除了本文引见的 Redis,还包罗 Elasticsearch、ZooKeeper 等。

  自 2017 年 10 月推出有道翻译蛋起头,网易有道已先后推出了二十余款智能进修硬件产物,包罗有道翻译王、有道口袋打印机、有道超等辞书、有道辞书笔、有道听力宝等。

  此中,有道辞书笔开创了智能辞书笔品类,持续两年获天猫、京东销量第一,并广受用户好评。

  在近期有道辞书笔的全新软件升级中(联系关系阅读:全新软件升级!真的很有料),有两个主要的优化,别离是:

  欢迎咨询花呗提现取现服务,全网长期提供花呗、白条、任性付、信用咔等各种线上金融消费额度兑现服务,了解更多花呗白条任性付怎么提现?蚂蚁花呗怎么自己套?花呗24小时全天接单?花呗可以转帐吗?花呗怎么套出来?京东白条怎么提现?全网花呗提现哪家安全靠普?
兑现详情咨询:十幅图 1692706143 微信QQ同号
我们竭诚为您服务!安全、快速、便捷、认准我们!
十幅图花呗提现官方网站:www.shifutu.cc

注:目前商家成本高 点数很低的基本不靠谱 请勿因小失大
诚信保障QQ:97820711 诚信微信:1692706143 备用客服2QQ:236050769

 

12 2022-04

 

我要 分享

 

 

相关 文章

 

 

');