Отсталый веб
Когда-то давно на сайтах был только текст, изредка небольшие формы. То есть много было не нужно:
,
,
,
,
, и всякие текстовые тэги
.
Потом в вебе стали делать сложные интерфейсы, и появилась необходимость в более продвинутых элементах: тултипах, модальных окнах, слайдерах, контекстных меню и прочих вещах, к которым мы привыкли, например, в системе. И вот в этой теме веб обосрался по полной.
Конечно, эти элементы можно наколхозить, используя 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?
Короче, получается такая картина: веб взлетел благодаря своей простоте, но когда запросы людей выросли, он не смог адаптировать к ним эту простоту. Вот так и живём на останках древней великой цивилизации.
11 октября 2023 Указатель