В чем преимущество веб-архитектуры на стороне клиента Gmail?
Мне просто интересно, в чем преимущество архитектуры клиентской архитектуры GMail.
Я имею в виду, что является преимуществом нескольких iframes на странице; один с html-макетом и второй со всеми javascripts?
Не сложнее ли выполнять все операции DOM? (вам нужно искать в jrough ifram ↔ top ↔ html iframe).
Что вы думаете эксперты?
Ответы
Ответ 1
Вкратце: для производительности на стороне клиента.
Поскольку у GMail много Javascript (около 700 КБ), требуется некоторое время для загрузки и запуска всего. Используя отдельный iframe, загрузка и запуск Javascript не будет блокировать пользовательский интерфейс браузера. Скрипты и события пользовательского интерфейса в отдельных iframe будут выполняться параллельно популярными браузерами. Этот подход также позволяет вам построить полный DOM для интерфейса в другом iframe, пока скрипты все еще выполняются. В этой статье описываются общие решения проблемы блокирующих скриптов.
Для работы истории браузера требуется еще один iframe. То, как это точно работает, можно увидеть в в Google Closure Library.
Что касается влияния на сложность обеспечения правильной работы DOM: конструкторы компонентов пользовательского интерфейса в GMail (также часть библиотеки Closure) принимают дополнительный аргумент DOM-помощника. Этот помощник привязан к определенному DOM, который может находиться в другом кадре. Манипулирование различными DOM полностью встроено в дизайн этих компонентов пользовательского интерфейса.
Ответ 2
Я совершенно уверен, что это не фреймы, которые используются для push файлов "reverse-ajax". Gmail использует библиотеку Google Closure Library goog.net.BrowserChannel для обработки этих данных и использует переносы xhr и activex htmlfile. (См.: http://closure-library.googlecode.com/svn/docs/class_goog_net_BrowserChannel.html)
Это все, что я знаю наверняка, но, я думаю, по крайней мере один из фреймов был бы для управления историей.
Ответ 3
Это "бесконечный кадр", используемый для обратного ajax (сервер отправляет сообщение клиенту, когда происходит событие, в отличие от обычного ajax, когда клиент спрашивает сервер). Из wikipedia:
Основной метод для динамической сети приложение должно использовать скрытый IFrame HTML-элемент (встроенный кадр, который позволяет веб-сайту встраивать один HTML-код документ внутри другого). Эта невидимый IFrame отправляется как chunked блок, который неявно объявляет его как бесконечно длинный (иногда называемый "навсегда" ). Когда происходят события, iframe постепенно заполняется scriptтеги, содержащие JavaScript, чтобы быть выполненных в браузере. Потому как браузеры отображают HTML-страницы поэтапно, каждый тэг scriptвыполненный по мере его получения.
Одним из преимуществ метода IFrame является что он работает в каждом общем браузере. Два недостатка этого метода: отсутствие надежной обработки ошибок метод и невозможность отслеживание состояния запроса вызывающий процесс.