<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
        主站蜘蛛池模板: 国产精品综合专区中文字幕免费播放| 亚洲熟妇av一区| 免费一级毛suv好看的国产网站 | 最好免费观看高清在线| 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲美女视频一区| 57pao国产成永久免费视频| 亚洲黄色在线观看视频| 日韩免费一区二区三区在线| 亚洲av永久无码嘿嘿嘿| 亚洲国产天堂久久综合网站| 久久国产乱子免费精品| 91精品国产亚洲爽啪在线观看| 亚洲视频免费播放| 亚洲色少妇熟女11p| 国产乱子伦片免费观看中字| 亚洲图片在线观看| 99久久免费国产精品特黄| 亚洲狠狠综合久久| 男人的好看免费观看在线视频 | 久久aⅴ免费观看| 亚洲国产精品久久久久秋霞影院| 大学生一级毛片免费看| 黄网站色视频免费观看45分钟 | 免费污视频在线观看| 亚洲不卡中文字幕| 免费人妻av无码专区| 久久爰www免费人成| 亚洲偷偷自拍高清| 免费观看无遮挡www的视频| 亚洲国产成人久久精品大牛影视| 亚洲无码日韩精品第一页| 免费国产成人18在线观看| 亚洲中文字幕日本无线码| 亚洲免费一区二区| 91短视频在线免费观看| 青草久久精品亚洲综合专区| 性做久久久久免费看| 两性色午夜视频免费播放| 久久精品国产亚洲AV久| 亚洲精品视频在线看|