Задержка при переходе на экран чатов после введенного пароля двухэтапной аутентификации, задержка появления списка чатов
misupov opened this issue · 2 comments
Стало быстрее. Можно закрыть, наверно.
В самом начале, при первом подключении к любому из датацентров клиент обменивается ключами с сервером и генерирует общий секрет для будущих сообщений. Для получения общего секрета (одного ключа) в коде два раза используется тяжелая операция возведения в степень по модулю для очень больших чисел (~512б).
После успешной авторизации (после ввода пароля или смс) автоматически создаются ключи на 4 оставшихся ДЦ - довольно задранная по времени операция.
Раньше мы использовали PFS - генерировали по 2 ключа на один ДЦ - один временный, один постоянный. Временный менялся каждые 2 часа (создавался новый). Я отключил эту фичу чтобы первые запуски были в 2 раза быстрее и каждые 2 часа не надо было менять ключи.
Сама операция возведения в степень по модулю относительно дешевая в хроме (там есть нативный BigInt) и очень дорогая в сафари. Поэтому в сафари ключи генерятся заметно дольше.
То же самое с вводом пароля - для расчета хэша пароля нужно произвести несколько тяжелых длинных вычислений.
Возможное решение - написать с нуля логику длинных вычислений (или хотя бы операции возведения в степень по модулю) - чтобы оптимизировать скорость загрузки в сафари