Такой подход прекрасно попадает под pareto principle – работает для большинства случаев с минимальным оверхедом. Там где не проткатит – так уж и быть, придется расчехлять свои компоненты и передавать явный null вместо неявного.
Про мемоизацию:
В общем тут нужно видеть код.
В общем-то в демке я почти весь код и показал, кроме разве что обработчиков событий и стилей.
Понимаю, что при усложнении кода тут может оказаться проблема (а может и нет, кто же знает). Но фиксить сейчас не существующую проблему – это классическая преждевременная оптимизация
Ну и вообще, для человека из Ангуляра первые два решения смотрятся диковато.
А как бы вы это сделали?
Ну и насчет последнего, вы каждый раз милисекунды замеряете, чтоб ненароком лишнюю оптимизацию не вставить
Дело в том, что мемоизация – это не волшебный соус, который можно просто добавить, и всё станет сразу быстрее. Наоборот, это очень хрупкая конструкция, которую нужно очень тщательно тюнинговать и профайлить (в какой-то момент вычисление ключа кэша может оказаться дороже вычисления заново). Этого конечно же в указанной истории никто не делал.
Конкретно в этой ситуации – нет. Когда я показал как надо, разработчики согласились тоже. Проблема именно в том что они не знали что так можно. Не научили в свое время
Имеется в виду почему не было подписки на событие DOMContentLoaded?
Потому что ReactDOM.render обычно синхронно исполняется. Вон и в популярнейшем create-react-app так и сделано. Если перенести код в обработчик, то тоже работать будет.
Классика жанра – как только какое-то благое дело конвертируют в цифры, люди начинают гнаться за наибольшей (или наименьшей, как в этом случае) цифрой, совершенно не задумываясь о её смысле
Гитхаб, к сожалению, девальвировал в последнее время. Развелось слишком много воркшопов, самоучителей и боилерплейтов. По репозиториям теперь не понять, собственный код это у кандидата или с методички списал
Если от кандидата на работе требуется написание кода, то проверять этот навык нужно обязательно. Теоретической беседой "о технологиях" это не проверить, нужно писать именно код.
В моем опыте собеседующего было слишком много кандидатов, которые д'Артаньяны в теоретической части (лидил команду в 10 человек, настроил CI/CD, всё модульное и идеально протестированное). А стоит такому дать простую задачку написать два UI компонента и продумать их API, чтобы гибко и тестируемо, и он моментально скисает.
Тестовое задание не должно быть большим. Не нужно требовать полностью функциональное приложение. Достаточно написать пару компонентов, и уже будет понятно, годится кандидат или просто бросается модными словами.
Все демки обложены комментариями о том, что в одном файле это лежит только чтобы компактно показать идею. В реальном коде это можно и нужно вынести в отдельный сервисный слой. Нужно смотреть на идею в целом, а не докапываться до запятых.
Не очень понимаю смысл претензий. Когда вы используете компонент, вам же не обязательно заглядывать в его код, чтобы понять, какие props он ожидает и чего отрендерит? Так же и с переиспользуемыми хуками – есть четкое API, что он получает на вход и что даёт на выход.
Если у вас так не получается, и нужно регулярно держать в уме всю иерархию хуков – то это проблема с вашей архитектурой и дроблением на модули, а не с хуками как таковыми.
что тестируем-то? Код на соответствие спеке DOM? Проблемы будут не там.
Тестируем Javascript часть компонента. В реальных проектах кастомного CSS не так много, большая берется из готовой дизайн-библиотеки, поэтому нужно лишь проверить что в таком-то сценарии показываются такие-то компоненты с определенным контентом.
Для UI компонентов конечно же нужны другие виды тестов, но это отдельный проект, и не каждый разработчик изобретает свою версию ant.design
Селениум — это отлично, но на этапе разработки это развёртывать — слишком муторно
Что муторного в npm install chromedriver? Видимо, пора уже написать отдельную статью "разрушаем миф сложного selenium", потому что ну очень часто вижу заблуждение "не хотим selenium потому что сложнааа"
Наркомания какая-то, если честно. Особенно часть про children, где они предлагают делать так
Вместо того чтобы
Для пятничного поста в "ненормальное программирование" еще бы зашло, но писать такое регулярно - увольте.
Насколько я знаком с Angular, там ровно такая же проблема:
Как вы заранее узнаете, есть ли что-то в ng-content или нет?
Замедления в скорости разработки – конечно были. В этом и суть, что такие псевдо-оптимизации добавляют команде мартышкин труд по их поддержке.
Нет, золотая рыбка, $mol я использовать не буду
А к какому случаю из статьи это относится?
Кажется, тут переизобрели AngularJS
Про empty:
Такой подход прекрасно попадает под pareto principle – работает для большинства случаев с минимальным оверхедом. Там где не проткатит – так уж и быть, придется расчехлять свои компоненты и передавать явный null вместо неявного.
Про мемоизацию:
В общем-то в демке я почти весь код и показал, кроме разве что обработчиков событий и стилей.
Понимаю, что при усложнении кода тут может оказаться проблема (а может и нет, кто же знает). Но фиксить сейчас не существующую проблему – это классическая преждевременная оптимизация
А как бы вы это сделали?
Дело в том, что мемоизация – это не волшебный соус, который можно просто добавить, и всё станет сразу быстрее. Наоборот, это очень хрупкая конструкция, которую нужно очень тщательно тюнинговать и профайлить (в какой-то момент вычисление ключа кэша может оказаться дороже вычисления заново). Этого конечно же в указанной истории никто не делал.
Конкретно в этой ситуации – нет. Когда я показал как надо, разработчики согласились тоже. Проблема именно в том что они не знали что так можно. Не научили в свое время
я все решения под спойлер спрятал, чтобы можно было сначала самому над ответом подумать, а потом подглядеть
Имеется в виду почему не было подписки на событие DOMContentLoaded?
Потому что ReactDOM.render обычно синхронно исполняется. Вон и в популярнейшем create-react-app так и сделано. Если перенести код в обработчик, то тоже работать будет.
Классика жанра – как только какое-то благое дело конвертируют в цифры, люди начинают гнаться за наибольшей (или наименьшей, как в этом случае) цифрой, совершенно не задумываясь о её смысле
Разработчики:
Фронтенд на реакте занимает 200 килобайт, это непозволительно много, не позволим!
Те же разработчики:
У нас тут hello world на Go, всего 500 килобайт, как мило и компактно, за этим будущее!
Если вы реально 2 часа писали приложение, только чтобы ответить этим комментарием, то снимаю шляпу, моё уважение
Гитхаб, к сожалению, девальвировал в последнее время. Развелось слишком много воркшопов, самоучителей и боилерплейтов. По репозиториям теперь не понять, собственный код это у кандидата или с методички списал
Если от кандидата на работе требуется написание кода, то проверять этот навык нужно обязательно. Теоретической беседой "о технологиях" это не проверить, нужно писать именно код.
В моем опыте собеседующего было слишком много кандидатов, которые д'Артаньяны в теоретической части (лидил команду в 10 человек, настроил CI/CD, всё модульное и идеально протестированное). А стоит такому дать простую задачку написать два UI компонента и продумать их API, чтобы гибко и тестируемо, и он моментально скисает.
Тестовое задание не должно быть большим. Не нужно требовать полностью функциональное приложение. Достаточно написать пару компонентов, и уже будет понятно, годится кандидат или просто бросается модными словами.
Все демки обложены комментариями о том, что в одном файле это лежит только чтобы компактно показать идею. В реальном коде это можно и нужно вынести в отдельный сервисный слой. Нужно смотреть на идею в целом, а не докапываться до запятых.
Не очень понимаю смысл претензий. Когда вы используете компонент, вам же не обязательно заглядывать в его код, чтобы понять, какие props он ожидает и чего отрендерит? Так же и с переиспользуемыми хуками – есть четкое API, что он получает на вход и что даёт на выход.
Если у вас так не получается, и нужно регулярно держать в уме всю иерархию хуков – то это проблема с вашей архитектурой и дроблением на модули, а не с хуками как таковыми.
Это не ошибка архитектуры, это просто moment – проклятая библиотека. Ее нужно избегать в любом случае: https://github.com/you-dont-need/You-Dont-Need-Momentjs
Я изначально отвечал на коммент о том что Cypress это "честный e2e".
Если понимать его ограничения и его место в тестовой пирамиде (была на эту тему релевантная статья), то инструментом вполне можно пользоваться
Я в курсе про эту штуку. Более того, она появилась отчасти из-за моих усилий по распространению информации об этом недостатке.
А я вот так не думаю. Автор сделал это как хобби-проект, core-команда в этом не заинтересована. Пруф.
Тестируем Javascript часть компонента. В реальных проектах кастомного CSS не так много, большая берется из готовой дизайн-библиотеки, поэтому нужно лишь проверить что в таком-то сценарии показываются такие-то компоненты с определенным контентом.
Для UI компонентов конечно же нужны другие виды тестов, но это отдельный проект, и не каждый разработчик изобретает свою версию ant.design
Что муторного в
npm install chromedriver? Видимо, пора уже написать отдельную статью "разрушаем миф сложного selenium", потому что ну очень часто вижу заблуждение "не хотим selenium потому что сложнааа"