知乎:fastjson 這麼快,爲啥老外還是熱衷 jackson?

知乎上有人提問:fastjson這麼快,爲啥老外還是熱衷 jackson? 下面是甘明的回答,從各個方面分析了這個問題:

哈哈哈,我來回答這個問題!

因爲我實在是對這兩個庫太熟悉了。

1、

你寫個bean,然後屬性裏分別有包含_(下劃線開頭、#開頭)之類的屬性,序列化爲json時,出現屬性丟失,那麼自然你也無法反序列化回來。

這個問題,1.2.14版本以後已經改正。

2、

翻閱fastjson的源碼,你會發現有很多寫死的代碼,比如:針對spring之類的框架的各種處理,都是用classload判斷是否存在這種類名。

這是什麼意思呢?

意思就是如果你用spring的那種思想,自己寫了個類似的功能,因爲你這個項目裏沒有spring的那個類,那麼用起來就有一堆bug;當然不僅限於這些,還有很多,比如ASM字節碼織入部分,看源碼的話,能發現的缺點數不勝數。

3、

其解析json主要是用的String類substring這個方法,所以解析起來非常“快”,因爲申請內存次數很少。

但是因爲jdk1.7之前substring的實現並沒有new一個新對象,在使用的時候,如果解析的json非常多,稍不注意就會出現內存泄漏(比如一個40K的json,你在對象裏引用了裏邊的一個key,即使這個key只有2字節,也會導致這40K的json無法被垃圾回收器回收),這也是“快”帶來的負面效果。

而且這還不算,在jdk1.7以上版本對string的substring方法做了改寫,改成了重新new一個string的方式,於是這個“快”的優勢也不存在了。

 

最後

fastjson就是一個代碼質量較差的國產類庫,用很多投機取巧的的做法去實現所謂的“快”,而失去了原本應該兼容的java特性,對json標準遵循也不嚴格,自然很難在國際上流行。

json從發明到現在非常流行,並不是因爲json快的原因(比json快且小巧的格式和類庫一大把),而是因爲json和web結合的時候更易於使用,對開發人員易於理解。

很多人拿fastjson和jackson比,就像拿非智能機和iphone比待機時間,其功能性不一樣,jackson的很多功能fastjson並沒有實現,所以這種對比也不客觀。

fastjson之所以沒在國際上流行起來,最主要的原因應該是開發者的思路全放到“快”上去了,而偏離了“標準”及功能性,質量也不夠好,有點“捨本逐末”的味道。

當然在目前的環境下,國產軟件能踏實的心態做好開源的不多,fastjson團隊能這麼快的反饋並修正問題,這種精神還是值得稱讚的。希望國內的技術從業者能更重視“技術的原始需求”。

你覺得會是什麼原因?歡迎在留言區討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章