DCSIMG
ביצועים - מאחורי המסך

מאחורי המסך

משה למפרט, על תכנות מתקדם וביצועים ב-Web.

על הבלוג

עוד חדשות

אתרים שיש לי בהם יד ורגל

Browse by Tags

All Tags » ביצועים (RSS)
HebMorph–חיפוש מורפולוגי עברי. סיקור ושימוש ב-Production
ביום שלישי האחרון השתתפתי בערב מעניין (ישר כח למארגנים) שהיה במרכז המחקר והפיתוח של Microsoft בהרצליה. אחת ההרצאות שם הייתה על כלי מעניין בשם HebMorph , שהוא תוסף ל-Lucene/ Lucene.net עבור חיפושים מורפולוגיים בעברית. לאחר ההרצאה שוחחתי קצרות עם איתמר , המרצה והמפתח, וסיפרתי לו שהכלי שלו נותן תוצאות מצויינות אבל הביצועים שלו בעייתיים. איתמר חייך, אמר לא יכול להיות ואולי טעינו בכמה דברים ונתן כמה רעיונות. אחר כך כבר נכנסנו למצגת הבאה ולזו שאחריה (זו על ה-nodejs) שזה תחום שמסקרן אותי – ולא מהיום. למחרת...
Cache עם Lock מבוסס memcached
בעבר כתבתי על הבעיה הלא מאוד לא נפוצה שנגרמת כאשר משום מה מתבצעת פעולת Flush לחלקים גדולים של ה-Cache. מערכת שביום יום מתמודדת בהצלחה עם העומס ונותנת זמני תגובה מצויינים, מגמגמת ואף קורסת לדקות ארוכות בשעה שה-Cache עליו היא מתבססת או חלקים ממנו קרס. לפני קצת פחות משנתיים כתבתי על פתרון פשוט שמטרתו הייתה למנוע הרצת אותה פעולה מאות אלפי פעמים עד שנכנס ל-Cache אחד העותקים לשימוש בפעמים הבאות. הפיתרון עבד מאוד יפה כל עוד נמצאים באותו שרת, ובאותו Proccess של IIS. גם במקרים שלא, הפעולה צומצמה מאלפים של...
MySQL: איטיות בפעולות LIMIT גדולות | Slow large Limit offsets
(הפוסט רלוונטי במידה מסויימת גם ל-SQL Server) בעבר הדגמתי כיצד ניתן לבצע חלוקה לדפים ביעילות בMySQL וב-SQL Server, גם כשהטבלאות עליהן עובדים הולכות ומתנפחות. נתקלתי לא אחת במקרה בו הגולש (או המקרה הנפוץ יותר – מנוע חיפוש ), מתחיל לרוץ על הדפים ומגיע לדף ה-1000 ויותר. במקרה כזה, מסד הנתונים צריך לעבור על כל הטבלה עד לשלב שאליו הוא הגיע. פעולה יקרה, איטית וזוללת משאבים תרשו לי להציע פיתרון אחר. ניקח לדוגמא את השליפה הזו: - Source Query – slow on large LIMIT select f_id, f_title, f_date from flashes...
עוד קצת ביצועים: שליפת "X הודעות חדשות" ממע' מסרים
אחד הרכיבים הנפוצים ביותר באתרי תוכן משתמש למינהם היא מערכת מסרים, ועדיף מערכת מסרים טובה. כשהאתר מצליח ונהיה פופולארי, תגלו עד מהרה את טבלאות ההודעות בראש רשימת הטבלאות העמוסות במסד הנתונים שלכם. בפוסט אציע פיתרון קל לביצוע, נוגד את כללי הנורמליזציה ובעיקר – עובד נפלא. כאשר ניגשים לבעיה, ניתן לראות 2 שימושים נפוצים: 1. הצגת מספר ההודעות בלבד 2. הצגת חלון DHTML קטן שמציג את הכותרת ורכיבים נוספים של הכותב או ההודעה. נתייחס לשניהם.   הפיתרון המוצע כאן הוא מאוד מאוד פשוט, אבל משפר ביצועים לעיתים...
GET לעומת POST. וגם: WebServiceים ו-WCF
מדי פעם אני נתקל באתרים שזוחלים לאט. לעיתים הפיתוי מושך אותי לפתוח את כלי הפיתוח שלי ולהבין מה קרה שם. אחד מהאתרים האלה השתמש ב-UpdatePanel וטעינת רכיבי AJAX ארכה דקות ארוכות. בהמשך מישהו מצוות האתר הזה התחיל לעבוד עם WebService שמחזיר JSON. פה כבר מדובר בשיפור מדהים בביצועים, אבל עדיין רחוק ממה שניתן היה להשיג. אילו וכאשר.   נוחות הפיתוח והבדיקה של WebServiceים למינהם ובהמשך WCF הפכה אותם לשימושיים גם בתוך הדפדפן, כמקור למידע אותו משלימים ב-AJAX. מדובר בכלי יעיל, אלא שגם לו יש חסרונות מרכזיים...
Nginx – פרוקסי הפוך לביזור וקיצוץ עומסים מ-IIS
Nginx הוא שרת קטן שנכתב ללינוקס (אבל עובד גם על חלונות) ומיועד למטרה אחת ויחידה: Reverse Proxy מתוחכם. הוא יודע לשמור אצלו ב-Cache את הקבצים הסטטיים למינהם ומוריד את העומס ה זה מה-I/O של שרת האפליקציה*, והוא יודע גם לבזר את הבקשות בין השרתים השונים שלכם תוך שימוש ב-Sticky Sessions כדי לוודא שכל גולש משוייך ל-Session בשרת "שלו". בדרך כלל אתרים שזקוקים לדבר כזה משתמשים כבר ב-CDN או פיתרון דומה, אבל למי שצריך לשפר ביצועים של אתר בגודל בינוני+, שהגולשים שלו מרוכזים במדינה אחת זה יכול להיות...
דחיסת JS ו-CSS בצד שרת עם YUI
מי שצבר קצת נסיון יודע שחיסכון במשקל דפים ורכיבים נלווים הוא הכרחי. גיליתי באקראי שיש גירסא של דוחס ה-JS וה-CSS של YUI לסביבת .NET בקוד פתוח. אפשר להשתמש בו באמצעים מגוונים או עם MSBuild (מה שנשמע לי מעניין יותר) במהלך בניית גירסת ייצור. מעניין.
JS: טריק לא מוכר לשיפור זמן התגובה של DOM: createDocumentFragment
נדמיין לעצמנו את הלולאה הבאה: var arr=[……]; for(var i=0;i<arr.length;i++) { var d=document.createElement("div"); d.innerHTML=arr[i].html; document.getElementById("divonpage").appendChild(d); } מי מאיתנו לא כתב לולאה כזו או דומה לה בחייו. עכשיו נדמיין מה קורה בפנים: בכל איטרציה של הלולאה, מחושב מחדש arr.length, אחר כך נוצר div חדש, מתווסף לו תוכן והוא נוסף לדף, מה שמרענן מחדש את התצוגה ואת הטבלאות הפנימיות של הדפדפן. אני מציע את השינוי הבא, והסברים בהערות: var arr=[……],len=arr...
PageSlow של גוגל – שימוש ראשוני
אני חסיד גדול של ביצועים בצד לקוח. תמיד שמח לנסות ולבדוק את כל השיטות האפשריות וגם הבלתי אפשריות, כך ש-YSlow מותקן אצלי כמעט מהיום שיצא לאוויר. לקחתי לניסוי את המתחרה החדש (יחסית) שלו מבית גוגל, והרצתי על אתר הבית שלנו בעבדית. כמה נקודות שהוא מגלה ו-YSlow בינתיים לא: בקשות DNS מבוזבזות – דומיינים מהם נטען רק רכיב אחד שאפשר לחסוך (כך גיליתי רכ. מקטין תמונות ומציע הצעות קונקרטיות על כל התמונות במערכת – חוסך טעינה של תמונה תמונה לתוכנה גרפית. הצרה הצרורה – הוא מציג רשימה ארוכה של תמונות בהן ניתן לחסוך...
דפים כמעט סטטיים זוחלים. למה ?
אחת התופעות שאני נתקל בה לפעמים אלו בעלי אתרים שמודעים לבעיות הביצועים של האתר שלהם, ולכן בדף הבית (או דפים מרכזיים) הם מבצעים אופטימיזציה ובודקים כל שלב בנפרד. מנהל של אתר אחד שראיתי אפילו בנה דף שמכיל רק Includeים לדפים (סטטים) אחרים אותם היה מעדכן לפי דרישה. אבל עדיין דף הבית שלו זחל, ואני נשאלתי – למה! התחברתי לשרת שלו והרצתי DebugDiag , שאימת את ההשערה שלי. הסתבר כי הרבה מאוד בקשות שנתקעו למשך שניות אחדות, כלל לא הגיעו למנגנון של ASP ונתקעו הרבה קודם. אז למה? ל-ASP ול-ASP.net יש בתוך Application...
Cache עבור שאילתות עדכון
English: How to Caching updates to minimize I/O cost of these operations, for example – counting views on forum message. the solution I provided is to create a table/static variable that holds updates "log" and update the main heavy table with timer. For example – for counting forum message views, I add row to some log table (that I can store in somewhere else, like RAM drive or MySQL Memory table) with timer updates main table and empty the log table for fast access later. ה בעיה: שרת...
100% CPU ב-IIS
English: how to find what can make your IIS server 100% crazy, and fix it. debugging high CPU usage by w3wp.exe with Microsoft's IIS debugging tools. לעיתים נתקלים בשרת ש"נחנק" ומגיע ל-100% ניצולת מעבד. כמה רעיונות בסיסיים להתחלת פיתרון בבעיה. במקרה כזה דפים מגיבים באיטיות, ומדי פעם נתקעים עם שגיאות כגון Service Unavailable או Server too busy . 1. מה חונק את השרת? Ctrl + Alt + Esc יפעיל את מנהל המשימות. נמיין את "תהליכים" ונחפש מי מתעלל בשרת. בדרך כלל זה יהיה w3wp.exe , (ב...
בעיות (ופתרונות) בשימוש ב-OutputCache לשיפור ביצועים
English: Some Tips for bypass Query Cache problems. First code: simple QueryCache Second code: Add to admin section on the website, and flush cache for URL Last Code: how to force Proxies/Browsers to not store cached content, and return to origin server. I used this technique for set long-time OutputCache, and clear it manually when I know that content changed. In Hebrew I explain why Query Cache fro long times is bad, and why Cache Dependencies is bad and expensive (especially SQLCacheDependency...
מנגנון ניהול Cache בסיסי
English: Simple Cache management function. how to make cache thinks easier. The function below can check if something is in the cache, and also if other Web request, execute the heavy function using SyncLock. לעיתים עולה הצורך לעבוד בתצורה שבה יש משאב (למשל שאילתת SQL כבדה) שיקר לייצר אותו. הפיתרון הפשוט - שומרים אותו בקאש. Cache("name") = value או שצריך לפי מגבלת תאריך ושעה: Cache.Add(Key, Value, Nothing, Expire, Nothing, Priority, Nothing) אבל כל זה מעצבן כל פעם מחדש. אחד החידושים שיצאו...
שיפור ביצועים בשרת SQL
אחד הרכיבים העמוסים ביותר במערכות Web הוא מסד הנתונים. מערכות Web 2 לסוגיהן כמו פורומים, לקוחות IM, מערכות מסרים וכו' נוהגות לנפח את המסד האומלל ולמלא אותו בערימות רבות ומגוונות של מידע, לעיתים כפול ומכופל. המתכנת שמפתח את המערכת לרוב לא מודע להשלכות ולוקח זמן רב (שנים) עד שהבעיות בתכנון המקורי צצות ועולות, בעיקר עם עליית הפופולאריות של המערכת וחניקת ה-CPU של רכיביה. לכל מערכת כזו, ניתן לממש פיתרונות ביצועים משלה, הדורשים הכרות מעמיקה עם רכיביה הפנימיים. אביא דוגמא נפוצה - ורעיונות אפשריים. מערכת...
More Posts Next page »