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

Почему iframe так медленно?

У меня есть немного более длинный вопрос для вас, но надеюсь, что ответ будет очень простым:)

Скажем, у меня очень простая страница со ссылкой и iframe (просто для простого примера).

<body>
    <a href="test.html" target="mframe">open link></a>
    <iframe name="mframe" [params] />
</body>

Итак, когда вы нажимаете на ссылку, она загружает test.html в фрейм.

Теперь я изменим iframe с помощью div и ajax-вызова.

<body>
    <a href="doAjaxCall('test.html')">open link</a>
    <div id="main-content"></div>
</body>

DoAjaxCall будет просто использовать GET ajax requset, чтобы получить весь ответ, проанализировать его (используя JavaScript) и захватить контент в <body> и поместите его в main-content.innerHTML.

test.html содержит много html, также css-стилей (но то же самое, что и на родительской странице, поэтому я не нуждаюсь в них, когда я использую решение ajax).

Вопрос:

Почему это решение ajax SO быстрее? Я все равно загружаю то же количество данных (загружая весь файл test.html).

Почему решение iframe так медленно? Это из-за того, что браузеру нужно снова разобрать все возможные стили? Или есть другие накладные расходы iframe?

4b9b3361

Ответ 1

Ты в значительной степени на правильном пути. iframe будут медленнее, потому что для браузера есть дополнительные накладные расходы (рендеринг, сохранение экземпляра и ссылок на него).

Ajax-вызов будет немного быстрее, потому что вы получаете данные, а затем вводите их или делаете с ним все, что хотите. В iframe необходимо будет создать совершенно новую "страницу" в памяти браузеров, а затем поместить ее на страницу.

Ответ 2

У Стива Соудера есть сообщение Использование Iframes Sparingly в блоге с его высокоэффективными веб-сайтами, которые могут дать дополнительную информацию.

Ответ 3

Несмотря на то, что браузеры улучшились с 2009 года, тот факт, что браузеру необходимо удалять дополнительные серверы (предполагая, что iframe для контента сторонних сторон), или снова на локальном сервере (при условии, что iframe для локального контента), этот все равно будут влиять на производительность страницы. В общем, дополнительные HTTP-запросы всегда будут влиять на производительность страницы. Если возможно построить iframe после загрузки страницы и визуализации содержимого iframe, это улучшит загрузку начальной страницы. Однако я думаю, что это повлияет на производительность страниц, в то время как iframe загружает дополнительный контент.