pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

HTML5 Canvas的性能提高技巧經(jīng)驗(yàn)分享_html5教程技巧

HTML5 Canvas的性能提高技巧經(jīng)驗(yàn)分享_html5教程技巧HTML5中文學(xué)習(xí)網(wǎng),是中國(guó)最大的HTML5中文門(mén)戶,為廣大HTML5愛(ài)好者提供各種HTML5資料,包括HTML5網(wǎng)站、HTML5資訊、HTML5應(yīng)用、HTML5游戲、HTML5教
點(diǎn)評(píng):本文為大家講解下使用緩存技術(shù)實(shí)現(xiàn)預(yù)繪制,減少重復(fù)繪制Canvs內(nèi)容以及避免使用浮點(diǎn)數(shù)坐標(biāo)等來(lái)提高HTML5 Canvas的性能,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助
 
 

使用緩存技術(shù)實(shí)現(xiàn)預(yù)繪制,減少重復(fù)繪制Canvs內(nèi)容
很多時(shí)候我們?cè)贑anvas上繪制與更新,總是會(huì)保留一些不變的內(nèi)容,對(duì)于這些內(nèi)容
應(yīng)該預(yù)先繪制緩存,而不是每次刷新。
直接繪制代碼如下:

 

復(fù)制代碼
代碼如下:

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


使用緩存預(yù)繪制技術(shù):

 

復(fù)制代碼
代碼如下:

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緩存繪制技術(shù)的時(shí)候,一定記得緩存Canvas對(duì)象大小要小于實(shí)際的Canvas 大小。盡量把繪制直線點(diǎn)的操作放在一起,而且盡量一次繪制完成,一個(gè)不好的代碼如下:

 

復(fù)制代碼
代碼如下:

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();
}
 


修改以后性能較高的代碼如下:

 

復(fù)制代碼
代碼如下:

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繪制狀態(tài)頻繁切換,一個(gè)頻繁切換繪制style的例子如下:

 

復(fù)制代碼
代碼如下:

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


避免頻繁切換繪制狀態(tài),性能更好的繪制代碼如下:

 

復(fù)制代碼
代碼如下:

// 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);
}
 


繪制時(shí),只繪制需要更新的區(qū)域,任何時(shí)候都要避免不必要的重復(fù)繪制與額外開(kāi)銷(xiāo)。對(duì)于復(fù)雜的場(chǎng)景繪制使用分層繪制技術(shù),分為前景與背景分別繪制。定義Canvas層的
HTML如下:

 

復(fù)制代碼
代碼如下:

<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>
 


如果沒(méi)有必要,要盡量避免使用繪制特效,如陰影,模糊等。

避免使用浮點(diǎn)數(shù)坐標(biāo)
繪制圖形時(shí),長(zhǎng)度與坐標(biāo)應(yīng)選取整數(shù)而不是浮點(diǎn)數(shù),原因在于Canvas支持半個(gè)像素繪制會(huì)根據(jù)小數(shù)位實(shí)現(xiàn)插值算法實(shí)現(xiàn)繪制圖像的反鋸齒效果,如果沒(méi)有必要請(qǐng)不要選擇浮點(diǎn)數(shù)值。

清空Canvas上的繪制內(nèi)容
context.clearRect(0, 0, canvas.width,canvas.height)
但是其實(shí)在Canvas還有一種類(lèi)似hack的清空方法:
canvas.width = canvas.width;
也可以實(shí)現(xiàn)清空canvas上內(nèi)容的效果,但是在某些瀏覽器上可能不支持。
 

 
 
【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了有關(guān)HTML5頁(yè)面在iPhoneX適配問(wèn)題,需要的朋友可以參考下
本篇文章主要介紹了html5中canvas圖表實(shí)現(xiàn)柱狀圖的示例,本文使用canvas來(lái)實(shí)現(xiàn)一個(gè)圖表,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
Adobe公司出品的多媒體處理軟件產(chǎn)品線較多,涵蓋了音視頻編輯、圖像處理、平面設(shè)計(jì)、影視后期等領(lǐng)域。這篇文章主要介紹了Adobe Html5 Extension開(kāi)發(fā)初體驗(yàn)圖文教程,非常不錯(cuò),需要的朋
這篇文章主要介紹了基于HTML5的WebGL經(jīng)典3D虛擬機(jī)房漫游動(dòng)畫(huà),需要的朋友可以參考下
這篇文章主要介紹了html5實(shí)現(xiàn)移動(dòng)端適配完美寫(xiě)法,需要的朋友可以參考下
本篇文章主要介紹了HTML5響應(yīng)式(自適應(yīng))網(wǎng)頁(yè)設(shè)計(jì)的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
主站蜘蛛池模板: 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 磷酸肌酸二钠盐,肌酐磷酰氯-沾化欣瑞康生物科技 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 留学生辅导网-在线课程论文辅导-留学生挂科申诉机构 | 电缆桥架生产厂家_槽式/梯式_热镀锌线槽_广东东莞雷正电气 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 黄石东方妇产医院_黄石妇科医院哪家好_黄石无痛人流医院 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 写方案网_方案策划方案模板下载| LOGO设计_品牌设计_VI设计 - 特创易 | 凝胶成像仪,化学发光凝胶成像系统,凝胶成像分析系统-上海培清科技有限公司 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 护栏打桩机-打桩机厂家-恒新重工 | 温泉机设备|温泉小镇规划设计|碳酸泉设备 - 大连连邦温泉科技 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 南京精锋制刀有限公司-纵剪机刀片_滚剪机刀片_合金刀片厂家 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 |