У css-modules есть досадный минус: из коробки они плохо типизированы. Если написать import styles from './Comp.module.css'; , то styles оказывается просто Record<string, string>. Есть какие-то дополнительные нашлепки, которые генерят *.d.ts, но это так себе.
На текущем проекте используем vanilla-extract, вполне устраивает.
ТСО не добавляют в js, потому что смысла в этом нет. Если функция подходит для ТСО, то её проще и правильнее переписать на цикл. Тот же "хвостовой" факториал выглядит искусственно в сравнении с обычным: "технический" второй параметр, запутанная логика.
Странно конечно, что canvas всё равно выигрывает. Возможно потому, что там не "честные" глифы рисуют.
canvas вообще не рисует, у него есть метод, который просто измеряет размеры строки в пикселях, но там нельзя например задать ограничение по ширине, то есть никакого выравнивания он не делает. Потому и быстрый.
История про то, как внутри браузера реализована некая довольно полезная функциональность, но по каким-то причинам до сих пор нет нормального браузерного api к ней, и пришлось дублировать реализацию. Не в первый раз, кажется.
Ну не совсем всё, arr не попал в копилку. А вот дальше разбираться не стали. Но возможно (хотя и нельзя сказать наверняка), что оптимизирующий компилятор v8 более аккуратно отследит все ссылки и таки выкинет data на мороз, тут не знаю.
Хотя конкретно в этом примере компилятор может не знать дальнейшую судьбу функции, переданной в arr.find, но эффект воспроизводится даже в таком случае, где всё очевидно:
Уже где-то писал, что в бинарном поиске (который "обычный") среднее количество итераций будет почти как как максимальное, log(n). То есть lowerBound и upperBound требуют в среднем в два раза меньше сравнений, поэтому обычный поиск лучше сделать через один из них, а не писать отдельно.
В замыкание попала data. Это потому, что все упоминаемые во внутренних функциях объекты садятся в одну "лодку", на которую все эти внутренние функции будут ссылаться. И неважно, что (item) => item === data в мусорке, общий объект продолжает жить - на него ссылается func
Интересный пример one-person компании - Photopea, веб-аналог фотошопа. Чел за несколько лет без всякого ИИ запилил весь код в одно лицо, неплохо поднимает на рекламе и платных подписках
Либо кто-то путает слова "высокая" и "нулевая", либо Дуров таки "вышел на связь с властями" и пообещал дать спецслужбам полный доступ ко всем перепискам, модераторство каналов и возможность втыкать свои закладки.
Паззл с точками и окружностью любопытный. Навскидку, там сначала надо построить наименьшую окружность для внутренних точек. Если не фартануло, то с одного края в эту окружность залезли внешние точки (рис. 1), и надо будет построить окружность, жестко зафиксированную между двумя красными выпуклыми оболочками (рис. 2) - это и будет минимальная возможная окружность.
Экономический, медийный и внутриполитический ущерб от происходящего
Экономический компенсируется повышением налогов и прочих цен на бензин. Это не режим станет меньше "пить", а мы - меньше "есть". А всякие абстракции вроде медийного ущерба им по барабану.
У css-modules есть досадный минус: из коробки они плохо типизированы. Если написать
import styles from './Comp.module.css';, тоstylesоказывается просто Record<string, string>. Есть какие-то дополнительные нашлепки, которые генерят *.d.ts, но это так себе.На текущем проекте используем vanilla-extract, вполне устраивает.
ТСО не добавляют в js, потому что смысла в этом нет. Если функция подходит для ТСО, то её проще и правильнее переписать на цикл. Тот же "хвостовой" факториал выглядит искусственно в сравнении с обычным: "технический" второй параметр, запутанная логика.
Человек не может объективно оценивать период, в который он был молод, ностальгия неизменно измажет всё яркими красками.
canvas вообще не рисует, у него есть метод, который просто измеряет размеры строки в пикселях, но там нельзя например задать ограничение по ширине, то есть никакого выравнивания он не делает. Потому и быстрый.
А если держать на странице отдельный iframe с минимумом верстки, и измерять текст внутри него - это тоже будет долгий layout рефлоу?
История про то, как внутри браузера реализована некая довольно полезная функциональность, но по каким-то причинам до сих пор нет нормального браузерного api к ней, и пришлось дублировать реализацию. Не в первый раз, кажется.
По разному бывает. На моей прошлой работе, например, схему (в дополнение к ТЗ) составляли аналитики, натурально записывая файлы вручную.
Так я об этом и написал )
Ну не совсем всё,
arrне попал в копилку. А вот дальше разбираться не стали. Но возможно (хотя и нельзя сказать наверняка), что оптимизирующий компилятор v8 более аккуратно отследит все ссылки и таки выкинетdataна мороз, тут не знаю.Хотя конкретно в этом примере компилятор может не знать дальнейшую судьбу функции, переданной в
arr.find,но эффект воспроизводится даже в таком случае, где всё очевидно:Но схемы умеют делать дополнительные проверки, например по регексу.
А вообще, имхо, источником правды должен быть сваггер/openApi, из которого на фронте генерятся типы и (при необходимости) валидаторы.
Уже где-то писал, что в бинарном поиске (который "обычный") среднее количество итераций будет почти как как максимальное, log(n). То есть lowerBound и upperBound требуют в среднем в два раза меньше сравнений, поэтому обычный поиск лучше сделать через один из них, а не писать отдельно.
В v8 (и наверно не только) всё ещё интереснее:
В замыкание попала
data. Это потому, что все упоминаемые во внутренних функциях объекты садятся в одну "лодку", на которую все эти внутренние функции будут ссылаться. И неважно, что(item) => item === dataв мусорке, общий объект продолжает жить - на него ссылаетсяfuncИнтересный пример one-person компании - Photopea, веб-аналог фотошопа. Чел за несколько лет без всякого ИИ запилил весь код в одно лицо, неплохо поднимает на рекламе и платных подписках
В движках JS для такого кейса давно реализованы т.н. sliced-строки, переиспользующие буфер.
Идея с отображением точек очень крутая!
Либо кто-то путает слова "высокая" и "нулевая", либо Дуров таки "вышел на связь с властями" и пообещал дать спецслужбам полный доступ ко всем перепискам, модераторство каналов и возможность втыкать свои закладки.
Тут ещё стоит упомянуть, что реестр не зафиксирован, в него можно потом добавить свои варианты с помощью declaration merging
Это проще, чем научиться стабильно находить заказы на плиточные работы, особенно если нет опыта фрилансерства.
Паззл с точками и окружностью любопытный. Навскидку, там сначала надо построить наименьшую окружность для внутренних точек. Если не фартануло, то с одного края в эту окружность залезли внешние точки (рис. 1), и надо будет построить окружность, жестко зафиксированную между двумя красными выпуклыми оболочками (рис. 2) - это и будет минимальная возможная окружность.
Экономический компенсируется повышением налогов и прочих цен на бензин. Это не режим станет меньше "пить", а мы - меньше "есть". А всякие абстракции вроде медийного ущерба им по барабану.