ויקיפדיה:מגבלות המפענח – הבדלי גרסאות

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
מ ←‏משאבים ומגבלות: הסעיף לא קיים יותר
 
שורה 109: שורה 109:
* '''מספר הצמתים שקדם־המפענח ביקר בהם'''
* '''מספר הצמתים שקדם־המפענח ביקר בהם'''
** נתון זה מתאר את מידת ה"סיבוך" של הדף, כאשר הסיבוך תלוי בעיקר בתבניות המופיעות בדף, ותבניות עזר שנקראות על ידן
** נתון זה מתאר את מידת ה"סיבוך" של הדף, כאשר הסיבוך תלוי בעיקר בתבניות המופיעות בדף, ותבניות עזר שנקראות על ידן
* '''מספר הצמתים שקדם־המפענח יצר'''
** גם כאן, הנתון מתאר את רמת הסיבוך בפענוח הדף
* '''גודל הטקסט המוכלל לאחר הפריסה'''
* '''גודל הטקסט המוכלל לאחר הפריסה'''
** נתון זה מתייחס לגודל ולא לסיבוך, כאשר הכללים לחישוב הגודל מורכבים, ומוסברים חלקית בוויקיפדיה באנגלית בדף [[:en:Wikipedia:Post-expand include size]]
** נתון זה מתייחס לגודל ולא לסיבוך, כאשר הכללים לחישוב הגודל מורכבים, ומוסברים חלקית בוויקיפדיה באנגלית בדף [[:en:Wikipedia:Post-expand include size]]
שורה 123: שורה 121:
* '''אורך הפריסה לאחר ההרחבה'''
* '''אורך הפריסה לאחר ההרחבה'''
** נתון זה אינו מתועד, ולא ברור מה הוא מתאר
** נתון זה אינו מתועד, ולא ברור מה הוא מתאר
* '''מספר ישויות ה־Wikibase שנטענו'''
** נתון זה נוסף על ידי הרחבת wikibase, שמאפשרת גישה לו[[ויקינתונים]]. תיעוד בוויקינתונים - [[mw:Extension:Wikibase Client/Lua|הסבר לכותבים בלואה]]. עדיף להשתמש בגישות ישירות ללא getEntity
* '''שימוש של לואה בזמן'''
* '''שימוש של לואה בזמן'''
** כפשוטו
** כפשוטו
* '''שימוש של לואה בזיכרון'''
* '''שימוש של לואה בזיכרון'''
** כפשוטו
** כפשוטו
* '''מספר ישויות ה־Wikibase שנטענו'''
** נתון זה נוסף על ידי הרחבת wikibase, שמאפשרת גישה לו[[ויקינתונים]]. תיעוד בוויקינתונים - [[mw:Extension:Wikibase Client/Lua|הסבר לכותבים בלואה]]. עדיף להשתמש בגישות ישירות ללא getEntity


== שימוש במידע ==
== שימוש במידע ==

גרסה אחרונה מ־23:14, 21 באוגוסט 2020

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

חלק מרכזי בתוכנת מדיה-ויקי מכונה "מפענח" (Parser), שמתרגם את תוכן הדף כפי שנראה לעורכים, לקוד HTML שנשלח לדפדפן של הקורא, בתהליך שמכונה "פענוח". פעולת הפענוח כוללת המרה של תחביר ויקי לקוד HTML, והחלפתן של תבניות לטקסט וקוד HTML הנובע מהן.

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

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

דף זה עוסק באילוצים, או במגבלות הללו, ובדרך למצוא את המשאבים שכל דף צורך.

בדיקת המשאבים שהדף צורך[עריכת קוד מקור]

תוכנת מדיה-ויקי מאפשרת לעורך לבדוק את משאבי המפענח שהדף צורך. אחת הדרכים לבדוק זאת מתוארת כאן:

  1. מהתפריט העליון בדף, הקישו "עריכה"
  2. אם נפתח העורך החזותי, עברו לעורך קוד מקור בעזרת העיפרון בצד שמאל של סרגל העריכה
  3. בעורך קוד מקור, הקישו תצוגה מקדימה
  4. גללו לתחתית הדף, וחפשו "מידע על ביצועי המפענח"
  5. אם הטבלה מוסתרת, לחצו על המשולש הקטן מימין להודעה לפתיחת הטבלה

הטבלה, בגרסה 1.34.0 של מדיה-ויקי, נראית כך (המספרים עצמם שונים, כמובן, בכל דף):

זמן CPU 0.060 שניות
זמן אמיתי 0.456 שניות
מספר הצמתים שקדם־המפענח ביקר בהם 96/1,000,000
גודל הטקסט המוכלל לאחר הפריסה 1,081 מתוך 2,097,152 בתים
גודל הפרמטרים של התבניות 320 מתוך 2,097,152 בתים
עומק הפריסה הגבוה ביותר 8/40
מספר פונקציות המפענח שגוזלות משאבים 1/500
עומק הרקורסיה של הפריסה 0 מתוך 20
אורך הפריסה לאחר ההרחבה 2,182 בתים מתוך 5,000,000 בתים
שימוש של לואה בזמן 0.007/10.000 שניות
שימוש של לואה בזיכרון 665 קילו־בייטים/50 מגה־בייטים
מספר ישויות ה־Wikibase שנטענו 0 מתוך 400

אם אין לכם הרשאות לערוך דף מסוים, עדיין תוכלו למצוא את המידע: מהדפדפן עצמו בקשו לראות את "קוד המקור" של הדף (כאן מדובר לא במה שמכונה "קוד המקור" בוויקיפדיה, אלא בקוד ה-HTML שנשלח לדפדפן), בדרך כלל בעזרת הקשה על Ctrl+U. בקוד המקור חפשו הערת HTML עם הכותרת newPP. הערה זו מכילה אותם נתונים (וכמה נוספים), אך שמות המשאבים אינם מתורגמים לעברית. המידע הנוסף בהערה, שאינו מופיע בטבלה, יכול לעזור כדי לדעת מי "התבנית הסוררת", שגוזלת את רוב המשאבים.

הערת HTML ‏ newPP, מאותו הדף
<!-- 
NewPP limit report
Parsed by mw1397
Cached time: 20200821195123
Cache expiry: 2592000
Dynamic content: false
Complications: []
CPU time usage: 0.060 seconds
Real time usage: 0.456 seconds
Preprocessor visited node count: 96/1000000
Post‐expand include size: 1081/2097152 bytes
Template argument size: 320/2097152 bytes
Highest expansion depth: 8/40
Expensive parser function count: 1/500
Unstrip recursion depth: 0/20
Unstrip post‐expand size: 2182/5000000 bytes
Lua time usage: 0.007/10.000 seconds
Lua memory usage: 665 KB/50 MB
Number of Wikibase entities loaded: 0/400
-->
<!--
Transclusion expansion time report (%,ms,calls,template)
100.00%  432.944      1 -total
 96.98%  419.884      1 תבנית:טבלה_מוסתרת
  1.92%    8.316      1 תבנית:Charbuttons
  1.56%    6.740      1 תבנית:כ
  1.20%    5.209      1 תבנית:ללא_גלישה
  0.97%    4.181      1 תבנית:ש
  0.56%    2.417      2 תבנית:Charbutton
-->

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

משאבים ומגבלות[עריכת קוד מקור]

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

חלק מהמשאבים עוסקים בגודל, חלקם במידת הסיבוך של הדף, וחלקם במשאבים שמשמשים לביצוע קוד לואה.

פירוט נוסף אפשר למצוא בוויקיפדיה באנגלית, בדף en:Wikipedia:Template limits ובדפים נוספים.

  • זמן CPU
    • ל"ידיעה בלבד", לא מתאר משאב חסום. המידע מתאר את מחיר פענוח הדף כולו
  • זמן אמיתי
    • דומה לסעיף הקודם, אבל מתאר כמה זמן עבר מאז השרת החל בפעולת הפענוח, עד שזו הסתיימה. זמן זה יכול להיות פחות או יותר מהקודם, עקב ריבוי משימות מצד אחד, ועיבוד מקבילי מצד שני
  • מספר הצמתים שקדם־המפענח ביקר בהם
    • נתון זה מתאר את מידת ה"סיבוך" של הדף, כאשר הסיבוך תלוי בעיקר בתבניות המופיעות בדף, ותבניות עזר שנקראות על ידן
  • גודל הטקסט המוכלל לאחר הפריסה
    • נתון זה מתייחס לגודל ולא לסיבוך, כאשר הכללים לחישוב הגודל מורכבים, ומוסברים חלקית בוויקיפדיה באנגלית בדף en:Wikipedia:Post-expand include size
  • גודל הפרמטרים של התבניות
    • סך גודל כל הפרמטרים שמועברים לכל התבניות. אם תבנית משתמשת בפרמטר מסוים מספר פעמים, גודל הפרמטר מוכפל במספר הזה. כל שימוש בכל תבנית נספר, כלומר עבור תבנית שמופיעה מספר פעמים בדף, כל מופע תורם את תרומתו
  • עומק הפריסה הגבוה ביותר
    • מתייחס לתבנית שקוראת לתבנית שקוראת לתבנית וכן הלאה.
  • מספר פונקציות המפענח שגוזלות משאבים
    • פונקציות מפענח מסוימות, כמו למשל {{#קיים, נחשבות "יקרות", ומוטלת מגבלה על מספר הקריאות לפונקציות כאלו מדף אחד
  • עומק הרקורסיה של הפריסה
    • דומה ל"עומק הפריסה", ומתייחס לתבנית שקוראת לעצמה, ישירות או דרך תבנית אחרת
  • אורך הפריסה לאחר ההרחבה
    • נתון זה אינו מתועד, ולא ברור מה הוא מתאר
  • שימוש של לואה בזמן
    • כפשוטו
  • שימוש של לואה בזיכרון
    • כפשוטו
  • מספר ישויות ה־Wikibase שנטענו

שימוש במידע[עריכת קוד מקור]

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

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

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

תיקון דף שנפגע ממגבלות המפענח[עריכת קוד מקור]

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

במקרה הנפוץ, המגבלה היא גודל הטקסט המוכלל לאחר הפריסה (גודל המשאב יכול להיות פחות מהמגבלה, והמפענח עוצר אם ה"דבר" הבא בדף יקפיץ אותו מעבר למגבלה. אם הבעיה היא מגבלה זו, הדף ייתווסף לקטגוריה:דפים שבהם ההכללה גדולה מדי). במקרה זה, יש דרכים אחדות לפתרון הבעיה:

  • פיצול הדף. אידאלית, השיקול היחיד בהחלטה לפיצול דף צריך להיות תוכני ולא טכני, ופיצול מסיבה טכנית גרידא צריך להישקל רק כמוצא אחרון.
  • צמצום השימוש בתבניות. חישוב "גודל הטקסט לאחר פריסה" אינו טריוויאלי, ואותו טקסט עצמו יכול לצרוך כפליים, פי שלוש, פי שש, או אפילו יותר מאורכו הממשי, כשהוא מגיע דרך תבנית, והגורם בו מוכפל הגודל גדל (לפעמים בפונקצייה מעריכית) עם עליית עומק ההכללה: הגדלת "גודל הטקסט לאחר פריסה" בבתים ספורים בתבנית שמוכללת בעומק שש, יכולה להגדיל את הדף שכולל אותה במאות בתים.
    דרך אחת לגשת לפתרון הבעיה היא "שיטת אריה במדבר": למשל, מחיקת מחצית התוכן של דף (בלי שמירה, ממובן...) ובדיקה בעזרת "תצוגה מקדימה" תגלה לנו אם מקור הבעיה בחצי שנמחק, ובשלב הבא אפשר רבע, שמינית, וכולי, עד שמוצאים את התבניות שגורמות לבעיה (או צורכת הרבה גודל). בגלל החשבון הלא טריוויאלי שהוזכר, תבנית ששוקלת בעצמה 300 קילו, יכולה לעלות לדף שמכליל אותה יותר מכך - 300 וגם 900 קילו. הכללים והחישובים לא פשוטים, ויכולים גם להשתנות מגרסה לגרסה - תבנית כזו יכולה גם "לעלות" בדיוק את 300 הקילו שהיא שוקלת. מצד שני, כשמתקיימים התנאים שגורמים להכפלת המחיר, חיסכון של 20 קילו בתבנית מוכללת יכול להתבטא בחיסכון של 40, 60, 120 קילו, ואף יותר, בדף שמכליל אותה. בעזרת "אריה במדבר" (חיפוש בינארי), ניתן למצוא את המקום בו כדאי להשקיע. דרך נוספת היא בעזרת רשימת התבניות שמוכללות בדף (הרשימה מופיעה, לעיתים בצורה מקופלת, מתחת תיבת העריכה ב"תצוגה מקדימה"), ולנסות לזהות תבניות "חשודות" ככבדות. כשמדובר בתבניות ללא פרמטרים (כמו למשל תבניות ניווט מסוימות), אפשר לבדוק את החשד בעזרת שקילת התבנית בדף נפרד: למשל על ידי שקילת דף התיעוד של התבנית, או דף טיוטה ריק בו נכליל אותה. אחרי שזיהינו את התבנית הבעייתית, נשקול אם אפשר פשוט להסיר אותה מהדף, לנסות לטפל בה כך שתשקול פחות, להקטין את מספר הפעמים שהדף מכליל אותה, או, אם אין ברירה אחרת, לפצל את הדף.

במגבלות אחרות יש לטפל באופן שמתאים למגבלה אותה עובר הדף:

  • כאשר המגבלה נובעת מסיבוך ("עומק הפריסה", "עומק הרקורסיה"), צריך למצוא את התבנית המסוימת שמתחפרת לעומק, או ליתר דיוק, את שרשרת ההכללה העבריינית, ולטפל בה.
  • כשהמגבלה היא שימוש יתר בפונקציות מפענח יקרות, התרופה היא בדרך כלל הגבלת השימוש בתבניות שקוראות לפונקציות היקרות - החשודה העיקרית היא פונקציית המפענח #קיים. גם קריאות מסוימות מקוד לואה נספרות כיקרות.
  • אם המגבלה נובעת ממגבלות משאבי לואה, צריך להציץ ב-newPP בקוד המקור של הדף, ולבדוק קריאה לאיזו פונקציה באיזו יחידה היא היקרה ביותר. עורכים שאינם מתמצאים בכתיבת וקריאת יחידות סקריבונטו, יכולים לבקש עזרה בנקודה הזו, תוך פירוט הממצאים שמצאו עד לנקודה בה החליטו לצעוק.

אפשר לחפש מידע נוסף למציאת דרכים להתמודד עם מגבלות המפענח במדיה ויקי ובוויקיפדיה באנגלית, שמרכזת חלק גדול מהתיעוד. לצורך כך, עדיף למצוא את שמות המשאבים באנגלית: שנו את ממשק המשתמש לאנגלית (על ידי הוספת uselang=en לשורת הכתובת של הדפדפן, או, אם אינכם חשים נוח לעשות זאת, על ידי שינוי זמני של שפת הממשק שלכם בהעדפות). (TODO: הוספת טבלת תרגום לאנגלית לדף זה)