spalt08/telegram-js

Bundle size optimization

misupov opened this issue · 0 comments

  1. все названия конструкторов вынести в отдельный файл и вместо написания if (user._ === 'user') писать if (user._ === USER_CONSTRUCTOR_NAME). Билдер и парсер тоже должны использовать эти же константы. На сколько я понимаю, если правильно настроить Terser, можно добиться сжатия названий, и тогда у нас в коде будут только единожды встречаться строковые константы с названиями конструкторов.
  2. похоже на предыдущую идею, но расширена не только на названия конструкторов, а и на названия полей. Опять же, выносим в константы и обращаемся к ним не как user.first_name, а как user[FIRST_NAME]. Таким образом, опять же, при правильной настройке Terser-а, можно добиться того, чтобы все длинные поля сообщений минифицировались.
  3. Самое важное и самое сложное: мы можем урезать половину протокола, поскольку он у нас не используется. Можно определиться с API, которое мы хотим поддерживать в третьем этапе и выкинуть всё лишнее. Думаю, это уменьшит размер сервис-воркера раза в полтора, если грамотно к этому подойти.