מילה על סקיילינג

באתרים עם אלפי פוסטים, שבכל פוסט יש עשרות תמונות יקרה התסריט הבא:

  1. וורדפרס מבצע שאילתא לדאטהבייס כדי לאתר את הפוסט שרוצים לטעון.
  2. הוא לוקח את השדה the content ומפעיל עליו את הפילטר the_content
  3. סורק את כל התמונות בפוסט ועל כל תמונה מפעיל את הפונקציה wp_make_content_images_responsive
  4. מאתר את ה-ID של התמונה לפי הקלאס wp-image-*, ושולח שאילתא לדאטהבייס כדי לקבל את המטא של כל תמונה, שכולל מידע על כל הגדלים.
  5. מרכיב מהגדלים תמונה רספונסיבית srcset.

הווה אומר, אם יש 20 תמונות, מדובר על עוד 20 שאילתות לדאטהבייס. כל שאילתא חוקרת עמודה בשם guid. עמודה לא מאונדקסת. ככל שיש יותר פוסטים ב- wp_posts, כך יש לו יותר רשומות לחקור, מה שלוקח יותר זמן. פוסטים לכל דבר ועניין הם revisions, drafts, attachments וכו'. בבלוג עם 5000 פוסטים כשבכל פוסט יש 20 תמונות, ניתן בקלות למצוא את עצמנו עם 100000+ רשומות. כל שאילתא כזו יקרה מאוד לדאטהבייס שלא עבר אופטימיזציה.

צעד מס' 1 באופטימיזציה: לאנדקס את העמודה guid.

צעד מס' 2 באופטימיזציה: להוריד את הפילטר wp_make_content_images_responsive מ- the_content. אם רוצים בכל זאת תמונה רספונסיבית, לבנות פונקציה חלופית שתאתר את ה-ID של התמונה לפי כתובת התמונה, ואת גדלי התמונה באמצעות סקירה של תיקיית ה- uploads. כך חוסכים שאילתא לטבלה הבזבזנית wp_postmeta, שאם ב- wp_posts יש 100000+ רשומות, בה יש בערך פי 4.

צעד 2 הוא אופציונלי. צעד 1 מסוגל לשפר את זמן הטעינה שלכם ב3 שניות, לעיתים. תחשבו שכל שאילתא לפי guid במקום שתיקח לכם 0.2 שניות, תיקח לכם 0.002 שניות. כלומר, שיפור של כ-0.2 שניות עבור כל תמונה, כפול 20 זה יוצא 2.5 שניות.

טיפ נוסף: למעט כמה שיותר בשאילתות LIKE. גם אם עמודה מאונדקסת (ובוורדפרס העמודות ID, post_name ו- post_title מאונדקסות), כל עוד משתמשים ב- LIKE ולא ב-=, הוא מתעלם מטבלת ההאש שיש לו בדאטהבייס ומבצע סקירה רגילה ואיטית מאוד, אם מדובר על מאות אלפי רשומות. זו הסיבה שכדאי להמעיט בשאילתות פר מטא ל- wp_postmeta, כי לא העמודה meta_key ולא העמודה meta_value מאונדקסות. כל מטא שרוצים עדיף לשמור בתוך שדה ב- wp_posts, או בטבלה אחרת, קאסטם.

בגדול, הטיפ שלי הוא: מה שלא אמור לשמש אתכם ב-CMS, כלומר למטרות תוכן צרוף, אל תפתחו כ- post-type. כי אם כן, בסקיילינג גבוה יותר, זה יתנקם בכם. תמיד עדיף לפתוח טבלאות קאסטם. זה שוורדפרס לא תומכת בזה וחייבים בשביל זה לעבוד ולתכנת – רק לחובתה ייאמר. בשביל זה עדיף לעבוד עם פריימוורק אחר שיש בו אקטיב רקורד.

נ.ב: הוראות אלה נכתבו בדם

טיפים ומאמרים db, indexing, scaling

בחזרה למאמרים