Дима

Отсталый веб

Когда-то давно на сайтах был только текст, изредка небольшие формы. То есть много было не нужно:

, , , , , и всякие текстовые тэги.

Потом в вебе стали делать сложные интерфейсы, и появилась необходимость в более продвинутых элементах: тултипах, модальных окнах, слайдерах, контекстных меню и прочих вещах, к которым мы привыкли, например, в системе. И вот в этой теме веб обосрался по полной.

Конечно, эти элементы можно наколхозить, используя CSS и JS. Однако сложный интерфейс это не просто куча разных элементов, а ещё и интерактивность с реактивностью. И вот тут-то начинается самое весёлое...

Дело в том, что в HTML+CSS интерактивность на уровне "при наведении на элемент покрась его в синий", а реактивность на JS даже сегодня не все осилили (привет, Вордпресс!). Из-за этого и случился взлёт Реакта и подобных ему библиотек, которые эту реактивность как-то причёсывают в удобный вид.

Можно сравнить, как выглядит код, реализующий пример ниже, на нативных HTML+JS и на Vue (библиотека для реактивности).

Измени меня
// Нативная реализация
<input id="input" value="Измени меня">
<code id="value">Измени меня</code>

<script>
    const input = document.getElementById('input')
    const value = document.getElementById('value')
    input.addEventListener('input', (event) => {
        value.innerText = event.target.value
    })
</script>
// Vue
<template>
    <input v-model = "value">
    {{ value }}
</template>

<script setup>
    import { ref } from 'vue'
    const value = ref("Измени меня")
</script>

Тут сразу понятно, на чём предпочтут писать разработчики.

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

Ещё второй код отличается от первого тем, что HTML и JS (то есть представление и логика) там гораздо лучше интегрированы друг с другом, чем в обычной среде браузера. Например, можно выводить переменные из JS прямо на страницу без всяких сложностей. Отсюда выносим третий пункт, по которому веб отстал: в разделении кода на HTML, CSS и JS больше нет смысла. Много ли мы видим сейчас сайтов без JS? А сайтов без CSS?

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