国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

你必須知道的10個(gè)提高Canvas性能技巧

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 08:23:49
文檔

你必須知道的10個(gè)提高Canvas性能技巧

你必須知道的10個(gè)提高Canvas性能技巧:你還在抱怨自己寫(xiě)的canvas demo徘徊在10幀以下嗎?你還在煩惱打開(kāi)自己寫(xiě)的應(yīng)用就聽(tīng)見(jiàn)CUP風(fēng)扇轉(zhuǎn)嗎?你正在寫(xiě)一個(gè)javascript Canvas庫(kù)嗎?那么下面九點(diǎn)就是你必須知道的! 一.預(yù)渲染 錯(cuò)誤代碼: var canvas = document.getElementById
推薦度:
導(dǎo)讀你必須知道的10個(gè)提高Canvas性能技巧:你還在抱怨自己寫(xiě)的canvas demo徘徊在10幀以下嗎?你還在煩惱打開(kāi)自己寫(xiě)的應(yīng)用就聽(tīng)見(jiàn)CUP風(fēng)扇轉(zhuǎn)嗎?你正在寫(xiě)一個(gè)javascript Canvas庫(kù)嗎?那么下面九點(diǎn)就是你必須知道的! 一.預(yù)渲染 錯(cuò)誤代碼: var canvas = document.getElementById

你還在抱怨自己寫(xiě)的canvas demo徘徊在10幀以下嗎?你還在煩惱打開(kāi)自己寫(xiě)的應(yīng)用就聽(tīng)見(jiàn)CUP風(fēng)扇轉(zhuǎn)嗎?你正在寫(xiě)一個(gè)javascript Canvas庫(kù)嗎?那么下面九點(diǎn)就是你必須知道的! 一.預(yù)渲染 錯(cuò)誤代碼: var canvas = document.getElementById( "myCanvas" ); var cont

你還在抱怨自己寫(xiě)的canvas demo徘徊在10幀以下嗎?你還在煩惱打開(kāi)自己寫(xiě)的應(yīng)用就聽(tīng)見(jiàn)CUP風(fēng)扇轉(zhuǎn)嗎?你正在寫(xiě)一個(gè)javascript Canvas庫(kù)嗎?那么下面九點(diǎn)就是你必須知道的!

一.預(yù)渲染

錯(cuò)誤代碼:

 var canvas = document.getElementById("myCanvas");
 var context = this.canvas.getContext('2d');
 var drawAsync = eval(Jscex.compile("async", function () {
 while (true) {
 drawMario(context);
 $await(Jscex.Async.sleep(1000));
 }
 }))
 drawAsync().start();

正確代碼:

 var canvas = document.getElementById("myCanvas");
 var context = this.canvas.getContext('2d');
 var m_canvas = document.createElement('canvas');
m_canvas.width = 64;
 m_canvas.height = 64;
 var m_context = m_canvas.getContext('2d');
 drawMario(m_context);
 var drawAsync = eval(Jscex.compile("async", function () {
 while (true) {
 context.drawImage(m_canvas, 0, 0);
 $await(Jscex.Async.sleep(1000));
 }
 }))
 drawAsync().start();

這里m_canvas的寬度和高度控制得越小越好。

二.盡量少調(diào)用canvasAPI

錯(cuò)誤代碼:

 
 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狀態(tài)

錯(cuò)誤代碼:

 for (var i = 0; i < STRIPES; i++) {
 context.fillStyle = (i % 2 ? COLOR1 : COLOR2);
 context.fillRect(i * GAP, 0, GAP, 480);
 } 

正確代碼:

 context.fillStyle = COLOR1;
 for (var i = 0; i < STRIPES / 2; i++) {
 context.fillRect((i * 2) * GAP, 0, GAP, 480);
 }
 context.fillStyle = COLOR2;
 for (var i = 0; i < STRIPES / 2; i++) {
 context.fillRect((i * 2 + 1) * GAP, 0, GAP, 480);
 }

四.重新渲染的范圍盡量小

錯(cuò)誤代碼:

 context.fillRect(0, 0, canvas.width, canvas.height); 

正確代碼:

 context.fillRect(20, 20, 100, 100);

五.復(fù)雜場(chǎng)景使用多層畫(huà)布

 



六.不要使用陰影

 context.shadowOffsetX = 5;
 context.shadowOffsetY = 5;
 context.shadowBlur = 4;
 context.shadowColor = 'rgba(255, 0, 0, 0.5)';
 context.fillRect(20, 20, 150, 100);

七.清除畫(huà)布

詳細(xì)性能差別:
http://simonsarris.com/blog/346-how-you-clear-your-canvas-matters
一般情況下:clearRect的性能優(yōu)于fillRect優(yōu)于canvas.width = canvas.width;

八.像素級(jí)別操作盡量用整數(shù)

幾種取整數(shù)的方法:

rounded = (0.5 + somenum) | 0;
rounded = ~ ~(0.5 + somenum);
rounded = (0.5 + somenum) << 0;

九.使用requestAnimationFrame制作游戲或動(dòng)畫(huà)

(function () {
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
window.cancelAnimationFrame =
window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
}

if (!window.requestAnimationFrame)
window.requestAnimationFrame = function (callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function () { callback(currTime + timeToCall); },
timeToCall);
lastTime = currTime + timeToCall;
return id;
};

if (!window.cancelAnimationFrame)
window.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
} ());

十.其他

與渲染無(wú)關(guān)的計(jì)算交給worker

復(fù)雜的計(jì)算交給引擎(自己寫(xiě),或者用開(kāi)源的),比如3D、物理

緩存load好的圖片,canvas上畫(huà)canvas,而不是畫(huà)image

同步

本文已同步更新至:

HTML5實(shí)驗(yàn)室【目錄】: http://www.cnblogs.com/iamzhanglei/archive/2011/11/06/2237870.html

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

你必須知道的10個(gè)提高Canvas性能技巧

你必須知道的10個(gè)提高Canvas性能技巧:你還在抱怨自己寫(xiě)的canvas demo徘徊在10幀以下嗎?你還在煩惱打開(kāi)自己寫(xiě)的應(yīng)用就聽(tīng)見(jiàn)CUP風(fēng)扇轉(zhuǎn)嗎?你正在寫(xiě)一個(gè)javascript Canvas庫(kù)嗎?那么下面九點(diǎn)就是你必須知道的! 一.預(yù)渲染 錯(cuò)誤代碼: var canvas = document.getElementById
推薦度:
標(biāo)簽: 知道 10 技巧
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日韩欧美91 | 国产精品久久久天天影视香蕉 | 欧美激情一区二区三区不卡 | 中文字幕精品一区二区精品 | 亚洲欧美字幕 | 久久国产综合精品欧美 | 欧美色欧美亚洲另类 | 香蕉视频911| 福利二区视频 | 国产一区二区在线播放 | 欧美日韩精品一区二区三区 | 国产亚洲欧美一区二区 | 久久精品国产亚洲 | 一本色道久久88综合亚洲精品高清 | 欧美精品一区二区精品久久 | 青青热久久国产久精品 | 国产精品久久久久久免费播放 | 国产在线精品一区二区 | 免费看男女做好爽好硬视频 | 午夜精品久久久久久毛片 | 亚洲欧美国产精品 | 精品久久久久久综合日本 | 国产午夜视频在线观看 | 性久久久久久久 | 日韩欧美国产精品第一页不卡 | 九九九国产在线 | 综合 欧美 国产 视频二区 | 日本 黄 a| 精品国产亚一区二区三区 | 伊人久久精品一区二区三区 | 欧美日韩亚洲天堂 | 成人欧美精品久久久久影院 | 欧美日韩免费在线观看 | 亚洲一区二区三区高清 不卡 | 免费视频国产 | 亚洲四色 | 亚洲 欧美 自拍 另类 | 黄色毛片免费观看 | 亚洲第一页在线 | 午夜精品久久久久久91 | 国产a久久精品一区二区三区 |