1. Анализ рекламного кода
Многие сторонние рекламные системы используют Document.Write для загрузки рекламных объявлений, например, следующей рекламной ссылки JavaScript.
Кода -копия выглядит следующим образом:
<script type = "text/javascript" src = "http://gg.5173.com/adpolestar/5173/
; AP = 2EBE5681_1BA3_4663_FA3F_E73D2B83FBDC; CT = JS; PU = 5173;/? "> </script>
Этот запрос на JavaScript возвращает кусок кода, как это:
Кода -копия выглядит следующим образом:
document.write ("<a href = 'http: //gg.5173.com/adpolestar/wayl/;" +
"AD = 6FF3F844_33E6_86EE_3B96_D94C1CF1AEC4; AP = 2EBE5681_1BA3_4663_FA3F_E73D2B83FBDC;" +
"pu = 5173;/? http: //www.7bao.com/g/xlsbz/index 'target =' _ blank '> <img src ='" +
"http://html.5173cdn.com/market/yunyinga/xly132.gif '" +
"border = '0' /> </a>");
Этот вид метода загрузки, который кажется немного 2, но вы не можете изменить его, потому что это третья сторона. Кроме того, код имеет функцию статистики. Приведенная выше ссылка на JavaScript будет подсчитана один раз каждый раз, когда она будет запрашивается. Сгенерированный код также имеет функцию статистики клика, что означает, что он должен быть загружен таким образом.
Document.Write синхронизируется во время рендеринга страницы. Вы должны подождать, пока код JavaScript не будет загружен, а документ. Write выполняется перед тем, как отобразить следующий контент. Если есть много рекламных объявлений, это приведет к блокированию страницы, особенно если на первом экране страницы вставлены несколько рекламных объявлений с большими размерами изображений. Ситуация с блокировкой будет довольно очевидной и серьезной, что заставит пользователей чувствовать, что ваша веб -страница очень медленная.
2. Переписать документ.write
Чтобы избежать блокировки, метод документа. Перепись не может быть выполнен во время рендеринга страницы. Вы должны найти способ выполнить JavaScript AD Code после готовности дерева DOM. Однако после того, как дерево DOM будет готово, вся страница будет повторно разрешена, что невозможно. Хотя Document.Write является нативным методом браузера, вы также можете настроить метод для перезаписи исходного метода. Прежде чем загрузить код рекламы JavaScript, перепишите Document.Write, подождите, пока он не будет загружен и выполнен, прежде чем изменить его обратно.
3. Задержка загрузки кода JavaScript
Приведенный выше шаг ключа - отложить загрузку кода JavaScript. Как его реализовать? Сначала попробуйте переписать атрибут типа сценария, такой как настройка типа в пользовательское свойство «Тип/кэш», но таким образом большинство браузеров (Chrome не загружат) все равно загружат этот код, но не выполнят его. Загрузка такого куска кода во время рендеринга страницы все еще будет блокировать. Переписывание типа сценария не может достичь реальной задержки загрузки. В лучшем случае он может загружать, но не выполнять, и есть проблемы с совместимостью.
Поместите тег скрипта в тег Textarea и прочитайте контент Textarea, когда его необходимо загрузить. Таким образом, вы можете реализовать реальную задержку загрузки сценария. Этот метод является благодаря решению Юри -Бордерна (вне стены) Ю. Бо.
Кода -копия выглядит следующим образом:
<div>
<textarea style = "display: none">
<script type = "text/javascript" src = "http://gg.5173.com/adpolestar/5173/
; AP = 2EBE5681_1BA3_4663_FA3F_E73D2B83FBDC; CT = JS; PU = 5173;/? "> </script>
</textarea>
</div>
Задержка загрузки сценария и переписать документ. Write. Ниже приводится реализация кода:
Кода -копия выглядит следующим образом:
/**
* Переписать Document.Write для реализации не блокирующего сценария загрузки
* @param {dom object} textarea element
*/
var LoadScript = function (elem) {
var url = elem.value.match (/src = "([/s/s]*?)"/i) [1],
родитель = elem.parentnode,
// кэш нативный документ.write
docwrite = document.write,
// Создать новый сценарий для загрузки
script = document.createElement ('script'),
Head = Document.head ||
document.getElementsbytagname ('head') [0] ||
Document.documentelement;
// Переписать документ.write
document.write = function (text) {
parent.innerhtml = text;
};
script.type = 'text/javascript';
script.src = url;
script.onerror =
script.onload =
script.onreadystatechange = function (e) {
E = E || window.event;
if (! script.readystate ||
/Загрузка compette/.test(script.readystate) ||
E === 'Ошибка'
) {
// Восстановить нативный документ.write
document.write = docwrite;
Head.RemoveChild (Script);
// удалить события и отключить ссылки на DOM
// Старайтесь избегать утечек памяти
голова =
родитель =
elem =
Скрипт =
script.onerror =
script.onload =
script.onreadystatechange = null;
}
}
// Загрузить скрипт
head.insertbefore (script, head.firstchild);
};
4. Улучшенная версия загрузки задержки с изображением
Может ли это быть дополнительно оптимизировано путем реализации незаблокированной ленивой загрузки кода AD JavaScript? Если объявление не отображается на первом экране, может ли оно использоваться для задержки нагрузки, как обычная задержка загрузки изображений? Ответ да. Я расширил ленивый плагин для загрузки для изображения, которое я написал ранее, и изменил исходный метод загрузки изображения (заменить SRC) на метод LoadScript выше для его достижения. Конечно, именно такие модификации все равно будут проблематичными. Если есть несколько изображений, и нагрузочный сигнал выполняется одновременно, и документ. Перепис - это глобальный метод, он не гарантированно не повлияет на B при загрузке A. Они должны быть загружены один за другим, чтобы B мог быть загружен только после загрузки A.
V. Контроль очереди
Чтобы JavaScript AD коды загружались по порядку, для управления загрузкой необходима очередь. Таким образом, также доступен следующий простой код управления очередью:
Кода -копия выглядит следующим образом:
var нагрузка = [];
// присоединиться к списку
var queue = function (data) {
LoadQueue.push (данные);
if (LoadQueue [0]! == 'Runing') {
dequeue ();
}
};
// Делист
var dequeue = function () {
var fn = loadqueue.shift ();
if (fn === 'Runing') {
fn = LoadQueue.Shift ();
}
if (fn) {
LoadQueue.unshift ('Runing');
fn ();
}
};
Пожалуйста, обратитесь к статье для сравнения для задержки изображения: http://www.vevb.com/article/50685.htm