2010-02-24 2 views
2

Я работаю над сайтом WordPress, который загружает два внешних файла javascript примерно на полпути вниз по странице. Файлы являются значками от Reddit и Digg и часто добавляют около 4-8 секунд к общему времени загрузки страницы, а также предотвращают также загрузку нижних 50% страницы.Принудительные внешние файлы javascript (от Digg, Reddit) для загрузки последнего

В JavaScripts Digg и Reddit вынести (который я предполагаю, что нужно загрузить полностью перед остальными моей веб-страницы загружается), и, таким образом, добавляет большое количество дополнительного времени загрузки.

Я пробовал перемещать теги <script> в нижней части страницы, прямо перед </body>, но значки визуализируют чуть ниже нижнего колонтитула вместо того, где они должны быть.

Как я могу заставить эти два внешних файла javascript загружать последние, но все же отображать там, где им нужно?

ответ

0

Где вы визуализируете теги сценария, не обязательно должны указывать, где создается пользовательский интерфейс, создаваемый этими сценариями - что он кажется пустым или сомнительным. У сценариев есть известные в них функции, которые позволяют вам передать им контейнер div или что-то, что может отобразить их интерфейс?

Вы, конечно, правильно загрузили их до </body>. Это правильная стратегия.

2

Вы можете создать div ["divA"], где вы хотите, чтобы ваши фреймы Digg/Reddit пошли [Так что это в основном просто местозаполнитель]. Когда страница будет загружена, добавьте элемент «script» в голову, чтобы загружать сценарии Digg/Reddit. Когда они будут загружены, вы можете переместить их из тела в divA.

document.body.removeChild(iframe); 
document.body.getElementById("divA").appendChild(iframe); 
+0

Это приведет к тому, что 'src' iframe будет загружаться дважды. – Nicole

+1

+1 Имея фрагменты 'document.write' свой материал в документе и перемещая его в нужное место, используя DOM, звучит как самое умное решение. Может быть, не удалить элемент, но, но все это в одном DIV, который * перемещается * в нужное место? –

+0

Renesis вы подняли действительную точку. Благодарю. Как бы вы «переместили» элемент? Думаю, вы могли бы использовать offsetTop, offsetLeft и parentNode javascript, чтобы найти позицию x/y «временного» div и придерживаться вашего iframe над ним. – Warty

0

Быстрый ответ - нет простого способа. Если вы используете defer="true" в тегах сценария и используете document.write, он все равно будет выписывать содержимое, где оно было загружено, а не там, где был вставлен тег скрипта.

Некоторые из ответов на этот вопрос может помочь вам: How can I stop an IFrame reloading when I change it's position in the DOM?

Некоторые другие ответы в этой теме рекомендуем удалить IFRAME, а затем вставьте его. Однако это приведет вас к проблеме в связанном выше вопросе - это приведет к тому, что содержимое iframe будет загружаться дважды.

Общий подход заключается в том, чтобы поместить местозаполнитель, где вы хотите, а затем переместить их в этот заполнитель, когда они будут готовы.

Смежные вопросы