דחיסת JS ו-CSS בצד שרת עם YUI

יום שני, ינואר 11, 2010

מי שצבר קצת נסיון יודע שחיסכון במשקל דפים ורכיבים נלווים הוא הכרחי. גיליתי באקראי שיש גירסא של דוחס ה-JS וה-CSS של YUI לסביבת .NET בקוד פתוח. אפשר להשתמש בו באמצעים מגוונים או עם MSBuild (מה שנשמע לי מעניין יותר) במהלך בניית גירסת ייצור. מעניין.
תגיות: , ,
אין תגובות

JS: טריק לא מוכר לשיפור זמן התגובה של DOM: createDocumentFragment

יום ראשון, נובמבר 29, 2009

נדמיין לעצמנו את הלולאה הבאה:var arr=; for(var i=0;i<arr.length;i++) { var d=document.createElement("div"); d.innerHTML=arr.html;document.getElementById("divonpage").appendChild(d); } מי מאיתנו לא כתב לולאה כזו או דומה לה בחייו. עכשיו נדמיין מה קורה בפנים: בכל איטרציה של הלולאה, מחושב מחדש arr.length, אחר כך נוצר div חדש, מתווסף לו תוכן והוא נוסף לדף, מה שמרענן מחדש את התצוגה ואת הטבלאות הפנימיות של הדפדפן. אני מציע את השינוי הבא, והסברים בהערות:var arr=,len=arr.length; // שמירה של כמות המשתנים במערךvar frag = document.createDocumentFragment(); // עיין בקישור for(var i=0;i<len;i++) {var d=document.createElement("div") d.innerHTML=arr.htmlfrag.appendChild(d) // שמירה "בצד" של מערך מוכן לשימוש }// ועכשיו נעדכן את התצוגה של הדפדפן רק פעם אחתdocument.getElementById("divonpage").appendChild(frag); זה נכון שבדפדפנים החדשים יותר יש אופטימיזציות לפתרון בעיות מהסוג הזה, מצד...
תגיות: , ,
3 תגובות

PageSlow של גוגל – שימוש ראשוני

יום שלישי, נובמבר 24, 2009

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

דפים כמעט סטטיים זוחלים. למה ?

יום שישי, נובמבר 6, 2009

אחת התופעות שאני נתקל בה לפעמים אלו בעלי אתרים שמודעים לבעיות הביצועים של האתר שלהם, ולכן בדף הבית (או דפים מרכזיים) הם מבצעים אופטימיזציה ובודקים כל שלב בנפרד. מנהל של אתר אחד שראיתי אפילו בנה דף שמכיל רק Includeים לדפים (סטטים) אחרים אותם היה מעדכן לפי דרישה. אבל עדיין דף הבית שלו זחל, ואני נשאלתי – למה! התחברתי לשרת שלו והרצתי DebugDiag, שאימת את ההשערה שלי. הסתבר כי הרבה מאוד בקשות שנתקעו למשך שניות אחדות, כלל לא הגיעו למנגנון של ASP ונתקעו הרבה קודם. אז למה? ל-ASP ול-ASP.net יש בתוך Application Pool בסך הכל 25...
4 תגובות

Cache עבור שאילתות עדכון

יום רביעי, אוקטובר 28, 2009

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. הבעיה: שרת SQL Server 2005 של מערכת Web. ניתוח...
אין תגובות

100% CPU ב-IIS

יום שני, ספטמבר 28, 2009

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, (ב-IIS5 זה היה אאל"ט dllhost.exe), אבל ממש לא תמיד.זה יכול להיות גם מסד נתונים (mysqlnt.exe או sqlsrvr.exe ב-MySQL או SQL Server...
אין תגובות

בעיות (ופתרונות) בשימוש ב-OutputCache לשיפור ביצועים

יום שני, ספטמבר 21, 2009

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 on heavy SQL Server), but often useless. אחת הבעיות הקשות (אך החיוביות) איתם מתמודדים מנהלי פרוייקטים, או מתכנתים בודדים,...
תגובה אחת

מנגנון ניהול Cache בסיסי

יום שבת, יולי 11, 2009

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) אבל כל זה מעצבן כל פעם מחדש.אחד החידושים שיצאו בגירסא 3.5 של הסביבה, הינה האפשרות להעביר פונקציות אנונימיות (Lambda), כמשתנה לפונקציה. ישבתי חמש דקות וכתבתי את הפונקציה הבאה:Public Shared Function GetFromCache(Of T)(ByVal Name As...
תגובה אחת

שיפור ביצועים בשרת SQL

יום ראשון, יוני 14, 2009

אחד הרכיבים העמוסים ביותר במערכות Web הוא מסד הנתונים. מערכות Web 2 לסוגיהן כמו פורומים, לקוחות IM, מערכות מסרים וכו' נוהגות לנפח את המסד האומלל ולמלא אותו בערימות רבות ומגוונות של מידע, לעיתים כפול ומכופל.המתכנת שמפתח את המערכת לרוב לא מודע להשלכות ולוקח זמן רב (שנים) עד שהבעיות בתכנון המקורי צצות ועולות, בעיקר עם עליית הפופולאריות של המערכת וחניקת ה-CPU של רכיביה. לכל מערכת כזו, ניתן לממש פיתרונות ביצועים משלה, הדורשים הכרות מעמיקה עם רכיביה הפנימיים. אביא דוגמא נפוצה - ורעיונות אפשריים. מערכת מסרים מערכת מסרים טיפוסית נראית ככה:CREATE TABLE  `pb_messages` (`m_id` int NOT NULL AUTO_INCREMENT,  `m_from` int NOT...
תגובה אחת

Service Unavailable, וסתם Timeoutים בסביבת ייצור

יום שלישי, יוני 2, 2009

English: Simple ways to find and destroy IIS hangs/timeout's. אחת התופעות המרגיזות ביותר היא אתר שעובד כהלכה, ללא עומסים חריגים נראים לעין ופתאום זורק שגיאות בסגנון של Server Unavailable, Server too Busy וכו'.כשמתחברים לשרת, מגלים את אחד משני הדברים: 1. w3wp צורך 100% CPU או קרוב לזה. לחילופין - 100% ממעבד בודד (למשל 50% במקרה של שני מעבדים לוגיים, 25 בארבעה וכו') 2. הכל "מת".מספר ה-Requestים המעובדים עומד על אפס או קרוב לזה, ה-CPU "ישן" על קרוב ל-0% אבל השרת לא מתפקד. כמובן שישנן עוד סיבות רבות שגורמות לתקלות מהסוג הזה, אבל אני אתחיל בנפוצות שבהן.   100% CPU...
3 תגובות