From fad49d69bf61a810369fadee8205e97746122c24 Mon Sep 17 00:00:00 2001 From: linghuam <1551827898@qq.com> Date: Fri, 28 Jun 2019 18:04:23 +0800 Subject: [PATCH] zrender --- b00-阅读笔记/zrender源码/z.md | 37 +++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/b00-阅读笔记/zrender源码/z.md b/b00-阅读笔记/zrender源码/z.md index 5d1fdc2..490bc13 100644 --- a/b00-阅读笔记/zrender源码/z.md +++ b/b00-阅读笔记/zrender源码/z.md @@ -228,7 +228,7 @@ else if (debugMode > 1) { ### LRU.js -doubly linked list. +优化后的双向链表,时间复杂度o(1)。 ```js linkedListProto.insertEntry = function (entry) { @@ -349,10 +349,39 @@ LRUProto.get = function (key) { ### PathProxy.js +Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中可以用于isInsidePath 判断以及获取boundingRect。 + +比原生Path的好处:1、数据可保存可恢复;2、支持bounding、isInside判断;3、可以封装一些自定义path; + + ```js +/* +保存 path 数据的思路: +1、用整数来表示绘制指令,cmd定义 +2、绘制的时候用普通数组 push 指令和坐标 +3、绘制完成(fill、stroke)时将普通数组转成 Float32Array 静态存储,减少堆内存占用 +*/ + +/** + * 转成静态的 Float32Array 减少堆内存占用 + * Convert dynamic array to static Float32Array + */ +function toStatic () { + var data = this.data; + if (data instanceof Array) { + data.length = this._len; + if (hasTypedArray) { + this.data = new Float32Array(data); + } + } +} +``` + ### timsort.js -https://github.com/mziccard/node-timsort -https://www.infopulse.com/blog/timsort-sorting-algorithm/ +时间复杂度为 nlogn 的排序算法 + +* [node-timsort](https://github.com/mziccard/node-timsort) +* [timsort-sorting-algorithm](https://www.infopulse.com/blog/timsort-sorting-algorithm/) ### util.js @@ -373,4 +402,4 @@ https://www.infopulse.com/blog/timsort-sorting-algorithm/ ### vector.js -向量 +向量操作