Fastjson пора прощаться

Fastjson
Fastjson пора прощаться

Жизнь слишком коротка, чтобы делать то, что вообще никому не нужно. Эта статья былаhttps://www.yourbatman.cnВключено, включая стек технологий Spring, MyBatis, JVM, промежуточное ПО и другие маленькие и красивыестолбецна бесплатное обучение. Обратите внимание на общедоступный номер【Утопия BAT] Прорваться один за другим, глубокое мастерство,

предисловие

Всем привет, меня зовут Брат А. Он возвращается после месячного перерыва, и сегодня поговорим о более интересной теме: действительно ли вам нужно прощаться с Fastjson?

мое отношение

Я написал несколько статей о JSON на CSDN, особенно платную колонку в 2020 году:享学Jackson "Продажи" этой колонки на мой взгляд в порядке, 200 копий было "продано" за 4 месяца (хотя и не стоит упоминать, но я очень доволен 😄), это просто маленькая библиотека JSON, а популярность налицо . В колонке неизбежно упоминается сравнение Джексона и Фастсона, я всегда придерживался нейтральной позиции по двум основным причинам:

  1. Оба очень популярны (Fastjson даже более популярен, чем Jackson в Китае), поэтому я обычно разрабатываюиспользовать оба(нужно плыть по течению)
  2. Отечественное программное обеспечение с открытым исходным кодом нужно поддерживать, даже если пробел все еще есть (Lenovo подисходныйРазрыв между отечественными мобильными телефонами и мобильными телефонами Apple, посмотрите сейчас? )

Конечно, эта статья отличается и должна быть добавлена. Нейтральность не означает отсутствие предубеждений: я явно склоняюсь к тому, чтобы использовать Джексона в качествеТолькоJSON-библиотека.



из этой статьи, выложу колонку pay в CSDNвесь контентПерейдите на официальную учетную запись, которая поможет вам легко использовать лучшую в мире библиотеку JSON: Jackson.из этой статьи, выложу колонку pay в CSDNвесь контентПерейдите на официальную учетную запись, которая поможет вам легко использовать лучшую в мире библиотеку JSON: Jackson.из этой статьи, выложу колонку pay в CSDNвесь контентПерейдите на официальную учетную запись, которая поможет вам легко использовать лучшую в мире библиотеку JSON: Jackson.

Систематического ознакомления с туториалами Джексона на рынке нет (на официальном сайте их нет), оно единственное. Конечно, это точно повредит моим правам на продажу колонки CSDN (маленькие деньги тоже деньги 😄), так что надеюсь вы обратите внимание на паблик аккаунт, обратите внимание на эту колонку, а то думаю стоит поучиться



2020-05-30Облачный центр экстренного реагирования Alibaba обнаружил новую уязвимость десериализации удаленного выполнения кода в Fastjson.Хакеры могут использовать эту уязвимость для обхода ограничений автотипа и прямого удаленного выполнения произвольных команд для атаки на сервер.очень рискованно(Голос за кадром: Эта ошибка должна быть исправлена). К счастью, официальный ответ приходит очень быстро:Вспомни последний раз Fastjsonвысокий уровень рискаКогда произошло нарушение безопасности? Да, это было 04.09.2019. Два времени не далеко друг от друга. Если вы недовольны, вы говорите, что я до сих пор помню это свежо. Письмо, отправленное нашей службой безопасности, до сих пор можно найти😄.

Конечно, баги и раньше были, но не так много внимания, как эти два. Основная причина заключается в том, что эти два времени схожи по времени, уровень опасности очень высок, а воздействие очень велико, поэтому реакция сообщества относительно сильная.

Эти две «смежные» уязвимости безопасности действительно поставили Fastjson на пик бури.«Осудить Fastjson, принять Джексона / Гсона»Звук бесконечен. Это легко понять, так как никто не любит время от времени получать такого рода электронные письма от службы безопасности компании:Ввиду этой уязвимости, хотя мы ее и исправляем, шаги просты: обновить версию Fastjson, а затем перезапустить приложение. Это выглядит легко, но на самом деле это большая дыра. Задумывались ли вы когда-нибудь над этим вопросом: что, если существуют сотни, сотни Java-приложений? Не говоря уже о высоких затратах времени и труда на вашу операцию, простоуправлятьНе следует недооценивать объем работы. Поэтому, если вы технический лидер, разумно выпустить гнев из груди.

Я считаю, что немногие отделы/команды превратили приложения Spring Boot вРазделение упаковки банокИменно в виде ~ так что велика вероятность что нужно пройти этапы апгрейд версии -> отправка кода -> комбинирование кода -> на пре-> онлайн -> верификация и т.д., так что еще вполне хлопотный


Почему вы используете Fastjson?

Вы можете задать этот вопрос себе, а можете задать его коллегам. Резюме — это ответ, и это самый правдивый голос пользователя. Я также кратко «исследовал» это и резюмировал то, что услышал и узнал, в следующие три пункта:

  1. Простой API (статические методы используются напрямую), быстрый в использовании и удобный для разработчиков
  2. Производится Alibaba, поддерживается крупными производителями и заслуживает доверия.
  3. Сообщество относительно активно, обслуживание и обновления гарантированы.

Дай угадаю, эти 3 причины с большой вероятностью поразят тебя😄? Наличие большого заводского одобрения, естественно, может добавить продукту очков, но его собственное превосходство — последнее слово. Хотя есть три причины, я думаю, что самая важная причина, по которой многие люди решают использовать его, на самом деле одна:Простой API, прямой вызов статических методов удобен для разработчиков.

Я чувствую, что для большинства Java-кодеров (особенно для начинающих) при использовании будет такой сценарий: статические методы более мощные, чем методы экземпляра. На самом деле, это не должно быть так.Новички (начинающие/средние игроки) любят использовать статические методы, в то время как эксперты должны свободно использовать статические методы + методы экземпляра при проектировании библиотеки/фреймворка. Вслепую, слишком частое использование статических методов только заставит ваш ум склоняться кориентированный на процесс, вместо того, чтобы лучше использовать Javaобъектно-ориентированныйхарактеристики и, следовательно, делать выводы.

Нет никого лучше или хуже, тот, что подходит, тот и лучший

Вы нашли это? В причинах использования Fastjson мы никогда не упоминали слова высокая производительность / быстрая скорость и т. Д., Но это самая основная особенность Fastjson. Можно сказать, что он может быть основан на многих библиотеках JSON. , Основа "выделиться". Не странно ли, что мы используем егонетИз-за того, насколько хороши его основные функции, почему это так?


Почему вы все еще используете Fastjson?

Причин 5678. Одним словом, может быть только одна причина, по которой вы не (решитесь) переключиться: вызовы статических методов Fastjson просты в использовании, самое главное,Не знаком с другими библиотеками JSON, такими как Jackson/Gson.не смей переключаться.

я думаюСтрах перед неизвестным Нельзя отрицать, что порог использования Jackson/Gson действительно немного выше, чем у Fastjson, но это ни в коем случае не причина, по которой вы отказываетесь от его использования. Пострадав от «последовательных» двух уязвимостей высокого риска Фастисона, брат А более полон решимости рассматривать Джексона какТолькоОпределение библиотеки JSON даже внутри командыИспользование Fastjson строго запрещено. Все унифицируют язык/инструменты, что может повысить производительность~

Если вы также боитесь выходить из теплицы, потому что мало что знаете о Джексоне, то вам повезло прочитать эту статью, В этой серии вы познакомитесь с Джексоном, бесплатной расширенной библиотекой JSON, которая более чем немного немного сильнее, чем Fastjson.


текст

Я видел эту фразу на форуме:Если вы все еще полагаетесь на использование Fastjson, то вы, вероятно, только на начальном/среднем уровне.. Это предложение должно привести в ярость лояльных пользователей Fastjson. У слов должна быть причина, так действительно ли это предложение больше, чем просто слова? Следующая болтовня

я хотел бы использоватьСуществование разумноПринципы выражения точки зрения: Fastjson может иметь такую ​​высокую степень внимания, когда ошибка сделана.Это бесспорно, что это успех сам по себе.

Неправильное понимание описания: Пожалуйста, не путайте "разумный" как "разумный", а как "причина". «Существование разумно» правильно понимается как: все существующее имеет причину своего существования.

Любая технология может стать популярной, известная должна иметь свои преимущества, даже если она широко известна.только один. Давайте шаг за шагом рассмотрим, почему Fastjson можно отдать предпочтение, и в чем его магия?

Выбор технологии не должен быть похож на свидание вслепую: утверждение, что вам нужна только причина, и отрицание того, что вы можете...


Почему Фастсон?

Несмотря на недавнее нарушение безопасности Fastjson, речь сообщества односторонняя. Тем не менее, мало кто прямо отрицает превосходство самого Fastjson, особенно если знать, что эта широко используемая библиотека почти полностью принадлежит одному человеку. Он ремесленник Вэнь Шао:图片来源于开源中国

Стоит отметить, что Друид, еще один проект с открытым исходным кодом Вэнь Шао, является отечественной разработкой.самыйПопулярный (если не один) продукт для пула соединений с базой данных, хорошо принятый

Взрослые смотрят только на плюсы и минусы, а дети могут отличить правильное от неправильного. Зачем использовать его, чтобы стать популярным, это должно быть потому, что это превосходно. Его отличное качество можно увидеть на официальном сайте:截图来自于Fastjson官网Эти «преимущества» описаны на китайском языке с более прямым (цюань) взглядом (шак):

1. Быстро

По сравнению с другими библиотеками JSON, fastjson характеризуется более высокой скоростью.никогда не былДругие библиотеки JSON, реализованные на Java, работают лучше.

Голос за кадром: Скорость/производительность, Fastjson всегда был упрям.

2. Широко используется

Fastjson широко используется в Alibaba и развернут на десятках тысяч серверов. В 2012 году оно было выбрано Open Source China одним из самых популярных отечественных программ с открытым исходным кодом.

Голос за кадром: Десятки тысяч крупномасштабных экземпляров кластера Alibaba подтверждены масштабом, и они очень убедительны.

3. Тест завершен

В fastjson очень много тесткейсов, в версии 1.2.11 их больше 3321. Регрессионное тестирование выполняется для каждого выпуска, чтобы обеспечить постоянное качество.

Голос за кадром: высокое покрытие одиночными тестами и гарантированная надежность кода

4. Простота использования

API fastjson очень лаконичен.

String text = JSON.toJSONString(obj); //序列化
VO vo = JSON.parseObject("{...}", VO.class); //反序列化

Голос за кадром: Неважно, кто вы — Сяобай или Сяобай, с ним легко начать и им легко пользоваться.

5. Полные функции

Поддерживает дженерики, поддерживает потоковую обработку очень большого текста, поддерживает перечисление, поддерживает расширения сериализации и десериализации.

Голос за кадром: Моей семьи достаточно, все, что вы хотите, доступно


Почему не Fastjson?

В первой части статьи говорилось, что у меня есть отношение и предвзятость в этой статье, поэтому не уместно не приходить сюда по нескольким причинам. Затем я приведу свои личные взгляды для ознакомления на основе 5 пунктов, перечисленных на официальном сайте (см. выше). Не слишком ли это много, давайте возьмем для сравнения другую JSON-библиотеку на примере Джексона в этой статье.


соглашение о версиях

Из-за сравнения мы делаем соглашение о версии для используемой библиотеки JSON:

  • Джексон: 2.10.1
    • В демонстрационном коде используются наиболее часто используемыеAPI высокого уровня, а не базовый API. В конце концов, несправедливо использовать базовый API для PK Fastjson, в конце концов, он обычно не используется.
  • Фастсон: 1.2.72
    • only one jar

1, скорость не такая быстрая

Быстрая/высокая производительность — это Fastjson.самый самый самый самый самый самыйБольшая «точка продажи» может быть описана какоснова жизни, вы можете почувствовать это по названию и дизайну логотипа.

Без исследования нет права говорить.Эта статья направлена ​​наНаиболее используемыйИспользуйте сцену для сравнения волны тестов (сравнение должно быть максимально честным, а не ерундой). Что касается производительности PK Fastjson и Jackson, в Интернете есть много случаев, и я сам написал коды сравнения для нескольких сценариев. Но в конце концов я решил привести результаты Робина, чтобы показать вам, я видел, что его план тестирования (код) был более профессиональным:Сравнение производительности нескольких распространенных библиотек JSON, выводы следующие

序列化 反序列化Общий вывод: кромеJson-libЭто ради прикола (уже перестал обновляться и не должен использоваться в продакшене), Fastjson, Jsckson и Gson стоят наравне друг с другом, а отличия небольшие.

Комбинируя различные тестовые случаи, онлайн + тестовые случаи, написанные мной, производительность трех немного хуже, чем у Gson, Jackson и Fastjson, можно считать схожими по скорости (даже у Джексона общая производительность лучше)

Поскольку разница настолько мала, действительно ли Fastjson имеет смысл настаивать на том, что он самый быстрый?


Скорость парсинга JSON никогда не ограничит производительность системы.

Например, весь процесс REST-вызова может занимать 100 мс, одна операция базы данных может занимать десятки мс, сериализация и десериализация jsonОбычно всего несколько мс; То есть разница в производительности разных библиотек JSON находится в миллисекундах, во всем процессе REST-вызова разные библиотеки JSON мало влияют на производительность.

В современных приложениях даже самый медленный Gson может удовлетворить потребности, скорость парсинга документов нельзя использовать как единственный критерий отбора, и она может даже не быть основным критерием. Меры оптимизации, такие как оптимизация ввода-вывода, оптимизация сети и параллельная обработка, гораздо эффективнее, чем выбор более быстрой библиотеки.

В заключение, если вы выбираете библиотеку JSON с производительностью в качестве критерия, вы совершаете ошибку.


2. Не так популярен

Является ли он широко используемым или нет, и насколько он популярен, является относительным. Одним из самых интуитивно понятных данных является количество ссылок в Maven, Мой скриншот выглядит следующим образом: Судя по значению использования, это не похоже на тот же порядок величины. Конечно, лично я считаю, что это сравнение не особо объективно, по двум основным причинам:

  1. Чем раньше будет развиваться технология с открытым исходным кодом, чем больше пользователей и чем больше мейнстримовых фреймворков ее поддержит (например, встроенная поддержка Джексона в Spring MVC), будет формироваться эффект агрегации, и победитель получит все.
  2. Fastjson начал поздно и в основном фокусируется на внутренних

Нельзя отрицать, что популярность Fastjson в Китае очень высока, даже превосходя Джексона. В противном случае очередную брешь в безопасности не съело бы столько людей, но на такого рода «повсеместное использование» надо смотреть диалектически, ведь в области Java в Китае абсолютным лидером является Alibaba.

Популярность Fastjson имеет внутренние причины, такие как эта беспомощность:


3. Действительно ли тест завершен?

Что ж, могу сказать только одно: Fastjson это знает сам по себе, и не нужно показывать это как яркое пятно, ведь пользователей волнует только частота и серьезность багов и уязвимостей, а не то, как обеспечить надежность внутри проект. .

В глазах пользователей: неважно, если нет багов, и нет однострочного теста. Есть серьезные баги, а есть десятки тысяч тестовых случаев, которые неубедительны.


4. Действительно ли API прост?

Ответ: Действительно. Как объясняется в тексте, это может быть наиболее важной причиной, по которой вы решили использовать Jackson в качестве библиотеки JSON.

Конечно, использование API просто для простых сценариев, и не так просто иметь дело со сложными сценариями. Причина очень проста, POP прост, OOP сложен. Но так уж получилось, что использование библиотек JSON в сценариях интернет-приложений в основном является простым сценарием, поэтому я думаю, понятно, что Fastjson считает это изюминкой.


5, функция не настолько полная

На официальном сайте подчеркивается, что он поддерживает сериализацию и десериализацию дженериков, перечислений и других типов. Но для спецификации JavaBean + JSON у Fastjson есть много недостающих функций (не соответствующих спецификации), что является самой невыносимой частью Brother A, потому что он больше не может реализовать мои функции. Если вы занимались разработкой промежуточного программного обеспечения, разработкой фреймворка или разработкой дизайна на основе DDD на их основе, я полагаю, что у вас также есть глубокое понимание:


Суммировать

Истина относительна, абсолютной истины не бывает. Истина должна заставить людей понять истину, а не использоваться для софистики или для переноски.

Точно так же нет стандартного ответа для Fastjson или Jackson, у вас все еще есть разные мнения, основанные на вашей конкретной ситуации. В этой статье описывается только мойличное мнение, что выражает мою склонность к использованию вашей ссылки при принятии решений.

Если вы похожи на меня, вы тоже хотитеJacksonкак твойТолькоБиблиотека JSON, затем следуйте за мной.Далее я предоставлю вам весь контент в платной колонке, чтобы помочь вам плавно перейти на лучшую в мире библиотеку JSON бесплатно.


Следуй за братом А

Author Брат А (Ваш Бэтмен)
персональный сайт www.yourbatman.cn
E-mail yourbatman@qq.com
WeChat fsx641385712
活跃平台
публика Утопия летучих мышей (ID: утопия летучих мышей)
планета знаний Утопия BAT
Рекомендуемые статьи дня Рекомендуемые статьи дня

BAT的乌托邦