Я не уверен, в чем здесь вопрос, но есть страница документации и различные примеры , чтобы понять, как использовать hyperHTML, что не совсем такВы используете его.
На самом деле, здесь нет необходимости указывать какие-либо ссылки, потому что hyperHTML декларативен, поэтому вы можете написать:
function update(text) {
var render = hyperHTML.bind(document.body);
render`static1 - <div>${text}</div> - static2`;
}
и вызывать update("any text")
в любое время.вам нужно.
Вот как я думаю, что это работает ... Это правильно?
Нет, это не так.hyperHTML не клонирует ничего, как вы описали, он связывает один раз для каждого уникального тега шаблона очищенную версию с выводом и обнаруживает все интерполированные дыры в нем.
Часть библиотеки, которая делает это, называется domtagger , и отображение для литерала шаблона основано на стандартном факте, что они уникальны для области:
const templates = [];
function addTemplate(template, value) {
templates.push(template);
return template.join(value);
}
function asTemplate(value) {
return addTemplate`number ${value}!`;
}
asTemplate(1);
asTemplate(2);
asTemplate(Math.random());
templates[0] === templates[1]; // true
templates[1] === templates[2]; // true
// it is always the same template object!
После этого любой другой элемент, использующий один и тот же шаблон тега, будет иметьклон этого фрагмента с картой, чтобы найти дыры один раз, и некоторую сложную логику, чтобы избежать замены всего, что уже известно, будь то текст, атрибуты, события или любой другой тип узла.
hyperHTML никогда не удаляет комментарии,он использует их в качестве вывода, а затем использует domdiff , чтобы в конечном итоге обновлять узлы, связанные с этими выводами, всякий раз, когда необходимо что-либо обновить.
Domdiff - реализация алгоритма petit-dom без использования vDOMкоторый, в свою очередь, основан на разностном алгоритме Э. Майерса " O (ND) иЕго варианты" paper .
Всякий раз, когда у вас есть узлы DOM в отверстиях, hyperHTML понимает это и заполняет эти отверстия этими узлами.Если вы неоднократно проходите один и тот же узел, hyperHTML ничего не будет делать, потому что он полон алгоритмов и умных решений, описанных в документации, для достижения максимальной производительности из своей абстракции.
Все эти вещи игораздо больше, нормализовано для любого браузера, делает вес hyperHTML примерно 7 КБ после минимизации и сжатия, а также предлагает:
- Пользовательские элементы, такие как перехваты через подключенных / отключенных слушателей
- легкийкомпоненты через hyperHTML.Component
- SVG-манипуляции в виде содержимого или по проводам
- easy Определение пользовательских элементов с помощью класса HyperHTMLElement
В качестве сводки, если вам нужны эти упрощения и выне хочу изобретать велосипед, я советую вам попробовать его лучше.
Если вы просто пытаетесь понять, как оно работает, вам не нужно ничего предполагать, потому что проект полностью открыт.
Пока все, что я прочитал по вашим вопросам здесь итам, это то, что вы просто верите, чтобы понять, как это работает, поэтому я надеюсь, что в этом ответе я собрал все недостающие части, которые вам нужны, чтобы полностью понять это.
Вы хотите написать свой собственный lit / hyperHTMLбиблиотека?Не стесняйтесь использовать domtagger или библиотеку domdiff тоже, немногие уже делают то же самое.