Есть ли какие-либо преимущества в производительности при создании структуры Encodable/Decodable, а не просто Codable?

Пример struct Person, который нужно сериализовать:

struct Person {
    let firstName: String
    let lastName: String
}

Мы могли бы привести его в соответствие с протоколами Encodable, Decodable или Codable. Я понимаю, что наш выбор между Encodable и Decodable зависит от варианта использования (например, если мы обращаемся к API и нам не нужно декодировать ответ, содержащий тот же тип), но мы также могли бы привести его в соответствие с Codable, если структура должен использоваться как для кодирования, так и для декодирования.

Если нам нужна структура исключительно для кодирования или декодирования, но не для того и другого одновременно, не будет ли плохой идеей с точки зрения производительности просто использовать универсальный Codable вместо указания Encodable /Decodable соответствие?

Очевидным недостатком использования Codable вместо указания Encodable/Decodable является то, что другой программист может неправильно истолковать структуру как используемую для кодирования и декодирования, тогда как на самом деле происходит только одно из двух. Но что, если я строго заинтересован в производительности?


person iOShit I Screwed Up    schedule 22.07.2019    source источник
comment
Почему бы вам не измерить это самостоятельно?   -  person iWheelBuy    schedule 22.07.2019
comment
Как мне это сделать?   -  person iOShit I Screwed Up    schedule 22.07.2019
comment
Попробуйте xctests и измерьте блоки. Например, создайте структуру с соответствием Codable и протестируйте ее при разборе какого-нибудь большого json. Затем измените протокол на декодируемый и повторите измерение.   -  person iWheelBuy    schedule 22.07.2019
comment
Спасибо, я попробую это   -  person iOShit I Screwed Up    schedule 22.07.2019


Ответы (1)


У «производительности» нет единого измерения. Это зависит от того, что вы имеете в виду. Например, добавление соответствия Encodable, когда оно не требуется, может увеличить размер двоичного файла, что может замедлить время запуска. Или это может быть тривиально, поскольку размер двоичного файла не очень коррелирует со временем запуска (поскольку файл отображается в памяти). Или, возможно, вы имеете в виду производительность во время компиляции, когда явное добавление автоматически сгенерированных соответствий, очевидно, требует некоторой дополнительной работы компилятора и может в некоторых случаях увеличить количество типов, через которые должна пройти проверка типов, немного замедляя работу.

Но для повседневной работы трудно представить случай, когда добавление ненужного соответствия Encodable приведет к задержке табличного представления, если вы имеете в виду именно такую ​​производительность. Ваше соображение "другой программист может неправильно истолковать" гораздо важнее.

person Rob Napier    schedule 22.07.2019