усы2

Стой под стрелой

Поступки и мысли, о которых могу вспомнить не краснея

Previous Entry Поделиться Next Entry
Крутое пике
усы2
tonsky

Сегодня я расскажу вам, как хорошо и замечательно обстоят дела на бэкенде. Какие там простые технологии, как легко пишется, как стабильно всё работает. Начинается история с того, что два года назад я перешел во фронтенд.

Главный ресурс фронтендера — MDN. Я туда хожу в основном за лулзами. Открываем, например, XMLHttpRequest и читаем:

Despite its name, XMLHttpRequest can be used to retrieve any type of data, not just XML, and it supports protocols other than HTTP.

Морская свинка, как известно, не морская и не свинка.

Насколько у ребят всё под контролем, можно понять по тому, как XMLHttpRequest назван. Поговаривают, что есть рабочая группа, готовящая переименование в XMLHttp_request.

Раньше нервный тик у меня был только на язык C. Теперь появился второй: на верстку. Не важно, насколько пуленепробиваемо ты сверстал и сколько тестировал, всегда найдется полудохлый, но актуальный браузер с тремястами пользователями (прости, Опера), в котором всё разъедется. А если нет, то нарисуется чел с телефоном ромбовидной формы и разрешением 200×1000, которому обязательно нужно чтобы всё влезало по диагонали (ромб же!) и было при этом большим и читаемым. А если не найдется и вы себе соломки везде подложили, то через полгода команда Хрома всё равно выпустит новую версию с новой точкой зрения на стандарты. Редкий сайт долетает до шестой мажорной версии Хрома.

Самый страшный браузер? Мобильный Сафари. Он просто ОЧЕНЬ старается показать сайт на мобильнике хорошо. ОЧЕНЬ. Никогда не думал, что про IE буду вспоминать с нежностью. IE хотя бы не притворялся, что пытается помочь. У нас тут своя атмосфера. Честно. Прямо. У 11 версии официальный слоган был «Deal with it».

Основной вопрос веб-разработки: почему не у всех стоит Хром? Если видите улыбающегося веб-девелопера, значит, он пишет под Электрон. С каждым приложением свой Хром. Фиксированной версии. И вперед. Тяжеловато по памяти, правда. Но ничего, скоро они научатся шарить общий рантайм, и получится... получится...

Веб в вебе это еще полбеды. Его же тащат везде. На сервер, в мобилки. У вас есть там классные языки? Java очень быстрая? Питон очень логичный? Хаскель очень безопасный? Да, отлично, ну вот вам JavaScript тогда еще. Ну и что что убогий, мы всё равно на нем будем писать.

Это вообще железная логика. Вот WebAssembly. Был у нас один убогий язык на фронте. Ужасно спроектированный, с никакущей инфраструктурой, без стандартной библиотеки, писать невозможно. Что еще подходит под это описание? О, C++ подходит. Давайте добавим его. Теперь у нас два языка!

Но самый огонь это конечно ES 6. Тут уже сами фронтендеры признали, что JavaScript как язык не очень. Что неплохо бы компилировать из чего-то поприличнее. И что они взяли? Тот же самый, блин, JS!

Знаете, как они вообще решают проблемы? Лет 15 назад была инициатива, семантический веб. Наведем порядок, всё разметим, метатеги, микроформаты, RDF. Чем закончилось? Недавно узнал, что 2GIS написал нейронку, которая ходит по сайтам организаций и пытается понять, что там написано. Оказалось, чем навести порядок, проще сделать искусственный интеллект.

Но самый стресс, конечно, от безнадеги. Если на сервере ты работаешь на технологии и страдаешь, то ты знаешь, что рядом есть компании, который пишут на чем-то хорошем, и когда-нибудь ты там окажешься. А если все пишут на говне, то рано или поздно это говно выкинут и напишут новое. Целые экосистемы возникают и достигают расцвета на наших глазах, на протяжении одной карьеры. Это вообще очень полезно, выкидывать и начинать заново. Живешь надеждой.

А на фронте не так. Логики нет, и надежды никакой нет. Веб уже не простой, не цельный, не компактный, не быстрый. И он никогда не будет простым, никогда не будет логичным, не будет цельным, компактным, быстрым. Дальше только хуже, это медицинский факт. Единственный способ выживать — иллюзии — имеют свойство рассеиваться.

Был такой сериал, «Крутое пике». В нем авиалайнер терпит крушение и стремительно падает на протяжении 327 серий. Конечно, всё летит в ад, но пока летит, они в принципе неплохо проводят время. Ну вот. Веб с нами надолго. Вчера, говорят, Курт Кобейн застрелился. Обнимемся.


Ну и как ты читал Карнеги - нужно везде видеть хорошее и превращать минусы в плюсы. Фронтенд коммунити массово ебанулось и усложняет проект редуксами, графкл, вебкомпонентами, северным пререндерингом и тп? Надо делать свою компанию и предлагать услуги разработки и делать тоже быстрее и дешевле :)

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

Хорошее бабло за бессмысленную работу это не способ получить удовлетворение от жизни, это прямой путь к расшатанным нервам и неврозам

Я согласен с тобой, это тупая трата своего времени. Но это ответ на твой вопрос - что делать со старыми браузерами - ответ - поговорить с менеджментом и слать их лесом. Ну либо кому-то может нормально делать скучную работу за доп оплату.

Трололо пост.

CSS и нативный js - не сахар, но все решается абстракцией, в том числе и в верстке. Фичи из es6, es2015 неспеша попадают в браузеры, и как раз с хромом тут меньше всего проблем - https://kangax.github.io/compat-table/es6/

Web assembly - не только с++, вопрос поддержки в компиляторах. Вот, например, rust - https://blog.rust-lang.org/2016/12/22/Rust-1.14.html. Ну и тут никто не заставляет, тот же clojurescript есть, на dart пишут где-то и на чем только еще не пишут.

Из тех вещей, что что когда-то сломали в хроме вспоминается только неотключаемый автокомплит для отдельных полей и "Not secure" предупреждение при наличии поля ввода пароля на не ssl странице. А, ну еще -webkit- свойства в css, от которых потом отказались.

Есть ли где-то реальные случаи поломок между версиями хрома?

Ну и прочее, и прочее. XMLHTTPRequest не модно ругать уже лет десять.

Это я пишу не потому, что я доволен тем, как работает фронтенд, мне просто кажется, что есть много других проблем, которые гораздо хуже, и про которые не написано. Например, раздувающийся размер css

Вопрос по Java, может я что-то упускаю... ты сказал что JVM (я так понимаю ты имел виду использовать JVM с Java, не Clojure) это лучшее для качества и быстродействия. Оставим в стороне вопрос качества по нему дискуссия будет слишком долгой и субьективной. Посмотрим быстродействие.

- В жава есть 2 пути - это треды и асинхронность. Треды плохи что много весят и забивают планировшик при большом числе. Поэтому делается микс из асинхронной работы с сетью/внешним-миром и тред-пула воркеров. В идеале это все должно-быть просто и чисто, но по факту обычно приходится делать что-то что не укладывается в эту картину, и асинхронный код просачивается в проект и его приходится писать вручную, и мы получаем ту-же асинхронную лапшу что и на ноде, хоть и в меньших маштабах.

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

- Второе это синхронизация тредов. Сейчас стало популярно писать неблокирующий код и использовать иммутабельные структуры данных. И такой код еще сложней и длинеей чем старый блокирующий.

- Одним из важнейших условий для производительности является простота алгоритма и реализации, чем проще - тем легче понять как он работает и оптимизировать. Из-за вышеперечисленный особенностей жава код получается крайне обьемный и запутанный и с ним тяжело работать.

Где я ошибаюсь?

Edited at 2017-04-09 15:52 (UTC)

- производительность ≠ удобная обработка веб-запросов
- веб-запросы ≠ асинхронность
- асинхронность ≠ лапша
- производительность ≠ многопоточность
- производительность ≠ JMM
- неблокирующий код ≠ иммутабельность
- иммутабельность ≠ производительность
- неблокирующий код ≠ производительность
- простота ≠ производительность
- простота ≠ удобство
- алгоритм ≠ реализация
- оптимизация ≠ простота
- компактность ≠ производительность
- компактность ≠ простота
- компактность ≠ удобство

Ну как-то так. Достаточно?

Хмм, спасибо за ответ. Но это абстрактные ответы которые хоть формально и верны но по ним не видно картины в целом...

Если я правильно понял основную мысль, ты хочешь сказать что есть путь не использовать все эти жава сложности и при этом писать производительный код? Или что?

Какие «эти» жава сложности-то?

Да, есть путь писать производительный код. В остальных языках (питон, руби, нода, эрленг, го, что тут еще поминалось?) пути просто нет, как не упарывайся. В жаве есть. Можно выжать. Да и даже если просто обычно писать, гораздо быстрее получается, чем где-либо еще. В среднем по больнице код на JVM исполняется в 2-3 (до 10) раз быстрее, чем на других платформах. Любой код. Обычный линейный.

Akka упрощает написание асинхронных/многопоточных приложений. Java из коробки не сахар, это да.

вы просто не умеете это готовить

Два года назад я еще сам смеялся, но вот...

Все, что требует надежной работы со сложными структурами и математикой типобезопасно пишется на OCaml. Потом та часть кода, которая должна работать в браузере, транслируется в JS с помощью js_of_ocaml и отдается в браузеры. Сервер (OCaml, насквозь прошитый LWT) общается с клиентами по websockets.

Основная проблема, которая возникает - это не увлечься и не вынести на клиента слишком много.

P.S.: если что, у нас презентационно простые вещи, суперстилей или, простигосподи, дивов почти нет.

Кстати. Бросил вебдев году так в 2007. Хочу спросить: что вы блядь сделали с моим вебом? Почему сука всё такое тормозное? Мы упарывались как могли чтобы страницы загружались за полсекунды. Мы жали, обфусцировали и вырезали ненужное, чтобы пользователи с несчастными 56k модемами могли нормально всем этим пользоваться.

А что сейчас?

1. Вы сломали мне индикатор браузера о загрузке страницы. Потому что браузер думает что всё уже загружено, но на самом деле у вас всякие реакты-хуякты, вместо содержимого страницы одни крутящиеся колёсики.

2. Страницы жрут оперативу сотнями мегабайт. Алло! Мой веб прекрасно работал на Windows XP с 256Mb оперативки. Он же отлично выглядел с Nokia N800 с 128Mb RAM. Да сейчас одну главную ютуба откроешь и оно больше выжрет.

3. Это просто адище как медленно сейчас открываются сайты на ноутбуках с процами типа Atom или AMD A4/E1. Вы их вообще за людей не считаете?

Какие-то неадекватные десятки фреймворков которые пытаются решить "как же нам из одного js-файла заинклюдить второй js-файл"... Что вы там все курите?

Edited at 2017-04-18 21:19 (UTC)

?

Log in

No account? Create an account