חיפוש ]

עיכוב פריסת Javascript לסרטוני YouTube

עיכוב פריסת Javascript, במילים אחרות Defer parsing of Javascript, היא אחת מההודעות שאתם מקבלים (סביר להניח) כאשר אתם בודקים את מהירות האתר שלכם בכלים כמו GTmetrix ו Pingdom. אך מה זה בעצם אומר לעכב פריסת Javascript?

אז בעיקרון הודעה זו מציינת כי הדפדפן צריך לעבד תוכן כלשהו הנמצא בתוך תגית <script> מסויימת בה הוא נתקל לפני שהוא יכול להמשיך ולטעון את שאר העמוד. אם נעכב את העיבוד של אותו סקריפט עד שבאמת יהיה נחוץ, נוכל לשפר את זמן הטעינה של עמוד כזה או אחר.

לא נרחיב מעבר לכך ובפוסט זה נתמקד אך ורק בעיכוב Javascript של וידאו מיוטיוב. אם אתם מעוניינים לדעת בהרחבה על הנושא, תנו מבט בפוסט כיצד לעכב פריסת Javascript באתרי וורדפרס.

באחד האתרים להם ביצעתי אופטימיזציה למהירות וזמן טעינה, היה וידאו של Youtube בעמוד הבית. העמוד קיבל ציון נמוך בכלים לבדיקת מהירות והיה עליי לעשות משהו בכדי לתקן זאת.

ההערה העיקרית הייתה Defer Parsing of Javascript כאשר שלושה מאותם סקריפטים שהוצגו כבעיתיים היו סקריפטים של youtube.com. הנה ההערה שקיבלתי ב GTmetrix:

לעכב פריסת Javascript YouTube

הסקריפטים של youtube.com שאתם רואים בתמונה זו עכבו את הטעינה של העמוד. כלומר רק לאחר שאלו נטענו (ושימו לב כי אלו סקריפטים כבדים) שאר העמוד המשיך להטען.

כיצד לעכב פריסת Javascript לסרטוני יוטיוב?

בואו נסביר כיצד לפתור הערה זו. כאשר אתם מטמיעים וידאו בוורדפרס על ידי העתקת כתובת (URL) הוידאו מאתרים כמו YouTube או Vimeo, וורדפרס מייצרת <iframe> עבור אותו וידאו. זהו בעצם אותו <iframe> שתקבלו אם תעתיקו את קוד ה embed ישירות מיוטיוב.

אז במקום להשתמש בכתובת ה URL בכדי להטמיע את הוידאו, גשו ליוטיוב והעתיקו את קוד ה embed בצורה הבאה:

  • תחת הוידאו לחצו על ״שתף״.
  • לחצו על ״הטמע״ שיופיע מתחתיו.
  • בצעו שינויים באפשרויות ההטמעה אם יש צורך.
  • העתיקו את קוד ה embed המתחיל ב …iframe width>

לאחר מכן גשו לאתר שלכם והדביקו את קוד ה <iframe> היכן שאתם מעוניינים להציג את הוידאו. השלב הבא יהיה לשנות מעט קוד זה:

  • מצאו את החלק src="https://www.youtube.com ושנו את src ל data-src.
  • הוסיפו פרמטר ריק בשם ""=src. זה בסופו של דבר יכיל את הכתובת הנמצאית בפרמטר data-src שזה עתה הוספנו.

בסופו של דבר קוד ה <iframe> שלכם ייראה בסגנון הבא:

<iframe width="560" height="315" src="" data-src="https://www.youtube.com/embed/123456789" frameborder="0" allowfullscreen></iframe>

נגרום לוידאו להטען לאחר שהעמוד נטען בעזרת Javascript

ה <iframe> שכרגע יצרנו לא יטען את הוידאו כראוי. נוסיף מעט Javascript על מנת לטעון אותו רק לאחר שהעמוד נטען במלואו.

function init() {
    var vidDefer = document.getElementsByTagName('iframe');
    for (var i=0; i<vidDefer.length; i++) {
        if(vidDefer[i].getAttribute('data-src')) {
            vidDefer[i].setAttribute('src',vidDefer[i].getAttribute('data-src'));
        } } }
window.onload = init;

קוד זה פשוט מעתיק את הפרמטר data-src לפרמטר src לאחר שהעמוד נטען. ברגע שפעולה זו מתבצעת סרטון היוטיוב יוצג בעמוד שלכם. שימו לב להבדלים בתוצאות של GTmetrix לפני ואחרי השימוש בטכניקה זו.

אם אינכם יודעים כיצד להוסיף Javascript לאתר, תנו מבט בפוסט הוספת נכסים (קבצי Javascript ו- CSS) בוורדפרס.

לפני עיכוב פריסת Javascript לוידאו:

GTmetrix score before defering video

לאחר עיכוב פריסת Javascript לוידאו:

GTmetrix score after defering video

שימו לב כי הציון, מספר הקריאות לשרת, כמו גם גודל העמוד השתפרו בצורה משמעותית. הציון תחת Defer parsing of Javascript קפץ מ F ל A ואותן הערות שהצגנו בתחילת הפוסט עבור סעיף זה נעלמו.

שיקולים נוספים

במקרה של האתר לו ביצעתי אופטימיזציה, הוידאו היה קיים רק בעמוד הבית אז דאגתי לכך שקוד ה Javascript ייטען אך ורק בעמוד הבית באמצעות הוספת תנאי בפונקציה wp_enqueue_scripts.

נציין שקוד זה ישפיע אך ורק על אלמנטים מסוג <iframe> להם קיים הפרמטר data-src כך שאינכם צריכים לדאוג שקוד זה ישפיע על וידאו אחר באתר שלכם שאינו מכיל פרמטר זה.

עוד דרך לשיפור זמן הטעינה של וידאו יוטיוב המוטמע באתר שלכם תמצאו בפוסט שיפור זמן הטעינה של Embedded Videos עם Lite YouTube. ואם תוך כדי שאתם בודקים את סרטוני היוטיוב באתר שלכם, אתם מגלים כי הם אינם ריספונסיבים – תנו מבט בפוסט המסביר כיצד להפוך סרטון Youtube לרספונסיבי בוורדפרס.

 

Thanks to Patrick Sexton for the JS Code.

רועי יוסף
רועי יוסף

מפתח אתרים ותבניות וורדפרס. מספק אתרים עם ביצועים גבוהים, מותאמים למנועי חיפוש ובעלי קוד ולידי, סמנטי ונקי. צריכים עזרה? צרו איתי קשר.

  • איגור 28 אוגוסט 2018, 22:35

    עבד מעולה 🙂

  • ‫אליחי 16 ספטמבר 2018, 12:08

    למי שמשתמש ב wp rocket יכול להגדיר שאיפריימים יוצגו כתמונה ולא כסרט – ורק בלחיצה זה נטען, וזה גם משפר את הטעינה של העמוד.

    • רועי יוסף 6 אוקטובר 2018, 21:36

      תודה על הטיפ אליחי 🙂

    • עידו 8 יולי 2019, 19:38

      משתמש בזה, כמה אפשרויות נוספות:

      ניתן להביא את ה thumbnail מסרטון הוידאו, כדי לשים תמונה, ואז בלחיצה על התמונה, להחליף את התמונה עם הסרטון הרצוי, ככה, כאשר מדובר בריבוי סרטונים בעמוד, אפשר לטעון כל סרט בנפרד.

      • רועי 8 יולי 2019, 20:26

        זו גם אופציה מצויינת.. 🙂

  • בני 12 יולי 2019, 0:05

    גרסת jQuery:

    jQuery(function($){
    	$(window).load(function(){
    		$('IFRAME[data-src]').each(function(index, elmFR) {
    			$(elmFR).attr('src', $(elmFR).attr('data-src'));
    		});		
    	})
    });

תגובה חדשה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...