Сравнение скорости GraphQL и REST

Поделиться
HTML-код
  • Опубликовано: 26 сен 2024
  • В этом видео покажу как в Posman делается нагрузочное тестирование, и с помощью него сравню скорость выполнения идентичных запросов GraphQL и REST.
    github.com/Ale...

Комментарии • 53

  • @senkamatic8448
    @senkamatic8448 3 месяца назад +1

    Крутой чел! Интересно смотреть❤

  • @ilyalisov5284
    @ilyalisov5284 Год назад +2

    Спасибо за видео, решил использовать Graphql, нашел понятное сравнение с REST по производительности!

    • @Kulibins1
      @Kulibins1  Год назад +1

      В нашем полку прибыло 👍

  • @Kulibins1
    @Kulibins1  2 года назад +8

    Перепроверил REST, у меня настроен NewtonJson в качестве серилизатора, поставил стандартный, который быстрее, но это не повлияло на результат.

  • @evgen86n
    @evgen86n Месяц назад +1

    Все дело в сериализаторах. Хорошо написанный (желательно отдельной внешней либой на С) сериализатор даст аналогичный с GraphQL результат. Однако, с этим новомодным GraphQL придется кучу логики на бэкенде делать (схемы всякие, обработкичики).

    • @Kulibins1
      @Kulibins1  Месяц назад +1

      @@evgen86n вот именно не нужно изобретать велосипед

  • @DInfinity3
    @DInfinity3 2 года назад +2

    Спасибо большое за видео, они топовые!)

    • @Kulibins1
      @Kulibins1  2 года назад

      Рад что нравится, у вас система тоже очень известная 👍

  • @Дмитрийсекрет-н7о
    @Дмитрийсекрет-н7о 2 года назад +2

    Спасибо. Классный ролик.

    • @Kulibins1
      @Kulibins1  2 года назад

      Всегда пожалуйста.

  • @user-mo8kx4yi4g
    @user-mo8kx4yi4g Год назад +1

    Сделал тоже самое с local MSSQL, REST и GraphQL в одном проекте. Данные беру из EF context в обоих случаях. Скорость одинаковая (как и должно быть). P.S. В целом видео классные, подписался.

    • @Kulibins1
      @Kulibins1  Год назад +2

      Я изначально думал что скорость rest будет выше, а она как минимум одинаковая, поэтому graphql очень хорош

  • @Poseidonboy
    @Poseidonboy Год назад +2

    Привет! Не очень понимаю почему GraphQL оказался быстрее, ведь он работает поверх HTTP и наоборот должен только добавлять время. Было бы хорошо, если бы еще сравнили какой SQL запрос генерируется, наверное в нём всё дело?

    • @Kulibins1
      @Kulibins1  Год назад +3

      По какой-то причине более оптимальный запрос, хотя и там и там entity. А так накладные расходы graphql ничтожные.

  • @vladimirv.443
    @vladimirv.443 Год назад +1

    Подскажите, а как в GraphQl лучше работать с динамическими объектами? Получить все поля, без перечисления в query как я понял нельзя?
    К примеру, имеется динамическая форма (сотрудника), строится на основе конфиг-файла json.
    С сервера приходит сам объект со всеми полями, строится форма.
    Почему-то решил спросить в этом ролике )

    • @Kulibins1
      @Kulibins1  Год назад +1

      Тут может помочь хранение в виде json, когда у вас поле json строка. И при получении её происходит десирелизация

  • @mihail8575
    @mihail8575 Год назад +2

    Почему с REST возвращаются данные на 20% "легче" чем с GraphQL?
    Может ли это сказаться при большем объеме данных и реальных условиях по сети?

    • @Kulibins1
      @Kulibins1  Год назад +1

      Как посчитали 20% ? GraphQL добавляет буквально чуть-чуть, причем т.к. запросы мы группируем, то наоборот у GraphQL будет меньше данных, т.к. у каждого запроса есть еще http header и т.д. если писать под любое требование оптимизированный запрос то мы в ответе json видим дополнительно слово data и название функции, если вы включили что-то для отладки, то это не релизное сравнение, в rest мы то же можем напихать для отладки чего лишнего. Из моего опыта данные во много раз перевешивают слово data и название функции + что бы не говорили а многие не оптимизируют и в результате на rest кучу лишних запросов - GraphQL лишён этих недостатков, разработка ускоряется, запросов меньше.

    • @mihail8575
      @mihail8575 Год назад +1

      @@Kulibins1 Респонс для REST: 2.5 килобайта, для GraphQL: 3 килобайта.
      Но может действительно в реальных условиях с более емкими запросами жила разница или пропадет или не будет так заметна.
      Спасибо )

    • @Kulibins1
      @Kulibins1  Год назад +1

      @@mihail8575 посмотрел, и понял почему у вас так, русские буквы в ответе превратились в \u0410\u0432\u0442\u043E\u0440 из-за этого разница в размере. Самое интересное, если поставить ResponseCompression на бэке, то сжатый ответ graphql оказался почему-то значительно меньше 2.9 kb против 8.2 у REST. Если не сжимать, то 84.5 против 61.5 kb у рест. Но у меня на рабочих проектах всегда стоит сжимать. Нужно посмотреть как настраивается сериализация для HotChocolate ( или чем вы пользуетесь )

    • @ИванПошековский
      @ИванПошековский Год назад

      Потому что это очередная абстракция,+ как она реализована внутри вопрос, если у вас в приложении работает , 20% это огромная потеря производительности, это будет заметно

    • @Kulibins1
      @Kulibins1  Год назад +1

      @@ИванПошековский я уже ответил на этот вопрос нет такого что rest легче!!! Оно одинаково по размеру ответа. Тут дело в кодировке по умолчанию русского текста. В qraphql hot chocolate тоже можно убрать перекодирование и будет так же, более в rest изначально тоже русский текст через кодировку выдавал, пришлось опцию json серелизации выставлять. Я у себе провел замеры и в ответе на вопрос их выложил. Что rest что grapql это надстройки 🤣 только graphql не медленнее и гораздо фукциональнее , на написание бэка тратится гораздо меньше времени. Конечно если цель: бесконечная работа, то qraphql это минус, а если скорость, функциональность, то это qraphql. Целую статью на Хабре писал GraphQL: как сделать бэкенд приложения экономнее и быстрее habr.com/p/593115/

  • @nouchance
    @nouchance 2 года назад +1

    Классика жанра:)

  • @rudolfsikorsky7900
    @rudolfsikorsky7900 2 года назад +1

    Интересно, спасибо. Я правильно понял что сам GraphQL-сервер тоже написан на Ц#, а не запущена какая-то готовая сборка?

    • @Kulibins1
      @Kulibins1  2 года назад +1

      Да, исходники горячего шоколада лежат на GitHub

  • @Saveaaa
    @Saveaaa 2 года назад +1

    А что Вы используете в своем основном проекте для генерации отчетов на сайте?

    • @Kulibins1
      @Kulibins1  2 года назад +1

      У меня проекты больше это как замена десктопным приложениям. Раньше была своя система для отчётов. Сейчас хочу поизучать этот вопрос. Проектов много, команд много, посмотрю что кто использует.

    • @Saveaaa
      @Saveaaa 2 года назад +2

      @@Kulibins1 тоже как замена десктопу начал переносить на blazor проект. Пока проблема только с передачей файла. С отчётами есть идеи, но пока ищу все варианты.

  • @kepamuk1
    @kepamuk1 2 года назад +1

    Тогда в чем преимущество одного и другого, или графкл просто лучше и все?

    • @Kulibins1
      @Kulibins1  2 года назад +1

      С мой точки зрения GraphQL личе во всем. Но rest проще и более распространен, для некоторых стыковок различных систем между собой наверное лучше использовать rest

  • @ИгорьВасилевич-э4р
    @ИгорьВасилевич-э4р 2 года назад +1

    Ну да, если с фронта одним запросом графа можно забрать все данные, нежели рестом несколькими запросами с разных эндпоинтов.. И что тогда будет быстрее?

    • @Kulibins1
      @Kulibins1  2 года назад +1

      GraphQL быстрее, но в rest тоже можно сделать специальный запрос который сможет вернуть всё, REST не ограничен CRUD, но такие запросы нужно делать каждый раз, а их может быть много, и они заранее не известны.

  • @МарсианскийПончик
    @МарсианскийПончик 2 года назад +1

    1:30 дай пожалуйста ссылку на видео про хэш

    • @Kulibins1
      @Kulibins1  2 года назад +1

      Вопрос про это видео, наверное: ruclips.net/video/0Q5Pz5Ozsow/видео.html

  • @АнтонВоронов-ы9ц
    @АнтонВоронов-ы9ц Год назад +1

    3:31 говорит, что произвел нагрузочный тест, делая 100 запросов за 10 секунд, а результаты якобы говорят что-то о REST.

    • @Kulibins1
      @Kulibins1  Год назад +1

      Конечно через postman это не прям супернагрузочное тестирование, да и запрос в бд тут реально без кэширования, запрос с join получается - но факт от этого не меняется, думал что накладные расходы у GraphQL будут выше, а оказалось что он не то что не медленее , но и чуть быстрее - Суть видео была сравнить на примере.

    • @АнтонВоронов-ы9ц
      @АнтонВоронов-ы9ц Год назад +1

      ​@@Kulibins1 20 - 80 миллисекунд для запроса на локальную машину - это очень медленно для небольших запросов. Думаю, дело не в том, что используется REST.

    • @Kulibins1
      @Kulibins1  Год назад +1

      @@АнтонВоронов-ы9ц конечно там еще и запрос в базу данных

  • @vinogradova619
    @vinogradova619 2 года назад +2

    Неожиданно, интересно почему так?

    • @Kulibins1
      @Kulibins1  2 года назад +1

      Сам удивился, думал либо равны, либо REST на одинаковом результате будет быстрее, но вот результат: GraphQL в несколько раз быстрее. Может повлиял еще запрос в базу данных. Sql в горячем шоколаде, чуть от того что entity формирует отличается. Надо еще провести расширенные эксперименты. Изначально в видео хотел показать как тестить Postman, и взял пример, а оно вот как получилось.

  • @pawsdev
    @pawsdev Год назад +1

    REST в топку вслед за SOAP

    • @Kulibins1
      @Kulibins1  Год назад +1

      Rest для всяких стыковок с другими системами очень даже хорошо.

  • @maria_golubeva_nl
    @maria_golubeva_nl 2 года назад +1

    Попробуй сервер на rust написать

    • @Kulibins1
      @Kulibins1  2 года назад +1

      Никогда не занимался rust 😉

    • @maria_golubeva_nl
      @maria_golubeva_nl 2 года назад +1

      @@Kulibins1 там крейт простой async-graphql. У меня схеиа очень простая, запрос в браузере поисходит за три милисекунды

    • @Kulibins1
      @Kulibins1  2 года назад +1

      @@maria_golubeva_nl за 3мс с обращением к postgresql?

    • @maria_golubeva_nl
      @maria_golubeva_nl 2 года назад +1

      @@Kulibins1 нет, статика из памяти

    • @Kulibins1
      @Kulibins1  2 года назад

      @@maria_golubeva_nl тут в примере из базы + запрос не просто select

  • @PutlerXLO
    @PutlerXLO 2 года назад +3

    Епте... Что тут можно мерить, если ты меряешь не сам graphql, а реализацию своих контроллеров. Все это http, так что без толку тут мерить.

    • @Kulibins1
      @Kulibins1  2 года назад +1

      Ну тут как раз и меряю все вместе, т.к. запросы идентичные 😉