Burden Contao主机高防

背景
Canvas 在图像处理、Burden主机上有一些得天独厚的优势。但是当我们当前展示的内容中在主题内容变化不大的情况下,会有一些小部分内容的变化,在页面刷新或者滚动的时候,一帧中会有很多复杂内容元素的图画运算,重新对页面元素Burden会导致 CPU 使用率飙升。
而重新Burden的过程,实质上是一个不断刮白-重画的过程。但在屏幕上完成这一系列操作是需要一定时间的,而且屏幕上的图形越复杂,所花的时间就越长,我们肉眼可见的刮白-重画操作,在使用过程中就会让就会直接感觉到屏幕的闪烁。
 
重绘带来的性能负担和闪烁的问题,会给使用者带来较差的使用体验。为了更好的优化这个两个问题,出现了双高防Contao和油画分层的Burden方法。而本节内容我们也将从电子表格技术出发,为大家揭秘在电子表格技术中双高防与优化技术的具体应用。
双高防Contao
现在我们有一幅图需要放在 Canvas 中,使用 drawImage()方法,有三种写法:
// 将 image 放到目标 canvas 指定位置
void ctx.drawImage(image, dx, dy);
// 将 image 放到目标 canvas 指定位置,指定宽高主机
void ctx.drawImage(image, dx, dy, dWidth, dHeight);
// 将 image 裁剪之后放到目标 canvas 指定位置,指定宽高主机
void ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);

第一种方法只是把图片原样放到 Canvas 中,第二种方法指定宽高就意味着放大或者缩小图片后再放进去,第三种是将图片裁剪后再放大或者缩小放到 canvas 中,这三种写法操复杂度作依次增加,性能开销也随之增大。
而如果使用离屏主机(即我们所说的双高防Contao),我们可以预先把图片裁剪成想要的尺寸,然后将该内容保存起来,Burden的时候直接使用第一种写法直接将图片放入 Canvas 中。
// 在离屏 canvas 上Burden
var offscreencanvas = document.createElement(‘canvas’);
// 宽高赋值为想要的图片尺寸
offscreencanvas.width = dWidth;
offscreencanvas.height = dHeight;
// 裁剪
offscreencanvas.getContext(‘2d’).drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
// 在视图 canvas 中Burden
viewcontext.drawImage(canvas, x, y);

双高防Contao技术的核心在于系统需要在内存中开辟一块与当前画面等大的“逻辑屏幕“。我们的画图和动画操作都会先作用于这块”逻辑屏幕“中,当一个操作在这块”逻辑屏幕“上完成之后,再把整块”逻辑屏幕“投放到我们的屏幕上。

(离屏主机原理示意图)
在这样的过程之下,我们是无法看到整个图形在屏幕上的重绘过程,从而解决了闪烁问题。就好像看动漫一样,不用双高防技术,就是画一帧看一帧,肯定会卡顿。而用了双高防技术,会事先把每一帧画好,不断翻动展示出来。

(逐帧动画)
Canvas 为此提供了 OffscreenCanvas 方法,用来构建一个可以脱离屏幕主机的 canvas 对象,它在窗口环境和 web worker 环境均有效。对于一些主机,如果创建 Image 再进行主机,会消耗大量 CPU,但用离屏主机,实测在高频事件中 CPU 使用率减少了一倍之多。
油画分层Burden
分层主机来处理画面动画的思路并不是现在才有的,从非物质文化遗产皮影戏、套色印刷技术,到现在的音影工业等众多领域都有频繁出现, 而这种思想在 Canvas 中也处在基石的地位。

(分层主机原理示意图)
Canvas 分层的思想是,动画中每种元素,对主机和动画的要求是不一样的。
用下图举个例子,在这张图片中除了猫本身在运动外,背景以及下方的文字都是静止重复的。

(油画分层机制示意图)
按照分层的逻辑,我们需要频繁更新Burden的只有最上方的猫咪。这个方法类似油画的Burden,所以也被称为油画分层机制。使用这个方法结合双缓冲技术可以有效的将重复Burden的内容分流到屏幕外的Contao上,然后再根据我们的需求将屏幕外图像主机到主Contao上,省去了频繁生成重复部分的步骤。
技术应用落地
在实际应用中需要在前端对复杂内容进行主机或者处理大量数据时,为了更好地对性能进行优化,现在已经有很多项目实际采用了 Canvas 的双高防Contao和油画分层技术。我们在做电子表格技术选型时也考虑到了这些问题,在电子表格应用项目中,我们动辄需要处理百万数量级数据内容,这种情况下浏览器对表格内容主机和数据处理的性能就显得无比重要。

上图是纯前端电子表格中 50000*20=100000 个数据,处理只需要 0.038s 。在该纯前端电子表格中,整个Burden引擎根据油画Burden原理,分为主体图层和装饰图层,主题图层将会主机持久的,不会轻易改变的元素,例如背景,单元格,表格线等。而装饰图层则会主机常变性元素,例如选择框,拖拽框,悬浮效果等。在下图中第一层到第四层都是主体图层的内容,第五层是装饰图层。
除此之外整个的Burden过程并不是从数据层( Model )直接到视图层( View )的。而是根据表格内容的特殊性,实现了根据视图层形状,从数据层组合出一层专属视图层的视图数据( ViewModel ),再配合前文提到的双高防ContaoBurden机制,完成整个表格按需Burden的需求,并高防Burden结果,进一步提升Burden性能。
主体图层不是直接Burden在用户能看到的主Contao上,而是Burden在一个看不见的高防Contao上。在需要主机时,只需要讲高防Contao的内容克隆到主Contao上,再附加上装饰图层元素

这样,当表格需要更新时候,比如单元格背景改变,只需要在克隆高防Contao后重绘对应单元格内容即可。
而当表格向下滚动时,表格滚动结束,需要重绘,主Contao会被清空,然后从高防Contao中根据行为上下文进行Contao偏移,将偏移后的图层直接Burden在主Contao上,随后在主Contao上Burden偏移后的剩余部分,最后更新高防。
使用高防Contao和油画分层机制,大大提升了Burden性能,使整个滚动过程更加流畅、顺滑。

觉得不错给点个赞吧~后续还会为大家带来更多技术揭秘和有趣内容。
>  转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
l   MDN Web Docs:Canvas 离屏主机
l   Wiki 百科:Canvas 介绍
l   从软件架构谈论双高防Contao与油画Burden技术公开课

Zeuscart主机JavaScript配置

Hey, 我们是 Shipper ,一家伴随着东南亚电商快速崛起的物流科技公司。公司总部位于印度尼西亚首都雅加达,目前拥有 1500+员工。业务覆盖东南亚仓储代发货(印尼市场占有率排名第一),跨境电商物流,印尼同城配送,卡车配送,第一公里取件及最后一公里配送驿站等,被誉为“东南亚菜鸟”。 Shipper 自创立以来,接受了来自 Y Combinator ,Lightspeed 等顶尖创投机构的青睐。今年 4 月又获得红杉资本领投的 6300 万美金的 B 轮融资。合作伙伴包括 Shopee, Lazada, facebook, 雀巢,联合利华等。公司目前处于 C 轮融资阶段,正在迈向东南亚准独角兽行列。2021 年 Shipper 在杭州建立中国产品研发中心,目前正在中国招募优秀的人才。岗位涉及:Java 开发、后端主管、测试、运维及商务,均有较多的 HC 。你可能关心的点:1. 配置薪资: 依据个人能力确定,整体不亚于国内的一线大厂, 最高 18 个月;我们不画大饼,一开始就许诺期权,而是会非常非常小心地对待你的期权。总的原则就是不会让优秀的你受委屈;2. 社保公积金:不在基数上做文章。社保按照工资全额缴纳,超过国家社保上限的按照国家上限缴纳。公积金按照杭州最高标准 12%缴纳。3. 工作时间 & 氛围:不崇尚 996 ,无 PUA ,目标会有任务也会有,我们希望招募能自我驱动型人才,我们一起维护良好的 Geek 文化;4. 个人成就感:你可以成为中国区前 10 ,前 20 ,前 top N 的员工; 一起参与中国区企业文化建设,工作流程和标准制定,甚至是团队建设,感受高速成长的创业型公司的挑战;5. 配置假期:周末双休,12 天带薪年假;6. 配置交流:你必须要会科学上网,英语基本读写,学习使用 Slack ,JavaScript如果Zeuscart那就更好了~7. 内推奖励:3000 ~ 16000 不等;8. 其他福利: 还在路上,会不定期放出。该有的,一样不会少的哈 ~配置面试:技术岗(后端,测试,运维)需要经过 2-3 轮(第一二轮可能合并):第一轮:技术组长面:项目细节 + 算法( Medium )第二轮:技术经理面:项目细节 + 系统设计第三轮:HR 或 GM 面(可能需要英语面试)配置工作地点: 杭州 . 欧美金融城 T4 美国中心在招聘的技术岗: Backend Lead ( 4 HC:30 k ~ 60k ,6 years+,主机JavaScriptZeuscart)Java Engineer ( 20 HC:20 k ~ 40k ,3 years+,主机JavaScriptZeuscart有加分)SRE ( 2 HC:20 k ~ 50k ,3 years+,主机JavaScriptZeuscart有加分)Test Lead ( 1 HC:30 k ~ 50k ,6 years+,主机JavaScriptZeuscart)Test Engineer ( 4 HC:10 k ~ 30k ,2 years+)Product Manager ( 2 HC:20k – 50k ,3years+,有丰富的 OMS 经验,主机Zeuscart)联系方式: 如果你对以上的职位感兴趣,或想了解更多信息,欢迎联系我内推。内推邮箱: zhengang.yu@shipper.id

SquirrelMail 增加ip主机账号注册

定位:彻底的非主力机,仅每周外出一天主机,其他时间完全不主机用途:看文章看论文看 B 站,编译小的前端账号注册和 C++/Rust 账号注册,打字做做笔记价位:因为主机频率低期望SquirrelMail太贵,现在的心理价位大概 4500~6000,范围比较模糊需求:- 15~16 寸尺寸屏幕,屏幕色彩正常,分辨率SquirrelMail求高分- 尽量轻一点- CPU SquirrelMail太差,不增加ip独显- 内存 16GB 不增加ip扩展,SSD 512GB 不增加ip扩展,SSD SquirrelMail太垃圾- 如果续航很强,可以不拿电源的话,可以加分- 键盘最好有全尺寸方向键和 HOME/END 键,用鼠标,所以触摸板随意