<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        你必須知道的10個提高Canvas性能技巧

        來源:懂視網 責編:小采 時間:2020-11-09 08:23:49
        文檔

        你必須知道的10個提高Canvas性能技巧

        你必須知道的10個提高Canvas性能技巧:你還在抱怨自己寫的canvas demo徘徊在10幀以下嗎?你還在煩惱打開自己寫的應用就聽見CUP風扇轉嗎?你正在寫一個javascript Canvas庫嗎?那么下面九點就是你必須知道的! 一.預渲染 錯誤代碼: var canvas = document.getElementById
        推薦度:
        導讀你必須知道的10個提高Canvas性能技巧:你還在抱怨自己寫的canvas demo徘徊在10幀以下嗎?你還在煩惱打開自己寫的應用就聽見CUP風扇轉嗎?你正在寫一個javascript Canvas庫嗎?那么下面九點就是你必須知道的! 一.預渲染 錯誤代碼: var canvas = document.getElementById

        你還在抱怨自己寫的canvas demo徘徊在10幀以下嗎?你還在煩惱打開自己寫的應用就聽見CUP風扇轉嗎?你正在寫一個javascript Canvas庫嗎?那么下面九點就是你必須知道的! 一.預渲染 錯誤代碼: var canvas = document.getElementById( "myCanvas" ); var cont

        你還在抱怨自己寫的canvas demo徘徊在10幀以下嗎?你還在煩惱打開自己寫的應用就聽見CUP風扇轉嗎?你正在寫一個javascript Canvas庫嗎?那么下面九點就是你必須知道的!

        一.預渲染

        錯誤代碼:

         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的寬度和高度控制得越小越好。

        二.盡量少調用canvasAPI

        錯誤代碼:

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

        錯誤代碼:

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

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

        錯誤代碼:

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

        正確代碼:

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

        五.復雜場景使用多層畫布

         
        
        
        
        

        六.不要使用陰影

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

        七.清除畫布

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

        八.像素級別操作盡量用整數

        幾種取整數的方法:

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

        九.使用requestAnimationFrame制作游戲或動畫

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

        十.其他

        與渲染無關的計算交給worker

        復雜的計算交給引擎(自己寫,或者用開源的),比如3D、物理

        緩存load好的圖片,canvas上畫canvas,而不是畫image

        同步

        本文已同步更新至:

        HTML5實驗室【目錄】: http://www.cnblogs.com/iamzhanglei/archive/2011/11/06/2237870.html

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        你必須知道的10個提高Canvas性能技巧

        你必須知道的10個提高Canvas性能技巧:你還在抱怨自己寫的canvas demo徘徊在10幀以下嗎?你還在煩惱打開自己寫的應用就聽見CUP風扇轉嗎?你正在寫一個javascript Canvas庫嗎?那么下面九點就是你必須知道的! 一.預渲染 錯誤代碼: var canvas = document.getElementById
        推薦度:
        標簽: 知道 10 技巧
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 一本久久a久久精品亚洲| 免费国产在线观看老王影院| 亚洲伊人色欲综合网| yy一级毛片免费视频| 亚洲成a人片在线播放| 牛牛在线精品免费视频观看| 免费人成年激情视频在线观看| jizzjizz亚洲日本少妇| 四虎永久免费影院在线| 色吊丝性永久免费看码| 亚洲精品无码不卡在线播放HE| 18禁超污无遮挡无码免费网站| 久久久久久久久亚洲| 女人体1963午夜免费视频| 91亚洲精品第一综合不卡播放| 中文字幕免费高清视频| 亚洲 欧洲 自拍 另类 校园| 国产成人在线观看免费网站 | 国产精品亚洲综合一区| 国产福利免费视频| 亚洲AV无码不卡在线播放| 曰曰鲁夜夜免费播放视频 | 思思久久99热免费精品6| 国产日产亚洲系列| 亚洲香蕉免费有线视频| 美女免费视频一区二区三区| 久久亚洲中文字幕精品一区| 麻花传媒剧在线mv免费观看| 亚洲小说图区综合在线| 久久久久亚洲精品无码网址| 88av免费观看| 牛牛在线精品免费视频观看| 久久水蜜桃亚洲av无码精品麻豆| 久久这里只有精品国产免费10| 女bbbbxxxx另类亚洲| 亚洲国产精品热久久| 噜噜嘿在线视频免费观看| 成人免费一区二区三区 | 亚洲 小说区 图片区 都市| 久章草在线精品视频免费观看| 亚洲国产精品久久久久秋霞小|