Подтвердить что ты не робот

Каковы варианты использования jsdom

После прочтения этого Микро шаблоны мертвы. Мне стало любопытно:

  • Использование DOM на сервере приводит к более чистым более удобным для обслуживания коду, а затем шаблонам.
  • Эффективнее ли использовать jsdom вместо механизма шаблонов.
  • Как включить jsdom в представление стандартной установки MVC.

И вообще, в каких ситуациях было бы лучше использовать абстракцию DOM на стороне сервера, например jsdom, а не механизм шаблонов, например EJS или jade.

Вопрос относится к node.js и другим SSJS

4b9b3361

Ответ 1

  • Хорошая абстракция, соответствующая инженерам на стороне клиента, использует принцип построения и изменения dom. В этом отношении он "чище", потому что есть одна ментальная модель. Его также приятно, потому что нам не нужно смешивать kluge разрозненных синтаксисов с языком шаблонов поверх другой чистой декларативной разметки, как в случае даже с "самой тупой" системой шаблонов, например усами.

  • Я бы не сказал, что более эффективно использовать jsdom для шаблонов. Пойдите, возьмите gander в google, чтобы "утечка памяти с jsdom" например. jsdom is rad, и он очень полезен для задач, таких как выходные проекты для обхода сайтов, выполняя задачи, не связанные с сервером, но я думаю, что это медленное, как дерьмо с точки зрения высокопроизводительного веб-сервера.

  • Есть миллиард способов повлиять на это. Никакой метод не появился как "стандартный" способ. Один из способов, который я видел, - отправить пустой "шаблон", т.е. Блок html, который каким-то образом представляет модель, а затем использовать это для загрузки исходного кода из модели. Из этой статьи, например:


<li class="contact" id="contact-template">
    <span class="name"></span>
    <p class="title"></p>
</li>

Это "взгляд" в классическом отношении. В типичном веб-приложении он может выглядеть примерно так:

<li class="contact">
    <span class="name"><?= $name ?></span>
    <p class="title"><?= $title ?></p>
</li>

Чтобы использовать mvc, вы устанавливаете контроллер, который смутно осознает семантику вышеуказанного представления и модели, которую он представляет. Это представление анализируется в /DOM и доступно через ваш любимый механизм выбора. Каждый раз, когда модель представляет собой изменения, вы можете использовать события изменения или обратные вызовы для обновления представления. Например:

Позволяет себе представить, что "model" запускает событие "change" каждый раз, когда изменяется свойство.

controller = new Controller({ 
    view: $('#contact-template').clone(), // Assume jquery or whatever
    model: aContact 
});

// Assume some initialization that sets the view up for the first time
// and appends it to the appropriate place. A la:
// this.view.find('.name').text(model.name);
// this.view.find('.title').text(model.title);
// this.view.appendTo('#contacts')

controller.on('model.name.change', function(name){
    this.view.find('.name').text(name);
});

Вот такие системы, как Weld и Backbone.js, для вас. Все они имеют разные предположения о том, где эта работа происходит (на стороне сервера, на стороне клиента), в какой структуре вы используете (jquery, mootools и т.д.) И о том, как ваши изменения распространяются (REST, сокет. io и т.д.).

Изменить

Некоторые действительно полезные вещи, которые вы можете сделать с jsdom, вращаются вокруг тестирования интеграции и spidering:

  • https://github.com/mikeal/spider - веб-паук общего назначения, который использует обработку событий на основе node и дает вам jsdom/jquery, чтобы помочь вам легко получить доступ к DOM в программный путь
  • https://github.com/assaf/zombie - безболезненное тестирование браузера с использованием jsdom/jquery для тестов интеграции
  • https://github.com/LearnBoost/tobi - аналогичное тестирование браузера без браузера

Лично я хотел бы увидеть проект, который использовал подход tobi, но сопоставил его над чем-то вроде https://github.com/LearnBoost/soda, чтобы мы могли облачно селеновое тестирование без селенеза (поскольку imo, это отстой).

Ответ 2

Ну, мне действительно нужен JSDom для небольшого проекта, который я построил в выходные в node.js. Таким образом, на моем сервере мне пришлось принять URL-адрес для извлечения, захватить весь HTML из заданного URL-адреса, проанализировать его и отобразить изображения для пользователя, чтобы пользователь мог выбрать миниатюру с этого URL-адреса. (Например, когда вы отбрасываете ссылку в поле ввода Facebook) Итак, я использовал модуль под названием "Запрос", который позволяет мне отображать HTML на стороне сервера. Однако, когда этот HTML-код достиг моей программы, у меня не было возможности пройти ее так же, как с клиентским javascript. Поскольку не было реального DOM, я не мог сказать document.getElementById('someId'). Поэтому JSDom пригодился, предоставив мне "временную" DOM, которая позволила мне пройти возвращенный HTML. Теперь, хотя я все еще был на стороне сервера, JSDOM создал объект window, очень похожий на оконный объект в браузере, и создал DOM из возвращаемого HTML. Теперь, даже на сервере, я смог получить все изображения, вызвав window.$('img'). Я мог настраивать и анализировать элементы, как обычно. Итак, это только одна проблема, когда JSDom оказался решением, но он работал удивительно хорошо. Надеюсь, это поможет некоторым!

Ответ 3

Некоторые приходят на ум:

  • Совместное использование представлений/контроллеров между сервером и браузером
  • Обработка данных/обработка/обработка данных
  • Преобразование для фрагментов HTML, используемых в материалах AJAX/realtime.
  • Абсолютное разделение логики и содержимого путем исключения шаблонных тегов

И чтобы ответить на ваши вопросы:

  • может быть. Многие вещи влияют на качество кода, но это шаг в правильном направлении.
  • Нет, шаблоны двигателей всегда будут быстрее, поскольку они могут предварительно скомпилировать шаблоны
  • Это, вероятно, требует нового вопроса?

Ответ 4

В пункте 2 вашего вопроса может быть дан ответ на этот шаблонный шаблон:

go http://jsperf.com/dom-vs-innerhtml-based-templating/300

  • нажмите кнопку "Запустить тесты".

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