Open maisui99 opened 8 years ago
Canvas Cache就是使用一个额外的Canvas来保存已经绘制过的内容,下一次使用的时候直接从这个Canvas上读取,这样就可以大大减少Canvas的绘制次数,例如原先首屏绘制次数约为75左右,使用cache后的次数约为28,减少了62.67%,在三四环会更明显,因为没有动画,所有内容都可以cache。
实测设备越低端性能提升越明显,下面是一个页面在不同平台下的消耗时间对比:
从结果看效果还是很明显的,而且这个只是缓存了6次绘制的结果,实际使用中会缓存个数约为50左右,效果会更明显。
一开始使用一个Canvas直接缓存所有内容,后来发现Canvas大小是有限制的,然后就实现了一个自动切片成多个Canvas Cache的方案,这套cache方案后面会集成到Hilo中。
针对Canvas的最主要优化方案就是尽量减少Canvas API的调用,在对狂欢城做了大量profile后,发现Hilo中每次drawImage都会调用ctx.save();ctx.translate(x, y);ctx.drawImage(...);ctx.restore();,这里Hilo主要是为了保证在所有情况(例如缩放,旋转等)下均不出错,所以才这样处理,但是再狂欢城中并不需要做旋转等复杂的变换,所以将这里的绘制直接改为使用ctx.drawImage来实现。这样可以节省大量运行时间,因为在狂欢城基本上全是图片!
ctx.save();ctx.translate(x, y);ctx.drawImage(...);ctx.restore();
ctx.drawImage
实测性能提升非常明显,下面是消耗时间对比:
在低端设备上使用1倍图片,减少内存占用,并且不显示动画。
background-image: cdn-url('island-brand-bg-pc.png');
background-image: url('//gw.alicdn.com/tfscom/TB1urfGKXXXXXXBaXXX_pYDSXXX-937-595.png');
如果你看了这篇文章,对加入天猫前端团队有意向的,可以发简历到join-tmallfe@list.alibaba-inc.com,招聘要求见:https://job.alibaba.com/zhaopin/position_detail.htm?positionId=3504
性能
Canvas Cache
Canvas Cache就是使用一个额外的Canvas来保存已经绘制过的内容,下一次使用的时候直接从这个Canvas上读取,这样就可以大大减少Canvas的绘制次数,例如原先首屏绘制次数约为75左右,使用cache后的次数约为28,减少了62.67%,在三四环会更明显,因为没有动画,所有内容都可以cache。
实测设备越低端性能提升越明显,下面是一个页面在不同平台下的消耗时间对比:
从结果看效果还是很明显的,而且这个只是缓存了6次绘制的结果,实际使用中会缓存个数约为50左右,效果会更明显。
一开始使用一个Canvas直接缓存所有内容,后来发现Canvas大小是有限制的,然后就实现了一个自动切片成多个Canvas Cache的方案,这套cache方案后面会集成到Hilo中。
Hilo 定制优化
针对Canvas的最主要优化方案就是尽量减少Canvas API的调用,在对狂欢城做了大量profile后,发现Hilo中每次drawImage都会调用
ctx.save();ctx.translate(x, y);ctx.drawImage(...);ctx.restore();
,这里Hilo主要是为了保证在所有情况(例如缩放,旋转等)下均不出错,所以才这样处理,但是再狂欢城中并不需要做旋转等复杂的变换,所以将这里的绘制直接改为使用ctx.drawImage
来实现。这样可以节省大量运行时间,因为在狂欢城基本上全是图片!实测性能提升非常明显,下面是消耗时间对比:
视窗内渲染,懒加载及加载限流
地皮拼合绘制场景
低端设备降级
在低端设备上使用1倍图片,减少内存占用,并且不显示动画。
开发效率
background-image: cdn-url('island-brand-bg-pc.png');
这样最后会变成background-image: url('//gw.alicdn.com/tfscom/TB1urfGKXXXXXXBaXXX_pYDSXXX-937-595.png');
,这样写less的时候就不需要关心图片地址问题,图片上传问题,图片压缩等问题。感悟
天猫前端团队招聘
如果你看了这篇文章,对加入天猫前端团队有意向的,可以发简历到join-tmallfe@list.alibaba-inc.com,招聘要求见:https://job.alibaba.com/zhaopin/position_detail.htm?positionId=3504