קטגוריה: פיתוח תוכנה

חוק מרק לממשק משתמש #432

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

גם גלובס לא מבינים, לא יבינו, וגם לא רוצים להבין דבר בתחזוקת אתרים דמויי ווב 2.0

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

וורדפרס, דרופל או ג'ומלה, זה בכלל לא חשוב מי מהן עדיפה על האחרות כי כל אחת מהן מבחינת תחזוקתיות עתידית טובה פי 1000 מפיתרון קוד סגור שנסמך על 2 אנשי פיתוח בחברה שאיש לא יכול לדעת מתי תיסגר.

בעיה מוזרה של פונקצית ob_start של PHP

משום מה בשבוע האחרון האוגדן התחיל לסבול מכל מיני שיהוקים מבלי שנגעתי לו בקוד, ומאחר שלא היה לי את מי להאשים גייסתי את כל הכוחות הנפשיים והתחלתי לדבג. הבעיה הראשונית היתה שכלל לא היה פלט ובמסגרת שיטת ה"גשש ונחש*" שפותחה במשך מאות שנים על ידי מתכנתים עלומי שם הפנתי את האצבע המאשימה כלפי כלפי הקריאה ob_start('ob_gzhandler') לקימפרוס הפלט והעפתי אותה מהקוד.הפלה ופלה נראה שהכל הסתדר (ויותר מזה כי לאחר מכן האפאצ' הפסיק להתקע, דבר שהוא היה עושה פעם בשבוע).

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

מסקנות:

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

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

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

*במקומות מסוימים בעולם ידועה כשיטת רופא האליל