הרשם | שאלות ותשובות | רשימת חברים | לוח שנה | הודעות מהיום | חיפוש |
|
|
כלים לאשכול | תצורת הצגה |
10-01-15, 17:05 | # 1 |
עסק רשום [?]
|
בעיות עם Scalability ומחשבים חלשים
היי.
אני אשמח לקבל ייעוץ לגבי בעיה חמורה שאני חווה בעת שימוש בAngular. כיוון שהשרת שלי כבר לא מעורב יותר בrender של התוכן, ומהווה רק ככלי תקשורת API בין הclient למסד הנתונים, כל העומס של עיבוד הנתונים עובר ללקוח. אז זה הופך להיות הרבה יותר חכם ומודרני לעבוד ככה, אבל כשמדובר על לקוחות ישראלים עם מחשבים לפני 8 שנים עם ליבה אחת וחצי ראם, העניינים מסתבכים. הבעיה היא בעיקר העומס שהולך למעבד עם כמות סקריפטים מטורפת (23 סקריפטים נפרדים, מאוד ארוכים), 19 styles, שרת db עם המון המון התפצלויות (אתר -> שפה עם הגדרות מיוחדות שנשלפות מטבלה אחרת -> עמוד -> שדות עריכה -> תוכן שדות ||| פריטים שנמצאים בתוך אותו עמוד -> שדות עריכה לכל פריט -> תוכן כל שדה לכל פריט). יש מסחר אלקטרוני ומלאי ומיליון ואחד פונקציות ואפשרויות. אני מודע לכך שבmongodb היה אפשר לתכנן את צורת אחסון המידע בצורה הרבה יותר חכמה, אך שורש המערכת (במיוחד המסד) נבנה לפני 10 שנים. אני רק משדרג את מה שאני יכול לרמה מודרנית ונוחה בעזרת שכתוב של ליבת המערכת כמעט בלי לגעת במסד. אין אפשרות לשנות את המסד, אלפי לקוחות משתמשים בזה בproduction environment. וכאן נמצאת הבעיה הרצינית. במחשב Macbook Pro 15' החדש עם 4 ליבות כמובן הכל רץ כמו טיל. אבל כשאני בודק את זה במחשב חלש מאוד, זה כמעט לא זז. 8 שניות לטעינה של עמוד, 4 שניות כל scope change. אני משתמש בMySQL Joins, בשרת ב-Pagespeed ו-gzip דרך Nginx, סביבת פיתוח Codengine (http://www.codengine.net/). שרת Ubuntu גרסא אחרונה עם php 5.6. אני שקלתי להתחיל לעבוד עם memcache, ואני חושב שזה יהיה בזבוז זמן יקר (רוב התוכן מאוד דינמי ומשתנה בתדירות גבוהה מדי..). אני עובד באנגיולר עם bindonce איפה שאפשר (one way binding בשביל לחסוך ב-watchers), לא משתמש כמעט אף פעם ב-$watch - תמיד בng-change. מעדכן מודלים עם delay ביניהם, אני עושה מיניפיקציה של כל תוכן הhtml שהphp מדפיס (עם ob_start). האם דרך הפתרון היחידה היא להעביר את עיבוד הנתונים לשרת? (במקום לשלוח לscope תכנים מהשרת כ-api ולתת למשתמש להריץ הכל, לתת לשרת כבר לעשות את הexecution ולשלוח למשתמש את התוצאה - old school) אני כבר נפטרתי מהשגיאה שהייתה קודם לאותם מחשבים ישנים (an unresponsive script) בעזרת צמצום משאבים נרחב והגעתי לתוצאה של טעינה ארוכה. זה מאוד מתסכל המחשבים של פעם
__________________
דניאל גולוב. |
10-01-15, 17:44 | # 2 |
עסק רשום [?]
|
אם במחשב חזק זה עולה מהר ובמחשב חלש זה עולה לאט - הבעיה בקליאנט וכל מה שסיפרת על הסרבר מיותר ולא משנה. לכן גם אופטימיזציות לסרבר כמו memcache לא יועילו לך במצב הנוכחי, הרי זאת לא הבעיה.
בעניין הקליאנט: 1. אתה באמת צריך לטעון את כל הקבצים האלו תמיד? אם כן, תחבר אותם לקובץ אחד. אם לא, תטען אותם רק כשהם נחוצים. 2. תעשה profiling, תבין מה הכי קריטי לשפר ותתחיל משם. עם לשפר סתם דברים לא תגיע רחוק, לפחות לא כל כך מהר. 3. יש פעולות שאתה עושה כרגע בקליאנט וניתן להעביר אותן לסרבר? אם כן, כדאי? (פילטורים, חישובים וכד') 4. פעולות כבדות שאתה עושה בקליאנט וצריכות להשאר שם - ניתן לשפר אותן? 5. יחסית לשאר הספריות בקטגוריה הזו, אנגולר נחשבת קצת פחות יעילה בכל מה שקשור לעבודה עם ה- DOM ול- bindings שלה - למה בחרת דווקא בה? יכול להיות שספריה אחרת תעבוד טוב יותר עבורך? 6. התצורה הזו בהגדרה מעבירה חלק מהפעולות שיש לבצע מהסרבר לקליאנט. אם הקליאנטים שלך לא מסוגלים להתמודד עם זה - אולי זה לא הפתרון הנכון? |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|