Возможность чистого Dart DOM?

Я изучаю Dart, и меня внезапно осенило (или возможно, прозрение):

Могу ли я написать веб-приложение Dart, где «просмотр» выполняется на 100% в Dart?

Я говорю: абсолютно никаких (нет/ноль/надда) файлов HTML (.html). 100% код дартс. Что-то вроде:

class SigninView {
    LabelElement signinLabel;
    InputElement emailTextField;
    InputElement passwordTextField;
    ButtonElement signinButton;

    // constructors, getters, setters, etc.

    // Perhaps called from inside constructor...
    void initUI() {
        signinLabel = new LabelElement();
        signinLabel.innerHTML = "<span class=\"blah\">Please sign in</span>";

        emailTextField = new InputElement();
        emailTextField.innerHTML = "<input type=\"text\" name=\"fizz\" placeholder=\"Email\"/>";

        // ...etc.

        // htmlFactory would be something I'd need to write myself (?)
        String html = htmlFactory.newHTML(signinLabel, emailTextField, ...);

        querySelector("#someDivTag").innerHTML = html;
    }
}

Теоретически (то есть мои намерения с приведенным выше кодом), как только создается SigninView, он инициализирует кучу элементов DOM и заполняет ими someDivTag.

  1. Это возможно? Если да, то я «делаю это правильно» или есть другой/предпочтительный/стандартизированный подход к этому?
  2. Вводит ли это какие-либо дополнительные/потенциальные предостережения (утечки памяти), проблемы с производительностью или безопасностью, о которых мне следует знать?
  3. Если бы я принял эту стратегию во всем своем приложении, могу ли я предположить, что приложение будет загружаться быстрее (меньше HTML-текста), но медленнее выполняться (создание динамического элемента DOM)? Если да, то есть ли способ каким-то образом создать экземпляр всех элементов DOM, которые потребуются моему приложению заранее (замедляя начальное время загрузки), а затем сделать видимыми только определенные элементы, поскольку я хочу отображать разные представления/экраны (таким образом ускоряя время выполнения )?

person IAmYourFaja    schedule 29.12.2013    source источник
comment
Как размер загрузки будет меньше? В вашем примере у вас есть HTML, который у вас был бы в любом случае, в дополнение к дополнительному коду Dart, необходимому для создания элементов.   -  person Pixel Elephant    schedule 29.12.2013


Ответы (1)


Вам нужен файл HTML с тегами script для запуска Dart. Все остальное можно сделать в Дарте.

person Günter Zöchbauer    schedule 29.12.2013
comment
Это довольно круто - спасибо @Gunter Zochbauer (+1) - как насчет проблем с производительностью/безопасностью (имеется в виду, вводит ли такая реализация пользовательского интерфейса - программно через Dart - какие-либо другие предостережения)? - person IAmYourFaja; 29.12.2013
comment
Я не думаю, что есть большая разница в безопасности. Я ожидаю, что производительность будет хуже, потому что вам приходилось делать некоторые вещи в Dart, которые в противном случае выполняла бы встроенная высокооптимизированная реализация браузера (например, загрузка и синтаксический анализ HTML). Я ожидаю, что код станет труднее читать/обслуживать. Обычно разметка лучше справляется с определением макета пользовательского интерфейса в удобочитаемом виде. - person Günter Zöchbauer; 29.12.2013
comment
Еще раз спасибо @Gunter Zochbauer (+1) - так что, думаю, у меня есть последний дополнительный вопрос: означает ли это, что мне будет лучше - с точки зрения производительности - загружать все мои фрагменты HTML при запуске моего приложения, а затем связывать их в экземпляры Dart DOM, такие как querySelector("#someButton") as ButtonElement? Если нет, то почему? Если да, то чем это отличается (опять же с точки зрения производительности) от того, что я предлагаю выше в своем вопросе? Еще раз спасибо! - person IAmYourFaja; 29.12.2013
comment
ИМХО, ваши вопросы слишком общие, чтобы можно было дать более конкретный ответ. Просто зависит... - person Günter Zöchbauer; 30.12.2013