- #138
紀錄尋找最適合在瀏覽器裡面跑的快速雜湊函式 - cyrb53
最近在處理前端資料表單時需要一個雜湊函式把所有的欄位精簡為一串 id 方便儲存欄位偏好到後端,無關安全性且速度應該也不是太大重點。
如果雜湊函式最有名直覺想到MD5或 SHA-256 ,但不是要引入額外的套件就是 API 是非同步的(Web Crypto API 把該操作視為可能昂貴不應阻塞瀏覽器主執行緒的操作,所以只有非同步版本),都不太符合我的需求。
上遠古網站 StackOverflow 看一下:Generate a Hash from string in Javascript有個有趣的解答是:cyrb53 受 MurmurHash啟發。
cyrb53 是 bryc 寫的非加密雜湊函式,名字中的 53 代表輸出為 53-bit。特點是:
- 53-bit 輸出,剛好是 JavaScript number 安全整數範圍內,比常見的 32-bit 雜湊撞號機率低很多
- 同步執行,不需要引入套件(Public domain 釋出直接複製貼上即可使用)或非同步 API
- 支援自訂 seed,同一字串可以產生不同雜湊值
const hash = cyrb53('my form fields'); // 1961884165038354完美吻合我的需求:快速、同步、不用安全、榨乾 JS 數字安全整數範圍可能性換取更低重複的 Hash
- #137
- #136
- #135
- #134
- #133
- #132
- #131
- #130
- #129
- #128
- #127
- #126
- #125
- #124
- #123
- #122
- #121
- #120
- #119
- #118
- #117
- #116
- #115
- #114
- #113
- #112
- #111
- #110
- #109
- #108
- #107
- #106
- #105
- #104
- #103
- #102
- #101
- #100
- #99
- #98
- #97
- #96
- #95
- #94
- #93
- #92
- #91
- #90
- #89
- #88
- #87
- #86
- #85
- #84
- #83
- #82
- #81
- #80
- #79
- #78
- #77
- #76
- #75
- #74
- #73
- #72
- #71
- #70
- #69
- #68
- #67
- #66
- #65
- #64
- #63
- #62
- #61
- #60
- #59
- #58
- #57
- #56
- #55
- #54
- #53
- #52
- #51
- #50
- #49
- #48
- #47
- #46
- #45
- #44
- #43
- #42
- #41
- #40
- #39
- #38
- #37
- #36
- #35
- #34
- #33
- #32
- #31
- #30
- #29
- #28
- #27
- #26
- #25
- #24
- #23
- #22
- #21
- #20
- #19
- #18
- #17
- #16
- #15
- #14
- #13
- #12
- #11
- #10
- #9
- #8
- #7
- #6
- #5
- #4
- #3
- #2
- #1