spalt08/telegram-js

Задержка при переходе на экран чатов после введенного пароля двухэтапной аутентификации, задержка появления списка чатов

misupov opened this issue · 2 comments

Задержка при переходе на экран чатов после введенного пароля двухэтапной аутентификации, задержка появления списка чатов

Стало быстрее. Можно закрыть, наверно.

В самом начале, при первом подключении к любому из датацентров клиент обменивается ключами с сервером и генерирует общий секрет для будущих сообщений. Для получения общего секрета (одного ключа) в коде два раза используется тяжелая операция возведения в степень по модулю для очень больших чисел (~512б).

После успешной авторизации (после ввода пароля или смс) автоматически создаются ключи на 4 оставшихся ДЦ - довольно задранная по времени операция.

Раньше мы использовали PFS - генерировали по 2 ключа на один ДЦ - один временный, один постоянный. Временный менялся каждые 2 часа (создавался новый). Я отключил эту фичу чтобы первые запуски были в 2 раза быстрее и каждые 2 часа не надо было менять ключи.

Сама операция возведения в степень по модулю относительно дешевая в хроме (там есть нативный BigInt) и очень дорогая в сафари. 
Поэтому в сафари ключи генерятся заметно дольше.

То же самое с вводом пароля - для расчета хэша пароля нужно произвести несколько тяжелых длинных вычислений.

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