Comments 93
Как то на хабре уже была статья, о том как же обстоят рабочие дела в гугле. Автор сетовал на том, что фикс багов и рефакторинг никому не нужен, и тебе как разработчику это не принесёт баллов на ревью. Думаю, то что описано в этой статье доказывает вышесказанное.
А почему нужно давать баллы за фикс багов?
Получается справедливо: меньше багов — больше реальных фич — больше баллов
Не очень понятно как автор перепрыгнул от минифицированного кода к UI компонентам closure library и решил, что именно они и есть проблема. По опыту дебага минифицированного closure compiler'ом кода даже при наличии исходников не сильно просто сопоставить минифицированный код оригинальному, потому что closure compiler практически все переименовывает, инлайнит функции, передвигает куски функций. А когда дело идет о таком большом приложении как гмейл, то вообще должно быть очень сложно определить что ж конкретно делает код.

И кстати полифилы при максимальных настройках оптимизации занимают около 10-15кб не gzip'нутого кода. Это конечно не классно, но если говорить о 6мб ресурсов и предположить, что полифилы загружены только в одном js файле (ну или в паре-тройке), то вряд ли они являются большой проблемой.

Выйти на Closure Library помогли строковые константы, которые сохраняются при минификации, например, вот такой фрагмент: lCa = "closure_uid_" + ((1e9 * Math.random()) >>> 0), который соответствует вот этой строчке. Ну а дальше уже обладая каким-то подобием исходников можно представить, как выглядел этот код до минификации.


Про полифилы соглашусь, в таких объемах кода это экономия на спичках. Но сам факт того, что браузер тратит ресурсы на то чтобы загрузить код, по факту завернутый в if(false) {...} очень огорчает.

Да, строковые константы — это один из основных способов распутать код. Но uid — это очень общая утилитная функциональность. Она используется во многих не ui-ных классах closure library и вполне может использоваться в кастомных классах самого гмейла, особенно учитывая что скорее всего в гмейле свой фремворк и есть какие-то базовые классы, которые могут этот uid использовать. Наверное более точным будет наличие вот этих констант.

Как ни странно, но вот эти константы оказались обфусцированы. Но есть вот такой код


w.Xg = function(b) {
  if (this == b) throw Error(Qh);
  if (b && this.Lg && this.Id && this.Lg.Xc(this.Id) && this.Lg != b) throw Error(Qh);
  this.Lg = b;
  px.Ia.Zg.call(this, b);
};

Соответствует вот этому исходнику:


goog.ui.Component.prototype.setParent = function(parent) {
  if (this == parent) {
    // Attempting to add a child to itself is an error.
    throw new Error(goog.ui.Component.Error.PARENT_UNABLE_TO_BE_SET);
  }

  if (parent && this.parent_ && this.id_ && this.parent_.getChild(this.id_) &&
      this.parent_ != parent) {
    // This component is already the child of some parent, so it should be
    // removed using removeChild/removeChildAt first.
    throw new Error(goog.ui.Component.Error.PARENT_UNABLE_TO_BE_SET);
  }

  this.parent_ = parent;
  goog.ui.Component.superClass_.setParentEventTarget.call(this, parent);
};

Здесь видно, что константа goog.ui.Component.Error.PARENT_UNABLE_TO_BE_SET сжалась до Qh, который инициализируется как Qh = "eb".

Пересматривайте свои исходники и избавляйтесь от тех вещей, которые стали уже неактуальными.

Это не сложно делать в действительно своих исходниках либо в исходниках, от и до покрытых тестами. Но в реальности, ковыряясь в чужом коде, написанном пару лет назад, и натыкаясь на костыль, — очень страшно его удалять, потому что не знаешь, всё ли после этого будет хорошо сейчас… через неделю… через месяц.
Когда делается редизайн продукта, есть возможность переписать весь код с нуля. Так можно выкинуть все эти грабли, полудоделанные фичи, спрятанные под флагами, костыли под старые форматы API, которых давно уже нет в природе и т.д.
есть возможность переписать весь код с нуля

Возможность — безусловно есть. Денег и человеко-часов? Далеко не факт.

Переписывание с нуля не добавляет ничего к стоимости продукта здесь и сейчас, и владельцы бизнеса на это смотрят очень косо (и с их точки зрения в общем-то правильно).
Ну что же, теперь у нас есть живой пример Gmail. Можно показать его «бизнесу», пусть решают, сойдет им старый продукт с новыми костылями, или все-таки переписать по-нормальному
Нет, ну как только гмаил помрёт и уступит место чему-нибудь еще, так они там все наверное сразу поймут, как они были неправы со своим 6.9Мб гмейлом.

Только есть у меня опасения, что этот сценарий не случится…
Тормозит же адски, 5-10 секунд загрузки интерфейса для чтения текстовых писем в 2018 году на современнейшем железе это ад, трэш и издевательство над здравым смыслом.
gmail как почта и десктоп-интерфейс gmail все же разные вещи.
На десктопе, например, именно из-за тяжеловесности gmail перешли на «оффлайн» клиентов и работу по imap (стряхнули пыль с thebat), а так же иногда используем «легкую хтмл версию» ( mail.google.com/mail/u/0/h/1pq68r75kzvdr/?v%3Dlui ), задумываемся о подключении какого-нибудь альтернативного веб-сервиса работающего по imap с gmail.
Вряд ли гмылу от этого жарко или холодно, но тем не менее именно так «варят лягушку». Сначала имап, потом альтернативные веб-сервисы для доступа к имап, потом параллельно другие почтовые сервисы. Проблемы не возникают мгновенно, но зато имеют огромный запас инерции.
Да я это всё понимаю, что вы мне рассказываете. Но опять же вот, гмейл всегда можно открыть на любом соединении — именно потому что «легкая версия»-то на месте (и она реально очень легкая).
и она реально очень легкая

Она-то лёгкая, её я бы и открывал на обычном соединении. Только вот не нахожу варианта использовать её по-умолчанию. Это ад и угар, когда на i7-8700k+16gb ram+nvme почта открывается по 5-6 секунд.
Что характерно, но на Phenom 2 + 4gb ram + HDD она открывается примерно столько же (5-7 сек от самого начала — клика по ярлыку).
Тут дело уже не столько в доступных ресурсах — тут «всю систему надо менять!» (с)
UFO landed and left these words here
ну в этом случае, потратив в два раза больше человека часов гуглеров, можно было бы сократить огромное количество человеко часов обычных юзеров ожидающих пока загрузится почта. и бизнес от этого бы только выиграл
натыкаясь на костыль, — очень страшно его удалять
Очень помогает хорошее покрытие регрессионными тестами.
Помогает только если весь проект под вашим контролем. А вот если вы меняете либу от которой зависит 10к проектов, то лучше либу вообще не трогать.
Если говорить о либе, то давайте для начала разделим изменение API и рефакторинг (т.е. изменение функциональности без изменения API). Для изменения API есть вполне работающие механизмы (сначала объявляем некоторые элементы API устаревшими, потом выжидаем некоторое время, потом выпиливаем). А что касается рефакторинга — см. выше про регрессионные тесты.
Команде Гмыла не привыкать. Новый интерфейс гуглдоков в разы хуже старого даже спустя 2 года, восьмой андроид жрёт 12 гиг и замусорен хэнгаутсами по 300 метров каждый. Да и ютуб иногда падает на Сафари, лечится сменой агента.
В общем, гугл уже не первый год считает, что у всех пользователей мира гигабитная сеть и 10 ядерные ксеоны.
падает на Сафари, лечится сменой агента.

извините за оффтоп — а на какой агент лучше поменять?
а то достает иногда это безобразие.
Простите, уже не скажу — за последние полгода вроде не нарывался, редко ютуб открываю.

да нет же, они ранжируют выдачу поиска по скорости загрузки сайта.

… двойку за производительность (из максимальных 100 баллов!

Зато дали замечательный пример, чтобы отбиваться от заказчиков, требующих вылизывать page speed до 100

До совсем недавнего времени там был жуткий красный рейтинг у Amazon.com, который на самом деле очень даже быстрый. Починили это где-то весной с.г., но до тех пор очень помогало с тем, о чем Вы пишете.

Да, полировать до достижения 100 баллов может и не стоит, но если у вас околонулевой результат – это сигнал каких-то проблем.

у меня на проекте Lighthouse по производительности показывает сотню, и это с сотней запросов к бекенду. Каких-то специальных оптимизаций не делалось
Ладно, Первоначальная загрузка это еще половина беды. У меня порой письма не открываются. Заходишь в какую-нибудь табу, кликаешь на письмо и… ничего. А на верху висит «Загрузка...»
Вот с письмами полная фигня. Пишет в списке папок: входящие — 1. Жму на входяшие «писем нет». Еще раз жму на входящие — ладно, вот тебе письмо.
UFO landed and left these words here
Есть ещё afterlogic, он лучше =)
Но функциональность отличается, такого количества шпионских блобов ни в RC, ни в AL не завезли.
Гугл такой гугл. Компания большая, проектов много. Цифра в 600+ приложений может быть очень маленькой в процентном отношении.
Да всё нормально. Youtube в браузере уже на слабых компах не посмотришь, скоро и Gmail нельзя будет открыть без 8-ми ядерного камня, 16ГБ ОЗУ, и графического ускорителя класса GTX 1080TI

А YouTube вообще у меня последнее время весело багует- нажимаешь на одно видео справа, а подгружаться начинает какое-либо другое. Если нажимать Ctrl+r открывается то на которое первоначально кликал

Это не совсем «youtube багует», это РКН багует, объявляя локальные гугловые CDN-сервера «шпионским оборудованием». Некоторые провайдеры отключили у себя гугловые кешеры, а по публичным каналам до ютуба частенько достучаться не выходит, канал забит.
Еще интересный баг наблюдаю-при быстром переходе между страницами начинает играть видео, которое было на предыдущей.
Пример, зашел на страницу канала, на котором видео с автоплеем, переходишь на главную-видео с канала начинает играть фоном.
Я как-то проапгрейдился со среднего пятого айкора/6Гб на десятиядерный зеон/16Гб. И неожиданно обнаружил, что единственное, что значительно прибавило в производительности — это браузер (Хром, ессно). Причем реально стало круче!
Разработка и остальное укомфортились совсем не так сильно, а вот на серфинге теперь нервов значительно меньше тратится.
Что i5, что xeon являются слабыми для десктопа в плане скорости ядер у которых частота недалеко ушла от 3.0ггц. Для комфортной и быстрой работы нужно 4-5.
Поэтому после 6-8 ядер остальные не добавляют смысла для обычных задач.
Вы очень близки к истине, примерно на такой конфигурации большинства поделок погромистов начинают быстро загружаться и что-то быстро делать. Даже сильно кривые сайты можно переварить, хотя есть нюанс, в хроме еще не пробовал, но вот в лисе 60 вкладок одноглазников или иных открытых страничек от погромистов меил.ру приводит к зависанию и краху браузера.
6/16/1050
GMAIL раньше для меня ассоциировалося с прогрессом. Потом когда начал замечать тормоза, понял, что надо искать альтернативу, т.к. именно из-за слабых систем было все труднее использовать его. После того как полностью перешел и настроил свои сервера, мои проблемы были решены. Но не все же пользователи могут позволить себе такое. Проблема гигантов в том, что они думают, что их пользователи должны принимать на веру все, что они делают, и мнение пользователей можно не учитывать.
Гиганты просто максимизируют свою прибыль. Они не думают о пользователях ничего.
Я вот думаю как свалить...(да хоть на synology mail station) но одна из проблем в том что G Suite. И на эти аккаунты куча всего куплено.
Вот можно ли грохнуть G Suite для mydomain.com и при этом НЕ грохнуть сами гуглоаккаунты вида user@mydomain.com?
Насколько я понимаю — учетки гугла живут независимо — у меня есть на одну почту G suite учетка и обычная (в которую я не могу попасть, но гугл регулярно присылает письма что злые хакеры туда заходят)
я просто настраивал в свое время переадресацию на новую почту. со временем все мои клиенты и друзья перешли на новую, а старые емайлы живут до сих пор.
Как раз получение почты проблемой не будет (свой ж домен). Просто на аккаунты user@mydomain.com куплены приложения/фильмы/музыка в Google Play, причем несколькими юзерами. И что с этим будет при закрытии G Suite?
Красиво ткнули нагадившую собачку Google носом в ее дерьмо.

Gmail.com открываю раз в квартал. Для всего остального есть десктопный/мобильный клиент.
Как-то всё это не укладывается в моей голове вместе с непроходимыми гугловскими собеседованиями, о которых здесь постоянно пишут
Побуду кэпом. Из знания передовых технологий ведь можно строить как изящные и простые решения, а можно хтонические нагромождения smartass-кода. Причем первое делать сильно сложнее.
Так что сложные собесы просто обеспечивают пул разработчиков только лучшими стрелками, да вот менеджмент — менеджмент как обычно…
Неплохо ускоряет работу отключение «Действия, доступные при наведении указателя на письмо» и «Значки персональных писем»
Как человек 5 лет проработавший с closure library/compiler, не могу сказать, что там всё хорошо. Но и винить его в том, что из-за чьих то кривых рук гмэйл не грузится тоже излишне. С инструментами надо уметь работать.

И обратная совместимость не вина библиотеки, которую использует не только гугл. Если ActiveX не нужен — пожалуйста: --define goog.net.XmlHttpDefines.ASSUME_NATIVE_XHR=true, и компилятор автоматом уберёт лишее.

Про флаги компиляции интересно. Нашел, что в коде Gmail еще подключается и код для эмуляции addEventListener через attachEvent, для IE8, который тоже можно выключить флагом.


Возникает вопрос: а зачем в 2018 году включать все это по дефолту? Разумнее было бы наоборот, с возможностью включить тем, кому всё еще это нужно. А идеальнее всего вообще использовать конфигурацию вроде browserlist, где пользователи бы просто указывали нужные им браузеры, а полифилы сами конфигурировались исходя из этой настройки, без жонглирования разными флагами.

Помимо прочих проблем в closure library отсутствует semver, и подозреваю, никто не знает, когда уже можно сломать обратную совместимость.
А так никто не мешает собрать несколько версий с разными флагами и отдавать нужную.
Пользуюсь гуглопочтой исключительно по IMAP/SNMP с локально установленным клиентом.
И, судя по этому факапу с тормозящим веб интерфейсом (кстати, на гугловой же page speed tool — сколько попугаев показывает?), разработчики gmail тоже им не пользуются.
Ага, а если еще учесть что и по IMAP иногда бывают глюки (в последнее время редко) или неочевидные костыли вещи, вроде Gmail IMAP – Solving the [Gmail] separation

То каждый раз задумываешься: чем эти люди там занимаются? Пользуются ли они своим продуктом?

Попугаев ровно 100 из 100 в десктопной версии и всего 53 в мобильной. Хотя по моим ощущениям все с точностью до наоборот, и мобильная версия вполне быстро грузится и работает

вот да. Я понимаю, сценарии разные бывают. Но на своем ПК вижу смысл только в использовании почтовых клиентов. Больше настроек, меньше тормозов, возможность читать почту в оффлайн.
Я решил вопрос так:
Мало кто помнит, что есть web-версии gmail для смартфонов и планшетов.
Меняем UserAgent на современный планшет, Ctrl+F5.
Вообще не тормозит.

Вот так вот выглядит:
При загрузке Gmail'а внизу всегда была ссылка для старых/медленных компьютеров, которая загружает html-версию почтового ящика.

Поэтому не нужно ничего менять, при входе нужно нажать внизу ссылку и Вы попадёте в почтовый ящик почти моментально.
Моментально-не знаю, у меня страница сначала полностью загружается, потом переходит на базовую версию.
И минус, что эта ссылка присутствует только при загрузке страницы.
Моментально после нажатия на ссылку.
Да, в начале всё равно ждешь, пока начинается загрузка, прежде чем переключишься.
Это я к тому, что для совсем медленных машин, гугл предусмотрели облегчённую версию, но это никоим образом не оправдывает 7-ми секундную загрузку обычного режима.
Это будет basic html версия, которая страшненькая и куцая. В ней, например в ней нет автоматического раскладывания на Рекламу, Соц-сети и собственно почту.

Я имею ввиду вполне современную SPA версию gmail, только сделанную для планшетов/смартфонов и гораздо более легкую чем десктопный gmail. Немного отличается лейаутом.

Так Вам полный функционал нужен был, я подумал о том, чтобы быстрее зайти в почту.
На компьютере я использую почтовый клиент, редко захожу через браузерную версию.
Хорошо объяснять тормоза легаси-кодом и поддержкой IE6, но почему тогда этот же Gmail в эпоху IE6 совсем не тормозил?

Потому что в эпоху IE6 продукт был моложе и там было меньше кода.


Если разработать путём только докидывания кода сверху, то мы приходим к вот такой ситуации.

Вспомнилось откуда-то:
— я только постоянно сверху докидываю
— ты бы хоть, посмотрел, что там внизу делается
— а чего туда смотреть — там компост
Из моего опыта: если в текущем Gmail-е выключить чат (Настройки — чат — отключить чат), то прекращается дикий memory leak таба гмыла (Chromium 70).
Пару лет назад кто-то в комментариях к какой-то статье злорадно ехидничал о том, что скоро сайты будут грузиться дольше чем ОС… в принципе ожидаемо, но не думал что это случится так скоро.

Возможно ноут с 16 гигами — это очень круто, но каждая очередная загрузка гмейла — менее секунды. Успеваю увидеть, что конвертик хлопнул дверью и сразу письма.

А проц то какой? У меня GMail нагружает не столько память, сколько проц
Я не пользователь gmail, но мне все равно интересно — а зачем они сделали это обновление? В чем реальное преимущество для пользователя, и в чем могут быть плюсы для самого google? (Может это часть далеко идущих планов?) Но вообще, как пользователю только мобильного интернета (а ранее и с помегабайтной оплатой), мне грустно от этого тренда :(
Ну, software bloat обычное дело, не вчера появился. Я думаю это особенности менеджмента большой корпорации. Кто-то должен выдавать результат, и результат должен быть не «ну всё, старый gmail оптимизирован, давайте теперь уволим половину разработчиков и сэкономим миллион в год» а «мы запустили новый gmail, потратили 50 миллионов, смотрите сколько в нём фич!».
Яндекс последние 2 дня не переваривает user.js и предлагает лёгкую версию. Ушёл на protonmail.
Когда читаешь в новостях "… за этим стоят такие гиганты, как Гугл....", хочется прыснуть — да уж, «маленькие гиганты большого кода»! Позорнее разработок ещё не видел (после Windows Millenium).
У знакомых на новом слабеньком ноутбуке слабеньком с двухядерным N30601.6Ghz Gmail грузился почти 40 секунд, окно создания нового письма открывалось… 30 секунд! Было такое ощущение, что gmail попутно майнит биткойн.
На 6 ядерном Xeon прокрутка списка сообщений не плавная, и это ухудшилось именно в последний год. 10 лет назад даже на одноядерном CPU всё было как-то быстрее и плавнее в Gmail.
Уже давно пользуюсь google inbox. Он понравился больше, интерфейс проще и чище, плюс очень понравился функционал откладывания писем и создания напоминаний (с интеграцией с календарем). А сегодня появилось сообщение «Поддержка Inbox от Gmail заканчивается в конце марта 2019 г. В новой версии Gmail обновлен дизайн и сохранены лучшие функции Inbox, такие как откладывание писем, напоминания и другие.». Решил глянуть на новый интерфейс gmail — выглядит ужасно. Из плюсов вижу только интеграцию календаря и keep. Если в inbox у меня на виду с десяток писем/напоминаний, то в gmail куча старых писем. Нету функционала напоминаний, а он был очень удобен для создания простых напоминалок, не надо было лезть календарь.
UFO landed and left these words here
О да! Там тормозов ещё больше. Я пол года не мог фильтры настроить, потому что окно с ними тупо зависало. Потом в Файерфоксе стало через раз работать. Может одному ещё можно пользоваться, но в качестве корпоративной почты это полный трэш. Гугл хоть и косячит, но до Майкрософта ему ещё далеко
Ничего не понял. У меня на ноуте и дектопе в Хроме всегда открыты необходимые табы, в том числе гмэйл. Хром всегда запущен. ОС тоже всегда загружена (на ночь компы уходят в спячку). На дектопе и ноуте памяти 8, оба процессора i3. Таким образом все всегда готово к работе и что такое ждать загрузки я не знаю. Что я делаю не так или не правильно?
Only those users with full accounts are able to leave comments. Log in, please.