原创 [源碼閱讀]基於Canvas+貝塞爾曲線算法的平滑手寫板

signature_pad一個基於Canvas的平滑手寫畫板工具 介紹 實現手寫有多種方式。 一種比較容易做出的是對鼠標移動軌跡畫點,再將兩點之間以直線相連,最後再進行平滑處理,這種方案不需要什麼算法支持,但同樣,它面對一個性能和美觀的

原创 二叉搜索樹的Morris中序遍歷(O(1)空間)思路

關於二叉樹的遍歷,使用棧遞歸或者仿棧循環都是需要O(N)的空間,Morris Traversal保證了空間爲O(1),時間還是O(N)(比原來多了一遍)。 這裏只介紹inOrder順序。 思路: 對每一個cur節點,優先找到一個pre節點,

原创 [源碼閱讀]純粹極簡的react狀態管理組件unstated

簡介 unstated是一個極簡的狀態管理組件 看它的簡介:State so simple, it goes without saying 對比 對比redux: 更加靈活(相對的缺點是缺少規則,需要使用者的自覺)redux的狀態是存放在

原创 [源碼閱讀]通過react-infinite-scroller理解滾動加載要點

react-infinite-scroller就是一個組件,主要邏輯就是addEventListener綁定scroll事件。 看它的源碼主要意義不在知道如何使用它,而是知道以後處理滾動加載要注意的東西。 此處跳到總結。 初識 參數: //

原创 [源碼閱讀]高性能和可擴展的React-Redux

React-Redux 源碼 注意:文章很長,只想瞭解邏輯而不深入的,可以直接跳到總結部分。 初識 首先,從它暴露對外的API開始 ReactReduxContext /* 提供了 React.createContext(null) */

原创 如何通過AST樹去獲取JS函數參數名

寫在最前 最近項目有個需求,獲取函數參數名,聽起來很簡單,但有了ES6,參數和函數寫法千奇百怪,在github上大概看了幾個庫,基本上都是正則,對通用的寫法能夠覆蓋,稍微越過邊界,往往無法正確匹配。 於是就有了使用AST去進行覆蓋查找的想法

原创 [源碼學習]前端緩存工具fast-memoize和nano-memoize

至今天(2018年9月7日),這2個工具的實現源碼思想是極其相似的,基本上,只要閱讀了其中一個源碼,也就瞭解了另外一個的實現。 fast-memoize導圖: 初識 大概說說它們的實現思路: 定義緩存結構,其中fast使用了無proto