首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Fanvas技术解密】HTML5 canvas实现脏区

先说明一下,fanvas是笔者在企鹅公司开发的,即将开源的flash转canvas工具。 脏区(dirty rectangle)并不是一门新鲜的技术了,这在最早2D游戏诞生的时候就已经存在。...这相比整屏的面积小了几十倍,由于canvas 2d使用的是CPU处理,那么相应地,CPU处理的像素个数就少了很多倍,顺理成章,动画的效率就会提高。...看起来非常简单,大概来说,只需要2步: 1、找出这一帧变化的矩形区域; 2、利用canvas的api实现脏区。 但是,问题来了,怎么计算变化区域呢?canvas又是否提供了现成的接口呢?...接着,我们再来看第二步,canvas如何具体操作,是否有脏区接口? 其实,canvas并没有真正的脏区接口,不过有一个clip,这个一般用于实现遮罩,不过也可以取巧的用来实现脏区。...再复杂一些,当然大家可以自行根据脏区列表,重写每个元件的绘制方法,自行实现脏区,不过笔者估计啊,js写这么多逻辑,最终还是吃力不讨好。

2K20
您找到你想要的搜索结果了吗?
是的
没有找到

为什么我做的网页总是卡?前端性能优化规则要点

首屏快速显示可大大提升用户对页面速度的感知,应尽量针对首屏的快速显示做优化 「按需加载」:将不影响首屏的资源和当前屏幕不用的资源放到用户需要时才加载,可大大提升显示速度和降低总体流量(「按需加载会导致大量...写在尾部并异步」 「避免img、iframe等的src为空」:空src会重新加载当前页面,影响速度和效率 「尽量避免重置图像大小」:多次重置图像大小会引发图像的多次,影响性能 「图像尽量避免使用DataURL...监听帧变化:使得在正确的时间进行渲染 增加响应变化的时间间隔:减少次数 「GPU加速」:使用某些HTML5标签和CSS3属性会触发GPU渲染,请合理使用(「过渡使用会引发手机耗电量增加」) HTML...vertical-align display:table-*后不应该再使用float和margin 「不滥用float」:float在渲染时计算量比较大,尽量减少使用 「不滥用Web字体」:Web字体需要下载、解析、当前页面...-webkit-、-moz-、-ms-、无前缀四种:Opera改用blink内核,-o-已淘汰 「避免让选择符看起来像正则表达式」:高级选择符执行耗时长且不易读懂,避免使用 ❝「脚本优化」 ❞ 「减少和回流

1.7K20

HTML5技术干货:如何将LayaAir引擎性能发挥到极致

通用写法 Laya.Stat.show(0,0); //JS的面板调用写法 性能统计面板的参数 LayaAir引擎支持Canvas渲染模式与WebGL渲染模式,以下将分别对两种不同模式的参数进行逐一解释...Canvas 面板中Canvas表示缓存画布的数量,分别代表 (每帧的画布数量 / 缓存类型为”normal”类型的画布数量 / 缓存类型为”bitmap”类型的画布数量”)。...Canvas 面板中Canvas表示缓存画布的数量,分别代表 (每帧的画布数量 / 缓存类型为”normal”类型的画布数量 / 缓存类型为”bitmap”类型的画布数量”) CurMem...另外,不断时开销也比较大,但是会减少drawcall,渲染性能最高。 webGL下命令缓存模式只会减少节点遍历及命令组织,不会减少drawcall,性能中等。...另外,场景中不重的对象使用滤镜,也可以达到几乎无损耗的程度。

2.7K41

前端|利用画布制作地球轨道

一.什么是 画布标签常用于绘制图像,但是, 元素本身并没有绘制能力,它仅仅是图形的容器,要想通过画布标签来绘制图像,还需要调用js方法。...今天就利用 画布来绘制一下地球轨道的效果。 ? 图1.1 效果图 二.基础知识介绍 canvas只有height高度和width宽度两个属性。...这个方法是告诉浏览器执行动画,并请求浏览器调用指定的函数以在下次之前更新动画。该方法将回调作为在之前调用的参数。...注意:如果要在下次时为另一帧设置动画,则回调例程必须自己调用requestAnimationFrame()。...,false); // Earth orbit,关联关系,半径 = 地球相对第二原点(150,150) 向右移动的距离 ctx.stroke();//线

1.9K20

fabric.js和高级画板

fabric.js介绍 fabric.js是什么 fabric.js是可以简化canvas编写的js库,提供canvas缺少的对象模型,包含动画、数据序列号和反序列化的等高级功能的js库,开源项目,在GitHub...fabric.util.sin fabric.util.drawDashedLine 绘制虚线 getWidth() setWidth() getHeight() clear() 清空 renderAll() ...requestRenderAll() 请求重新渲染 rendercanvas() 绘画板 getCenter().top/left 获取中心坐标 toDatalessJSON() 画板信息序列化成最小的...= true; 可以自由绘制 canvas.selectable = false; 控件不能被选择,不会被操作 canvas.selection = true; 画板显示选中 canvas.skipTargetFind...= true; 整个画板元素不能被选中 canvas.freeDrawingBrush.color = "#E34F51" 设置自由绘画笔的颜色 freeDrawingBrush.width 自由笔触宽度

11.2K100

fabric.js和高级画板

fabric.js介绍 fabric.js是什么 fabric.js是可以简化canvas编写的js库,提供canvas缺少的对象模型,包含动画、数据序列号和反序列化的等高级功能的js库,开源项目,在GitHub...fabric.util.sin fabric.util.drawDashedLine 绘制虚线 getWidth() setWidth() getHeight() clear() 清空 renderAll() ...requestRenderAll() 请求重新渲染 rendercanvas() 绘画板 getCenter().top/left 获取中心坐标 toDatalessJSON() 画板信息序列化成最小的...= true; 可以自由绘制 canvas.selectable = false; 控件不能被选择,不会被操作 canvas.selection = true; 画板显示选中 canvas.skipTargetFind...= true; 整个画板元素不能被选中 canvas.freeDrawingBrush.color = "#E34F51" 设置自由绘画笔的颜色 freeDrawingBrush.width 自由笔触宽度

4.5K30

H5 常见性能优化和原理分析

浏览器的与回流 我们先说一个帧的概念,目前,大部分的设备屏幕的的刷新频率是60次/秒,也就是1000/60=1.6ms为一帧画面。...假设现在浏览器渲染一个动画的时间刚好为一帧,那么,这一帧的画面这会首先会重新计算style(css/dom等)接着回流,更新tree,再进行(painting),最后再进行图层合并(Composite...( repaint)即render tree 的本身一些属性更新了,但不影响整体的布局,只是改变了背景,颜色等等这就叫。 优化浏览器的页面渲染 前端性能优化最关键的就是减少页面的与回流。...优化浏览器页面渲染的原理 独立频繁渲染图层,把需要进行频繁回流的那个区块,拿出来作为一个单独的图层,使浏览器的回流范围减小,从而减少cpu的资源消耗。...因为,浏览器渲染的过程是这样的: 现将DOM分割成多个图层; 然后将每个层栅格化,并将节点绘制到图中; 然后图层作为纹理上传到GPU; 最后进行图层的重组,我们只要对那个需要操作的图层独立进行与回流就不会影响到其他的图层

1.2K71

前端动画大乱炖

Animations.png requestAnimationFrame requestAnimationFrame是浏览器用于定时循环操作的一个接口,类似于setTimeout,主要用途是按帧对网页进行...代码中使用这个API,就是告诉浏览器希望执行一个动画,让浏览器在下一个动画帧安排一次网页。...demo.style.left) <= 300) requestAnimationFrame(arguments.callee); }); cancelAnimationFrame方法用于取消...,并且或回流的时间间隔紧紧跟随显示器的刷新频率(60 Hz或者75 Hz); 在隐藏或不可见的元素中,将不会进行或回流,这当然就意味着更少的的cpu,gpu和内存使用量; 目前,主要浏览器Firefox...格式保存结果图像; 最适合图像密集型的游戏,其中的许多对象会被频繁重; 大多数 Canvas 绘图 API 都没有定义在 元素本身上,而是定义在通过画布的getContext()方法获得的一个

1.1K20

前端性能优化指南

首屏快速显示可大大提升用户对页面速度的感知,应尽量针对首屏的快速显示做优化 「按需加载」:将不影响首屏的资源和当前屏幕不用的资源放到用户需要时才加载,可大大提升显示速度和降低总体流量(「按需加载会导致大量...写在尾部并异步」 「避免img、iframe等的src为空」:空src会重新加载当前页面,影响速度和效率 「尽量避免重置图像大小」:多次重置图像大小会引发图像的多次,影响性能 「图像尽量避免使用DataURL...监听帧变化:使得在正确的时间进行渲染 增加响应变化的时间间隔:减少次数 「GPU加速」:使用某些HTML5标签和CSS3属性会触发GPU渲染,请合理使用(「过渡使用会引发手机耗电量增加」) HTML...vertical-align display:table-*后不应该再使用float和margin 「不滥用float」:float在渲染时计算量比较大,尽量减少使用 「不滥用Web字体」:Web字体需要下载、解析、当前页面...-webkit-、-moz-、-ms-、无前缀四种:Opera改用blink内核,-o-已淘汰 「避免让选择符看起来像正则表达式」:高级选择符执行耗时长且不易读懂,避免使用 ❝「脚本优化」 ❞ 「减少和回流

1.2K50

canvas绘制动画原理及案例讲解(绘制小恐龙动画、时钟等)

常用的绘制方法 canvas上绘制内容是要在js脚本执行结束之后才能看到结果,所以我们不能在for循环中完成动画的绘制,而是常用一些浏览器内置的方法: setTimeout(code, milliseconds...该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次之前执行。...requestAnimationFrame的到来就是解决这个问题的 ,requestAnimationFrame是浏览器用于定时循环操作的一个接口,类似于setTimeout,主要用途是按帧对网页进行...代码中使用这个API,就是告诉浏览器希望执行一个动画,让浏览器在下一个动画帧安排一次网页。 requestAnimationFrame的优势,在于充分利用显示器的刷新机制,比较节省系统资源。...显示器有固定的刷新频率(60Hz或75Hz),也就是说,每秒最多只能60次或75次,requestAnimationFrame的基本思想就是与这个刷新频率保持同步,利用这个刷新频率进行页面

2.8K30

WebGL简易教程(八):三维场景交互

刷新 2.2. 鼠标事件调整参数 3. 结果 4. 参考 1. 概述 在上一篇教程《WebGL简易教程(七):绘制一个矩形体》中,通过一个绘制矩形包围盒的实例,进一步理解了模型视图投影变换。...gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW); return indices.length; } 与之前的代码相比,这里主要改进了两个方面的内容:刷新和鼠标事件调整参数...刷新 与之前只绘制一次场景不同,为了满足浏览交互工作,页面就必须实时刷新,来满足不同的鼠标、键盘事件对场景的影响。...可以使用JS的requestAnimationFrame()函数进行定时刷新操作。其函数定义如下: ?...以此循环往复,页面会不停的请求调用绘制tick(),从而带到了刷新的效果。 前面提到过,刷新每一帧之前,都要清空颜色缓冲区和深度缓冲区,不让上一帧的效果影响到下一帧。

97220

Flutter 绘制探索 5 | 深入分析范围 RepaintBoundary | 七日打卡

系列引言 可能说起 Flutter 绘制,大家第一反应就是用 CustomPaint 组件,自定义 CustomPainter 对象来画。...经过测试,发现仍存在一些莫名的 paint 被的场景。本文就来深入探究一下这些情况,已及对应的解决方案。 ---- 一、滑动中的莫名 1....这样滑动时,就不会触发 ShapePainter#paint 的,这时,你的心里肯定会有一个大大的问号,Why? 下面就来一起探索吧。 ?...---- 4.RepaintBoundary 组件的原理 其实原理超级简单,比如在旧版的里面,在 2 节点绘制时,会触发 5 的。...如果你的绘制中出现了频繁触发的异常,那么 RepaintBoundary 一定会帮助你。

3.8K31

第10步《前端篇》第3章完成交互功能第7课

主要知识点/技能点 所谓动画,就是视图内容不停地擦除与。...JS 是单线程,同一时间只能执行一个任务,同步任务在主线程中会依次执行。在主线程上发起的异步操作,会交给另外一个看不见的异步线程执行和管理,不会阻塞主线程的执行。...JS 有 13 种复合赋值运算符,复合赋值运算符等于先运算,再以运算结果赋值。具体运算符号略。 在 Canvas API中,clearRect 方法可以清空画布上给定矩形区域内的像素。...在 HTML5 页面开发中,浏览器提供了一个 requestAnimationFrame 函数,这个函数可以要求宿主环境在下一次视图之前执行某个回调函数,它对改善动画卡顿有明显效果。...小结 动画就是不断的擦除与,基于requestAnimationFrame函数在桢频更新的间隙实现,是HTML5与小游戏画布绘制保证界面不卡顿的秘诀。

52320

【面试系列一】如何回答如何理解重排和

就是页面结构没有变化,只是外观变了,比如改了一下字体颜色、背景颜色这样的。就只会发生。 “当然他说的也没错,我也不能直接说他错,就继续引导” 面试官:那重排和有什么关系吗?...候选人:重排一定会导致不一定会导致重排。 面试官:为什么呢? 候选人:因为重排结构发生变化了嘛,肯定会导致。...之后,只有受影响的屏幕区域会被,浏览器被优化为只需要绘制的最小区域。 绘制时间取决于何种类型的更新被附加在渲染树上。...比如你遇到了首屏加载的性能问题,你就要根据开发者工具,比如看 network 是否是由于资源体积太大导致请求,还是后端处理,还是资源太多了加载....如果这些都不是,可能是因为 渲染,再去分析 performce 面板,看一下是 js 执行,还是啥原因。

1.3K71

Flutter 绘制探索 1 | CustomPainter 正确刷新姿势 | 七日打卡

通过对源码的分析和研究后,会发现对于 CustomPainter 的,有一个更高效的刷新方式。本文就来分享一下这个非常重要的知识点。...第一次 第二次 ---- 3.画板基于监听器的 (推荐) 在刚才 ValueListenableBuilder 版的基础上稍作修改,我们就可以完成这个需求。...通过 CustomPainter 的注释可以发现,触发最高效的方式都是基于可监听对象 实现的。...并在某些恰当的时刻,使用该对象触发相应方法进行画布。 ---- 3....其实这也很容易理解: 动画 和 滑动 的触发频率非常高,所以才会用特殊的方式进行。 那么画板的必须只是通过 可监听对象 吗?

1K21

cocos2d-js 和 createjs 性能对比(HTML5)

cocos2d-js:使用webGL,帧频不断变化,最高有55fps,最低只有29fps。 ? 如果让cocos2d-js强制在canvas 2d模式下渲染,帧频只有26fps左右。...在这个实验中,两者差异的原因主要是cocos2d-js使用了webgl渲染,可以让部分矩阵计算放到GPU,而createjs使用纯canvas 2d渲染,只能依赖CPU计算矩阵变换,导致每帧的计算超过了时间间隔...接着,我们再做一个手机canvas的实验,测试机是小米1 Android 2.3,可谓是低端情况的canvas 2d,代表了一大批山寨机水平吧。...cocos2d-js: ? createjs: ? 小结: 总体来说,由于cocos2d-js可以在webgl上渲染,所以性能会比createjs要好。...单纯比较在canvas 2d上的渲染来说,createjs和cocos2d-js不相伯仲,没太大区别,尤其在手机(Android)上基本都是废物,手机的canvas2d游戏/动画只能尽量避免全屏,减少每帧的变化

2.1K40
领券