在开发贪吃蛇过程中,用数组来计算蛇经过的点,每个蛇头和蛇身用两点来存储,正常情况前进 是每次都走一个点的距离。当进行加速时每次都两个点。这样就能进行加速前进了。
之前写过贪吃蛇前进性能分析,在此在叙述下,
首先上一张图在有15条蛇,同时每个的长度是50000个身体,在进行前进的时候遍历这么多申请GameLogic 占用时间多主要用到了array的push 和unshift。
------优化前-----------
-----优化后-------
从原理就可以知道,unshift的效率是较低的。原因是,它每添加一个元素,都要把现有元素往下移一个位置。但到底效率差异有多大呢?下面来测试一下。
以下代码是默认array 的测试数据和自定义链表的测试数据。
let array = [] let arrayLabel: string = 'array push性能测试(毫秒)'; console.time(arrayLabel); //push性能测试 for (let i = 0; i < 50000; i++) { array.push(i); } console.timeEnd(arrayLabel); let linkList = new LinkList<number>(); arrayLabel = 'linkList push性能测试(毫秒)'; console.time(arrayLabel); //push性能测试 for (let i = 0; i < 50000; i++) { linkList.push(i); } console.timeEnd(arrayLabel); arrayLabel = 'array unshift 性能测试(毫秒)'; array = [ ]; //unshift性能测试 console.time(arrayLabel); for (let i = 0; i < 50000; i++) { array.unshift(i); } console.timeEnd(arrayLabel); arrayLabel = 'linkList unshift 性能测试(毫秒)'; let linkList2 = new LinkList<number>(); //unshift性能测试 console.time(arrayLabel); for (let i = 0; i < 50000; i++) { linkList.unshift(i); } console.timeEnd(arrayLabel); arrayLabel = 'array push 一个 性能测试(毫秒)'; console.time(arrayLabel); array.push(121212); console.timeEnd(arrayLabel); arrayLabel = 'linkList push 一个性能测试(毫秒)'; console.time(arrayLabel); linkList.push(121212); console.timeEnd(arrayLabel); arrayLabel = 'array unshift 一个 性能测试(毫秒)'; console.time(arrayLabel); array.unshift(121212); console.timeEnd(arrayLabel); arrayLabel = 'linkList unshift 一个性能测试(毫秒)'; console.time(arrayLabel); linkList.unshift(121212); console.timeEnd(arrayLabel);
以下为详细代码: