ID:414983998
Кстати JSON, который используется в v8 в 6 раз медленнее RapidJSON. Хотя может уже и нет) В то же время RapidJSON вcего 8 раз медленее сишной strdup (банальное копирование строки). А теперь почему JSON в браузерах быстрее чем какой нибудь бинарного протокол сериализации написанный на js. JSON написан на C++, кроме того, там применяются поисковые таблицы символов и SIMD для парсинга, так что парсинг там сейчас очень быстрый. Плюс быстрая работа с памятью (используются кастомные аллокаторы) и отсутствие GC
у JSON несколько проблем:
1. JSON генерный и слабо структурирован. Если у нас протокол комуникации заранее (грубо говоря int X at buffer[4:8]
) известен то JSON'нная динамика совершенно лишняя
2. JSON совершенно не умеeт бинарку, файлы по нему не передать (можно, но Base64 это очень, очень дорого), приходится данные и малые файлы разбивать, что порой не очень удобно.
3. JSON текстовый, жрёт дохрена bandwidth, банальный map[Int]Int
в нём превратится в:
{"i": 1,"i": 2,"i": 3,"i": 4,"i": 5,"i": 6}
(43 байта)
в то время когда это можно упаковать в ~28 байт, т.е. в 2 раза урезать без компрессии (и это лишь данные для примера, обычно разница ещё больше, потому-что никто обычно не урезает имена полей)