Pull to refresh
17

Senior Frontend Developer

9
Subscribers
Send message

Ээм... Ну, typescript это пакет, содержащий библиотеку, написанную на JS. Когда вы запускаете tsc из консоли, node/deno/bun загружают в себя код из этой библиотеки, вызывают встроенный в них копилятор (для Node и Deno это V8, для bun JavaScriptCore), который парсит этот код, компилирует его в нативный и исполняет...

Мне правда нужно это объяснять?

А как вам bun/deno заменит TS? Они ж перпендикулярны друг другу. Node/deno/bun только стрипают типы, а чтобы построить граф и проверить, все ли типы соответствуют друг другу — всё равно оригинальный TS нужен

Его исполняет V8, который и так заоптимизирован по самые помидоры. Ускорения x10 от него точно фиг добьёшься. Дальше либо компиляция JS в нативный код, либо нативный код сразу. Они выбрали второй вариант.

А я-то в кои-то веки думал цивилизованную дискуссию вести... Глупый, глупый я 😔

А всего-то стоило немного погуглить и найти пост Дэна Абрамова. Который TL;DR: "Мы подумали, что так будет лучше, а когда поняли, что не будет, было уже слишком геморно всё менять".

Учитесь гуглить, уважаемый.

Вы в комментариях выше доказывали мне что частичный всегда, а оказалось нет…

Ээ, простите, вы о чём? Не вижу связи

Это не так, иначе бы JSX не могли использовать другие фреймворки. А оно спокойно существует и в SolidJS, и в Stencil, и в Vue, кстати говоря (по крайней мере, можно было в той версии, с которой я знакомился). И если мне память не изменяет, из всех них только реакт использует className. И да, даже если вы в реакте напишете class, он не умрёт на этапе компиляции, а честно создаст объект с полем class.

Примеры:

Функции в шаблон Lit передавать не рекомендуют. Для реакции на события есть @-поле, оно там отдельно оптимизировано (там используется объект { handleEvent }, который заведует подпиской на событие, и у которого просто заменяется функция, так что на слушателей shallow check не распространяется).

Обход по всем значениям это не круто

Это уже экономия на спичках. Цикл — одна из самых оптимизированных операций в JS, тем более тот, который не использует итераторы. Вряд ли вы будете создавать шаблон с миллионом значений, а с таким объёмом JS справляется за миллисекунды.

Не задавались вопросом почему вместо class в JSX className?

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

Ммм, вы говорите про shallow check, что ли? Если сильно (очень сильно!) упрощать, то он выглядит как-то так:

const registry = new WeakMap<TemplateStringsArray, TemplateResult>();

function html(strings: TemplateStringsArray, values: readonly unknown[]): TemplateResult {
    if (registry.has(strings)) {
        const result = registry.get(strings)!;

        for (let i = 0; i < strings.length; i++) {
            if (result.get(i).value !== values[i]) {
                result.update(values[i]);
            }
        }
    } else {
        // Init code
    }
}

function exec(txt: string) {
  render(html`<div>${txt}</div>`, document.getElementById('root'));
}

Что тут может нагружать CPU, да ещё и неимоверно?

Он там частичный абсолютно всегда. Любое изменение дёргает только конткретные атрибуты/поля/ивенты. Изначальный код HTML заворачивается в template, далее в местах разрыва tag literal регистрируются "дырки" (holes или values), которые при повторном рендере обновляются по изменению value по конкретному индексу. В общем, все преимущества Virtual DOM без его недостатков. Свои caveats там, конечно, тоже есть (например, нельзя вдруг поменять имя тэга, это требует пересчёта всего элемента и теряет все преимущества), но по сравнению с virtual dom они гораздо менее существенны. И работает безо всякой транспиляции, прямо в браузере.

Я написал extension для visual studio code

А если я пользкюсь Intellij IDEA? )

Критическая проблема данного подхода — это неподсвечиваемые, невалидируемые (через линт) и неформатируемые выражения внутри строк. Собственно, для решения этой проблемы и появился JSX. Он позволяет использовать все возможности JS без ограничений, и при этом всё ещё иметь выразительный язык шаблонов. Ангуляр, кстати, тоже от этой проблемы страдает, но это уже просто наследие ранних подходов.

Но если так хочется совместить строки и pure JS, почему не воспользоваться Lit? (точнее, lit-html, веб компоненты тянуть не обязательно). Lit как раз отлично решает проблему: это прямые строки, никакой компиляции, и в то же время можно свободно пользоваться возможностями языка

Ааа, вон оно как! Спасибо за объяснение, паззл сложился 😊

В августе? 2023? 🧐

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

Пхпх, а чего мне на вас время тратить-то 🤭 Что вообще можно сказать лягушке, которая не интересуется ничем, кроме своего колодца?

Вы там под корягой прогаете, если про сигналы не слышали, или да?

А вообще смешно, конечно, смотреть на ваши потуги доказать, что вы правы.

Но меж тем реальность, увы, не на вашей стороне.

  • Preact изобрёл сигналы (ну, не то чтобы это новая технология, но именно их реализация запустила хайп)

  • React принял сигналы по умолчанию (в смысле, они ничего не делали, Preact изначательно реализовывал сигналы и для реакта тоже).

  • Ангуляр внедрил у себя сигналы, который заменяют (барабанная дробь) rxjs.

  • У Vue они теперь тоже есть, как Alien Signals.

  • Solid с сигналами работает ещё до Preact.

  • Svelte втащили себе сигналы.

  • И даже в TC39 появился пропозал на включение нативных сигналов в платформу.

Если это не популярность, то вы попросту отрицаете реальность, пытаясь основываться на ничего не значащих циферках.

В случае с популярностью это доказывается именно так.

Вот как? Тогда самый популярный стейт-менеджер это rxjs. Ни редакс, ни ваш зустанд рядом даже чихнуть не смеют. Всё верно?

И что вы этим докажете? Что много легаси на редаксе работает? Ну так на jQuery 90% веба до сих пор крутится.

А вот предложение на включение в JS редакс точно не получал.

Иммутабельные паттерны разработки UI-приложений в последние годы стали одними из самых популярных

Я даже пошёл календарь перепроверить, не оказался ли я случайно в 2018. Иммутабельные паттерны разработки при том, что у нас уже много лет есть сигналы? `Immutable.js` в 2026? И я, конечно, догадывался, что Redux всё ещё где-то рядом с нами, но назвать его популярным?

В общем, статья вызывает большие вопросы о релевантности (и ностальгию!)

Анонимную функцию, созданную прямо в addEventListener, удалить невозможно.

AbortController: ну да, ну да, пошёл я нафиг

Ну, maintenance mode же. Конечно что-то фиксят. Но вот Material Expressive уже не дождёмся, как и бо́льшей части компонентов оригинальной спеки

1
23 ...

Information

Rating
5,423-rd
Location
Россия
Date of birth
Registered
Activity