HTML5 Canvas的性能提高技巧经验分享

使用缓存技术实现预绘制,减少重复绘制Canvs内容
很多时候我们在Canvas上绘制与更新,总是会保留一些不变的内容,对于这些内容
应该预先绘制缓存,而不是每次刷新。
直接绘制代码如下:
 

复制代码
代码如下:

context.font="24px Arial";
context.fillStyle="blue";
context.fillText("Please press <Esc> to exit game",5,50);
requestAnimationFrame(render);

使用缓存预绘制技术:

复制代码
代码如下:

function render(context) {
context.drawImage(mText_canvas, 0, 0);
requestAnimationFrame(render);
}
function drawText(context) {
mText_canvas = document.createElement("canvas");
mText_canvas.width = 450;
mText_canvas.height = 54;
var m_context = mText_canvas.getContext("2d");
m_context.font="24px Arial";
m_context.fillStyle="blue";
m_context.fillText("Please press <Esc> to exit game",5,50);
}

使用Canvas缓存绘制技术的时候,一定记得缓存Canvas对象大小要小于实际的Canvas 大小。尽量把绘制直线点的操作放在一起,而且尽量一次绘制完成,一个不好的代码如下:

复制代码
代码如下:

for (var i = 0; i < points.length - 1; i++) {
var p1 = points[i];
var p2 = points[i+1];
context.beginPath();
context.moveTo(p1.x, p1.y);
context.lineTo(p2.x, p2.y);
context.stroke();
}

修改以后性能较高的代码如下:

复制代码
代码如下:

context.beginPath();
for (var i = 0; i < points.length - 1; i++) {
var p1 = points[i];
var p2 = points[i+1];
context.moveTo(p1.x, p1.y);
context.lineTo(p2.x, p2.y);
}
context.stroke();

避免不必要的Canvas绘制状态频繁切换,一个频繁切换绘制style的例子如下:

复制代码
代码如下:

var GAP = 10;
for(var i=0; i<10; i++) {
context.fillStyle = (i % 2 ? "blue" : "red");
context.fillRect(0, i * GAP, 400, GAP);
}

避免频繁切换绘制状态,性能更好的绘制代码如下:

复制代码
代码如下:

// even
context.fillStyle = "red";
for (var i = 0; i < 5; i++) {
context.fillRect(0, (i*2) * GAP, 400, GAP);
}
// odd
context.fillStyle = "blue";
for (var i = 0; i < 5; i++) {
context.fillRect(0, (i*2+1) * GAP, 400, GAP);
}

绘制时,只绘制需要更新的区域,任何时候都要避免不必要的重复绘制与额外开销。对于复杂的场景绘制使用分层绘制技术,分为前景与背景分别绘制。定义Canvas层的
HTML如下:

复制代码
代码如下:

<canvas id="bg" width="640" height="480" style="position: absolute; z-index: 0">
</canvas>
<canvas id="fg" width="640" height="480" style="position: absolute; z-index: 1">
<SPAN style="FONT-SIZE: 18px"></canvas>
</SPAN>

如果没有必要,要尽量避免使用绘制特效,如阴影,模糊等。

避免使用浮点数坐标
绘制图形时,长度与坐标应选取整数而不是浮点数,原因在于Canvas支持半个像素绘制会根据小数位实现插值算法实现绘制图像的反锯齿效果,如果没有必要请不要选择浮点数值。

清空Canvas上的绘制内容
context.clearRect(0, 0, canvas.width,canvas.height)
但是其实在Canvas还有一种类似hack的清空方法:
canvas.width = canvas.width;
也可以实现清空canvas上内容的效果,但是在某些浏览器上可能不支持。

时间: 2024-08-31 06:39:19

HTML5 Canvas的性能提高技巧经验分享的相关文章

photoshop八个抢救废片的好用技巧经验分享

给各位photoshop软件的使用者们来详细的解析分享一下八个抢救废片的好用技巧经验. 分享一览: 分享八个修复废片的简单技巧,分别是二次构图.直接填色.混乱色温.黑白反差.直方图.拒绝肉片.过度锐化.局部锐化. 每次拍完照片在电脑上检查时,发现不少照片都有问题,比如构图不好,欠曝或者过曝.画面模糊等.对这些照片删掉又觉可惜,但又没有时间进行精细调整,怎么办?下面老狼给大家介绍几个简单粗暴方法,在应对大量照片时,很管用.   一.二次构图,裁出好照片 许多人拍照,按快门的速度快于大脑的思考速度.

photoshop淘宝化妆品类修图及技巧经验分享

给各位photoshop软件的使用者们来详细的解析分享一下淘宝化妆品类修图及技巧经验. 分享一览: 各步骤分解:   开始之前介绍下三种基础的布光方法,其实就是跟产品拍摄布光一样的. 基本上修图都是根据这三种方法来的,不同的只是多加了几道光来增加层次. 或者还有更深的布光我也不了解,修图其实就是还原产品拍摄,或者是拍摄做不到的再来后期修出来. 如总结的不到位欢迎补全. 单侧光:现在大部分产品都是这样的.   对称光:   中亮光:适合透明瓶体,如卸妆油.精油等.   有些产品是不需要加反光的,反

Illustrator矢量设计软件使用技巧经验分享

给各位Illustrator软件的使用者们来详细的解析分享一下矢量设计软件的使用技巧经验. 技巧分享: Illustrator做的字体怎么变弯曲与路径 工具栏上的文本工具是一个工具组,左键单击文本工具不放可以弹出他的组工具,里面有路径文本工具. 使用方法:先利用钢笔工具或者其他图形工具,像你给出来的图就用圆形工具画出圆,然后用路径文本工具,当鼠标移到圆边上的时候有有反应,点击就可以输入文字了,其他路径方法相同! 另外在菜单栏的文本菜单里有路径文本,当成功创建路径文本后,子菜单生效,里面有路径文本

Illustrator路径实用设计技巧经验分享

给各位 Illustrator软件的使用者们来详细的解析分享一下路径实用的设计技巧经验. 分享一览:       好了,以上的信息就是小编给各位Illustrator的这一款软件的使用者们带来的详细的路径实用的设计技巧经验解析分享的全部内容了,各位看到这里的使用者们,小编相信大家现在是很清楚了吧,希望小编上面的教程能给大家带去有用的帮助.

网站性能提高实战经验点滴记录_相关技巧

DB: 1.数据库可以适当设计一些冗余字段来减少联合查询 2.经常查询的字段要建立索引 3.查询内容尽量简洁, 比如cakephp中的查询尽量设置$this->recursive=-1,并指定fields. 4.数据库用单独的服务器,有条件的常用查询数据单独分库 5.把session等数据放在Memcache而不是数据库中既能满足多服务器之间共享也能降低数据库的负载. 参考如下文章: http://www.linuxjournal.com/article/7451?page=0,1 6.Bad

TUP第十三期:客户端性能优化实战经验分享

8月25日下午,CSDN TUP第十三期"架构师沙龙快时代之客户端优化"在北京丽亭华苑酒店举行.暴风影音播放研发总监黄森堂.搜狗研发总监李子拓和鲜果CEO梁公军担任本次活动讲师,分别从PC和Moblie两个方面分享了客户端性能优化的实战经验. 合理的架构设计,对客户端后期优化至关重要 暴风影音播放器一直因为"慢",而引发用户诸多抱怨.新发布的暴风影音5在启动速度上较暴风影音3提升了3倍.暴风影音播放研发总监黄森堂以暴风影音5的研发为案例,分享了暴风影音在实现&quo

连接WEB数据库的ADO性能提高技巧

ado|web|技巧|数据|数据库|性能 ADO(ActiveX Data Object)是ASP的重要组件,内置于ASP.ASP用Database Access组件与后台数据库进行连接.Database Access 组件通过 ADO 访问存储在数据库或其他表格化数据库结构中的信息.因此,与过去编写CGI程序访问数据库信息相比,ADO已成为当今开发者们最喜欢的恢复和修改SQL_SERVER数据库数据的常用Database Access 组件.然而,ADO的默认设置并不总是最优化的设置,要想开发

论坛日常管理技巧经验分享 写给广大版主

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天给了一篇[论坛运营的思路及建议-写给新街口站长的信].之后特意去网上搜了一下关于论坛日常管理技巧的文章却少的可怜.版主其实在论坛里扮演着至关重要的角色,如果说论坛是一个国家,论坛的站长就是皇帝,而版主就是大臣,他们分管着整个国家各项事务的处理.一个优秀的版主可以很好的带动论坛的互动性,一个亲和的版主可以提高论坛的粘稠度.一个严格的版主可以

Photoshop性能优化技巧心得分享

给各位Photoshop软件的使用者们来详细的解析分享一下性能优化的技巧心得. 教程分享: 一.文件大小和尺寸 作为一名UI设计师,笔者通常使用的文件格式就是PSD,为了确保图像的兼容性,Adobe对PSD文件的大小限定为最大2GB.当PS运行变慢的时候,你第一件要做的事情就应该是检查文件大小.如果你的应用的每一屏都在同一个PSD里面,文件大小可以非常快就确定下来,尤其是你还要添加图层组合的时候. 在Photoshop CC 14.2以后的版本,PS中新增了"链接到智能对象"功能,该功