<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          棄坑 FastJson,不香了

          共 2182字,需瀏覽 5分鐘

           ·

          2021-02-12 15:30

          不點藍字,我們哪來故事?

          每天 11 點更新文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》


          • 一、FastJson為何
          • 二、真的很快嗎?
          • 三、FastJson并沒有那么流行
          • 四、棄坑fastjson

          最近艿艿和朋友們正在肝一個單體的開源項目:https://github.com/YunaiV/ruoyi-vue-pro

          上周末把項目中使用到 FastJSON 的地方,全部替換成 Jackson,涉及到的點有:

          1. 使用 JSON 的地方,使用封裝的 JsonUtil 替換
          2. SpringMVC 的消息轉換器,替換成 Jackson 實現(xiàn)的
          3. Spring Data Redis 的對象轉換器,替換成 Jackson 實現(xiàn)的
          4. MyBatis 使用到 JSON TypeHandler 的地方,替換成 Jackson 實現(xiàn)的
          5. 和時間序列化相關的,需要稍微注意下,具體可以看看 spring.jackson 配置項

          因為 FastJSON 存在一些非標的行為,所以替換之后,還是要回歸下~

          另外,沒有考慮使用 GSON 的原因,一方面它最后維護時間是 2019 年,一方面一些開源庫內嵌使用了 Jackson 的特性

          記得 Star 關注下噢,胖友們的支持,真的很重要!

          一、FastJson為何

          首先抄錄一段來自官網(wǎng)的介紹:FastJson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean。

          FastJson是Java程序員常用到的類庫之一,相信點開這個頁面的你,也肯定是程序員朋友。正如其名,“快”是其主要賣點。

          二、真的很快嗎?

          沒有調研就沒有發(fā)言權,本著“追求真理”的初心,來一輪簡單的測試。對比對象選擇應用最廣泛的Jackson和Google出品的Gson。測試環(huán)境選擇JDK 8,AMD 3700X,3200MHZ內存。簡化實驗,只測試簡單對象和復雜對象的String轉對象、對象轉String,調用1千萬次的對比結果如下(時間單位是毫秒):

          從測試結果看,F(xiàn)astJson確實是最快的,但僅比Jackson快20%左右,Google的Gson是最慢的,差距較大。讀到這里,是不是覺得選擇FastJson肯定沒錯?。∪绻嬖嚬賳枮槭裁催x擇FastJson?因為快!這一個理由就可以把他頂回去了。

          這里的調查研究并不是很充分,沒有對內存占用、大文檔的測試。

          在現(xiàn)代應用程序中,即使最慢的Gson,也是滿足需求的;解析文檔速度的快慢,并不能作為選型的唯一標準,可能連主要標準都算不上。對IO優(yōu)化,并行處理等優(yōu)化措施,比選用一個更快的庫更有效。

          三、FastJson并沒有那么流行

          然而,F(xiàn)astJson并沒有那么流行,有一個最直觀的數(shù)據(jù),那就是在Maven的中的引用量,和Jackson和Gson不在一個數(shù)量級,和Jackson強大的家族更沒法比。

          難道我用了一個假的流行的國產類庫?在知乎看到了一篇帖子,討論為什么外國友人不喜歡FastJson。結論就是FastJson是個代碼質量不高的國產類庫。完全顛覆了我的認知,因為在我的項目中,是經(jīng)常使用FastJson的,并沒有出現(xiàn)什么Bug,而且這段評論是在2016年寫的。

          抱著懷疑的態(tài)度,打開FastJson的地址,看到大家提的Issues。竟然有1283個未解決的Issues。紅框標識出來的,我自己拿去研究下,因為我看到下面還有人提了一樣的問題。

          測試代碼如下:

          果然,在采用了最新版本的類庫后,如問題描述的,還是有異常。于是就看到了如下的源代碼:

          這段代碼有嚴重的邏輯錯誤,這樣錯誤的格式,例如:

          “1970-01-01 00:00:00.000000000.000000000”

          或者

          “1970-01-01 00:00:00.000000000.000000”

          也能轉換成功,而一些正確的格式,例如:

          ““1970-01-01 00:00:00”,““1970-01-01 00:00:00.000”

          卻轉換失敗。

          結合知乎上網(wǎng)友的點評,我本人也覺得FastJson并沒有那么優(yōu)秀,另一些深入的點評,例如ASM,我的理解并不深,就不做測試了。

          四、棄坑fastjson

          在我負責的項目中,因為SpringBoot相關的框架中,應用了Jackson,本著“最少依賴”的原則,json解析應用了Jackson。但是很多同事的代碼中,也用了Gson和Fastjson,當然,是沒有嚴格規(guī)范要求的結果。

          通過今天的一個小小研究,Jackson的流行,是有著內在的原因的。在我們以后的項目中,主推Jackson,逐漸的淘汰Fastjson。

          往期推薦

          CTO 點名要搞灰度發(fā)布系統(tǒng),我慌了!

          MyBatis Plus 真香

          紅包免費領!還有這等好事?

          雪花算法的原理,掌握后去勇闖天涯!

          下方二維碼關注我

          技術草根,堅持分享?編程,算法,架構

          看完文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          朋友,助攻一把!點個在看!
          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月亭亭六月丁香 | 国产av黄| 男女啪啪视频免费网站 | 精品无人区无码乱码毛片国产 | 撸一撸日一日 |