إن تحميل JavaScript دون حظر له تأثير كبير على تحسين أداء الصفحة ، والذي يمكن أن يقلل بشكل فعال من انسداد الصفحة بواسطة JS. خاصة بالنسبة لبعض ملفات JS الإعلانية ، نظرًا لأن محتوى الإعلان قد يكون وسائطًا غنية ، فمن المحتمل أن يصبح عنق الزجاجة لسرعة تحميل صفحتك. يخبرنا JavaScript عالية الأداء ، زملاء الدراسة ، لتحسين سرعة صفحة الويب الخاصة بك ، تحميل JS دون حظر.
لذلك يظهر رمز.
(function () {var s = document.createElement ('script') ؛ s.type = 'text/javaScript' ؛الجميع على دراية بما سبق. يعرف الطلاب الذين قرأوا الكتاب فوائد هذا التحميل غير المحظور ، والتأثير جيد جدًا. عندما تواجه هذه البرامج النصية غير المحبوطة إعلانات JS العامة ، فإنها ستكتب مشاكل - يظهر رمز الإعلان في HTML لكن الإعلان لا يعرض الإعلان.
ناني؟ HTML لا يتم تقديمه إلى الصفحة؟
دعونا نلقي نظرة على رمز الإعلان JS
نسخة الكود كما يلي:
document.write ('<img src = "http://img.vevb.com/logo_small.gif">') ؛
الكود بسيط للغاية ، فقط إخراج رمز HTML في مستند. الكتابة (أعتقد أن العديد من إعلانات المعلنين مثل هذا). ما هي المشكلة في الصفحة التي لا تظهر الإعلانات؟ تكمن المشكلة في هذا المستند. لماذا؟ دعونا نلقي نظرة أولاً على تعريف المستند.
التعريف والاستخدام
يمكن أن تكتب طريقة الكتابة () تعبيرات HTML أو رمز JavaScript إلى المستند.
يمكن إدراج معلمات متعددة (exp1 ، exp2 ، exp3 ، ...) وسيتم إلحاقها بالوثيقة بالترتيب.
طريقة:
أحدهما هو استخدام هذا الطرف لإخراج HTML في المستند ، والآخر هو إنشاء مستندات جديدة في Windows و Frameworks خارج النوافذ حيث يتم استدعاء الطريقة. في الحالة الثانية ، تأكد من استخدام طريقة Close () لإغلاق المستند.
لكن مبدأها يجب تنفيذها أثناء عملية إدخال تدفق الصفحة. بمجرد تحميل الصفحة ، يتم استدعاء Document.write () مرة أخرى ، وسيتم استدعاء document.open () ضمنيًا لمحو المستند الحالي وبدء مستند جديد. وهذا يعني ، إذا استخدمنا المستند. الكتابة بعد تحميل HTML ، فسنقضي على HTML المنشأة السابقة وعرض إخراج المحتوى من المستند. write.
في مثالنا ، بعد تحميل الصفحة ، يتم إخراج المستند. في HTML ولن يتم تنفيذه. أعرف المشكلة والمبدأ ، فكيف لحل هذه المشكلة؟
يستخدم بشكل غير متزامن Ajax ، مع خطوط مختلفة. العديد من ملفات الإعلان هي طرف ثالث. تحت أسماء المجال المختلفة ، هناك مشاكل في المجال ، ولا يمكننا التحكم في إخراج الكود الخاص بهم. في هذه الحالة ، فكرنا في طريقة لإعادة كتابة المستند. الكتابة ثم إعادة كتابة المستند. الكتابة مرة أخرى بعد تحميل ملف JS. انظر إلى الكود.
يقوم الإصدار الأول بتحميل إعلانات JS دون حظر:
وظيفة loadAdScript (url ، الحاوية ، رد الاتصال) {this.dw = document.write ؛ this.url = url ؛ this.containerObj = (typeof container == 'string'؟ document.getElementById (حاوية): حاوية) ؛ this.callback = رد الاتصال || وظيفة(){}؛ } loadadscript.prototype = {startload: function () {var script = document.createElement ('script') ، _this = this ؛ if (script.readyState) {// ie script.onReadyStateChange = function () {if (script.readyState == "loaded" || script.readyState == "COMMUNT") {script.OnReadyStateChange = null ؛ _ this.finished () ؛ }} ؛ } else {// other script.onload = function () {_this.finish () ؛ } ؛ } document.write = function (ad) {var html = _this.containerobj.innerhtml ؛ _this.containerobj.innerhtml = html + ad ؛ } script.src = _this.url ؛ script.type = 'text/javaScript' ؛ document.getElementsByTagName ('head') [0] .appendChild (script) ؛ } ، الانتهاء: function () {document.write = this.dw ؛ this.callback.apply () ؛ }} ؛رمز الاتصال الصفحة:
var loadscript = new loadadscript ('ad.js' ، 'msat-adwrap' ، function () {console.log ('msat-adwrap') ؛}) ؛ loadscript.startload () ؛ var loadscript = new loadadscript ('ad2.js' ، 'msat-adwrap' ، function () {console.log ('msat-adwrap2') ؛}) ؛ loadscript.startload () ؛ var loadscript = new loadadscript ('ad3.js' ، 'msat-adwrap' ، function () {console.log ('msat-adwrap2') ؛}) ؛ loadscript.startload () ؛ var loadscript = new loadadscript ('ad3.js' ، 'msat-adwrap' ، function () {console.log ('msat-adwrap3') ؛}) ؛ loadscript.startload () ؛إعلان رمز JS
//ad.jsdocument.write('''iMg src = "http://images.cnblogs.com/logo_small.gif"> ') ؛ // ad2.jsdocument.write (' <img src = "http://www.baidu.com/img/baidu_sylsylselo1.gif legif USEMAP = "#mp"> ') ؛ // ad3.jsdocument.write (' <img id = "hplogo" src = "http://www.google.com/images/srpr/logo3w.png">) ؛المشكلة في الإصدار الأول هي أنه عند استدعاء ملفات متعددة ، ستنشأ بعض المشكلات:
1. نظرًا لسرعة تحميل الملفات المختلفة ، قد يتم تحميل بعضها أولاً وقد يتم تحميل بعضها لاحقًا ، وهو أمر غير مرجل ، وفي كثير من الأحيان ما نحتاجه أمر منظم. على سبيل المثال ، نحتاج إلى تحميل الإعلان على الشاشة الأولى أولاً.
2. إذا كنت تريد بعض الإعلانات ، فأنت بحاجة إلى تعيين بعض المعلمات قبل الإعداد ، مثل Google AdSense
من أجل حل هاتين المشكلتين ، يتم تعديله بشكل أكبر إلى إصدار JS النهائي غير المحظور.
رمز صفحة HTML:
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"/> <title> new_file </titlem> <script type = "text/javascript" src = "loadscript.js"> "msat-adwrap2"> </viv> <script type = "text/javaScript"> loadscript.add ({url: 'ad.js' ، container: 'msat-adwrap' ، callback: function () {console.log ('msat-adwrap') ؛}}). Callback: function () {console.log ('msat-adwrap2') ؛ "CA-PUB-2152294856721899 ؛ }). execute () ؛ </script> </body> </html>رمز المصدر loadscript.js
/*** إعلانات غير محفوظة* Author arain.yu*/var loadscript = (function () {var adqueue = [] ، dw = document.write ؛ // cache js 'Own document.write function loadAdScript (url ، url ، init ، init ، callback) {this.url = url ؛ containerObj = حاوية) ؛ Script.OnReadyStateChange =) {if (script.Readystate == " // rewrite document.write. document.getElementsByTagName ('head') [0] .appendChild (script) ؛ } ، الانتهاء: function () {// restore document.write document.write = this.dw ؛ } ، startNext: function () {adqueue.shift () ؛ this.callback.apply () ؛ if (adqueue.length> 0) {adqueue [0] .startload () ؛ } آخر {this.finish () ؛ }}}} ؛ إرجاع {add: function (adobj) {if (! adobj) return ؛ adqueue.push (New LoadAdscript (Adobj.url ، Adobj.Container ، Adobj.init ، Adobj.callback)) ؛ إرجاع هذا ؛ } ، execute: function () {if (adqueue.length> 0) {adqueue [0] .startload () ؛ }}}} ؛} ()) ؛