<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>מאחורי המסך</title><link>http://blogs.microsoft.co.il/blogs/moshel/</link><description>משה למפרט, על תכנות מתקדם וביצועים ב-Web.</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Internet Explorer 9 – חוויה ראשונית</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/03/17/internet-explorer-9.aspx</link><pubDate>Wed, 17 Mar 2010 14:56:51 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:549374</guid><dc:creator>Moshe L</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=549374</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=549374</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/03/17/internet-explorer-9.aspx#comments</comments><description>&lt;p&gt;היום ביליתי זמן ארוך בבחינת דפדפן העתיד של מיקרוסופט, IE9 בגירסת ה-Platform Preview שלו כפי שניתן להוריד מהרשת. כמובן שמדובר בגירסא בה הכל יכול להשתנות – ובכל זאת, הפצת הגירסא מראה על נכונות של מיקרוסופט להתקרב למפתחים שלה, וגם לגולשי הדפדפן שלה, שהוא עדיין הפופולארי ביותר בעולם, עם נתח שוק של כ-88% בישראל.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_24D22C26.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_3CE570B4.png" width="504" height="361" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;דף הבית של ערוץ 7 בדפדפן החדש. &lt;/p&gt;  &lt;p&gt;הבעיה הראשונה שבה נתקלתי זו בעיית קריאות – הטקסט פשוט כואב בעיניים, אבל אני משער שזה ישתפר בהמשך. גם הנטיה של הדפדפן לקרוס היא נסבלת בהתחשב בעובדה שמדובר בגירסא שאפילו אינה אלפא.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;הדבר הראשון שרציתי לבדוק זה ביצועים של רכיבים באתר, למשל הדוא&amp;quot;ל והפורומים של ערוץ 7. עשיתי את זה במצב IE9.   &lt;br /&gt;בתחושה (ללא מדידה מקצועית) – דפים במצב IE9 עולים משמעותית מהר יותר מאשר ב-IE8 קודמו. לעומת זאת – פעולות המבוצעות ב-JS דווקא איטיות יותר, ובצורה מורגשת בהחלט. גם אנימציות של&amp;#160; JQuery זוחלות.&lt;/p&gt;  &lt;p&gt;כניסה ל-Devaloper Tools הראתה כי הרכיב הזה איטי מאוד (לא הפתעה למשתמשי הכלי המקביל ב-IE8) וטעינה שלו לאחר דף כבד אורכת לעיתים עד חצי דקה.   &lt;br /&gt;שיטוט מעמיק יותר הראה טאב חדש, למעקב אחרי בקשות HTTP. מזכיר את טאב NET&amp;#160; של Firebug או גירסא בסיסית של Fiddler. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_42243198.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_24EE63C1.png" width="504" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;לחיצה על Response Body הפתיעה לטובה והציגה גם תמונות, תוך הדגשת השקיפות שלהן באם היתה כזו (שימושי).   &lt;br /&gt;טאב נוסף מציג עוגיות, והאחרון מחלק את זמן ההמתנה לדף, בדומה למוצרים דומים.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_7A5282E3.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_3E46412E.png" width="504" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;הטבלה עוד טעונה שיפור להגיע לקרסוליים של Fiddler או Firebug, אבל בסך הכל עושה עבודה מצויינת בהחלט. נתון שהיא מציגה והאחרים לא יודעים להציג – Gap, אורך הזמן בין השלמת הבקשה לבין סיום טעינת הדף. יעיל לפעמים לאיתור בעיות מחוץ ל-HTTP Request עצמו.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_02A6326E.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_78919142.png" width="504" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;עד כאן לבינתיים. לי נשאר רק לחכות (כהרגלי) לגירסא העברית. כשזו תגיע – נכתוב עליה בעז&amp;quot;ה.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=549374" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D005D905E005D805E805E005D805_/default.aspx">אינטרנט</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx">DEV</category></item><item><title>ביצועים ב-Web: צמצום מספר הבקשות ל-JS ול-CSS</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/02/10/web-js-css.aspx</link><pubDate>Wed, 10 Feb 2010 10:18:55 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:516020</guid><dc:creator>Moshe L</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=516020</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=516020</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/02/10/web-js-css.aspx#comments</comments><description>&lt;p&gt;התחלתי לבצע את הרעיון הזה כחלק מהמהלך שלי להוריד (עוד יותר) את מספר הבקשות לדף בערוץ 7, על מנת להאיץ את טעינתו של אתר החדשות הנ&amp;quot;ל. מפה לשם התחלתי לבנות Handler שמקבל רשימת קבצי JS וקבצי CSS, ובונה משהו כזה:&lt;/p&gt;  &lt;pre&gt;
&lt;p&gt;// js script&lt;br /&gt;function () {}&lt;br /&gt;

// css&lt;br /&gt;
document.write(&amp;quot;&amp;lt;style&amp;gt;body {font-family:arial}&amp;lt;/style&amp;gt;&amp;quot;);&lt;/pre&gt;


&lt;p&gt;זה עבד יפה, אבל לא היה מושלם (שבר הפניות יחסיות לקובץ ה-CSS שאותן תיקנתי בעזרת search/replace, והיה קצת מכוער – ופגע קצת בביצועים בצד לקוח).אז חיפשתי קצת בגוגל, ומצאתי &lt;a href="http://blogs.msdn.com/shivap/archive/2007/05/01/combine-css-with-js-and-make-it-into-a-single-download.aspx"&gt;פיתרון אחר, שמבוסס על הערות&lt;/a&gt; ועל דרך לגרום ל-JS להתעלם מה-CSS ולהפך, ולטענת כותבו – גם עובר ולידציה. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;בשלב הבא, לא משנה באיזה פיתרון תבחרו, נצטרך לגשת לקובץ שלנו, ולעשות את זה בצורה שתאפשר גם לרענן את ה-Cache במקרה שיש שינוי בקבצים. 
  &lt;br /&gt;אני לא אראה פה את כל הקוד, אבל את העיקרון אני חושב שאפשר:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre&gt;
&lt;p&gt;&amp;#39;ייצור script  עם הפנייה מתאימה, על בסיס Hash
Shared Function GetScriptsHTML(ByVal Scripts() As String, ByVal CSS() As String) As String
  &amp;#160;&amp;#160;&amp;#160; Dim sHash As String = GetFilesHash(&amp;quot;scripts&amp;quot;, Scripts)
  &amp;#160;&amp;#160;&amp;#160; If CSS.Length &amp;gt; 0 Then sHash = MailFuncs.MD5(System.Text.Encoding.UTF8.GetBytes(sHash &amp;amp; GetFilesHash(&amp;quot;css&amp;quot;, CSS)))

  &amp;#160;&amp;#160;&amp;#160; Return &amp;quot;&amp;lt;script src=&amp;quot;&amp;quot;Combine.ashx?js=&amp;quot; &amp;amp; Join(Scripts, &amp;quot;,&amp;quot;) &amp;amp; &amp;quot;&amp;amp;css=&amp;quot; &amp;amp; Join(CSS, &amp;quot;,&amp;quot;) &amp;amp; &amp;quot;&amp;amp;h=&amp;quot; &amp;amp; Mid(sHash, 1, 10) &amp;amp; &amp;quot;&amp;quot;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;quot;

End Function

Private Shared Function GetFilesHash(ByVal Folder As String, ByVal Files() As String) As String
  &amp;#160;&amp;#160;&amp;#160; Dim aFiles As New StringBuilder
  &amp;#160;&amp;#160;&amp;#160; For i As Integer = 0 To Files.Length - 1
     &amp;#39; שימו לב לתת הפניה לספריה הנכונה
  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; aFiles.Append(vbCrLf &amp;amp; vbCrLf &amp;amp; IO.File.ReadAllText( Folder &amp;amp; &amp;quot;/&amp;quot; &amp;amp; Files(i)))

  &amp;#160;&amp;#160;&amp;#160; Next
  &amp;#160;&amp;#160;&amp;#160; Return MD5(System.Text.Encoding.UTF8.GetBytes(aFiles.ToString))
End Function&lt;/p&gt;

Shared Function MD5(ByVal Bytes() As Byte) As String
  &amp;#160;&amp;#160;&amp;#160; Dim oMd5 As New System.Security.Cryptography.MD5CryptoServiceProvider()
  &amp;#160;&amp;#160;&amp;#160; Dim Bytes2() As Byte = oMd5.ComputeHash(Bytes)
  &amp;#160;&amp;#160;&amp;#160; Return System.Convert.ToBase64String(Bytes2) &amp;#39;, 0, Bytes2.Length)&amp;#160;&amp;#160;&amp;#160; &amp;#39;Bytes2)
&amp;gt;End Function&lt;/p&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;הקוד הזה כמובן לא גמור ויש עוד מה לשפר, בשלב הבא צריך לשמור ב-Cache כלשהו את תוצאות ה-MD5 של הקבצים (זו פעולה קצת יקרה) ומן הסתם אפשר לייצר קוד קצת יותר יפה&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=516020" width="1" height="1"&gt;</description></item><item><title>MySQL SSMA – ייבוא טבלאות מ-MySQL ל-MSSQL</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/01/20/mysql-ssma-mysql-mssql.aspx</link><pubDate>Wed, 20 Jan 2010 21:16:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:504016</guid><dc:creator>Moshe L</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=504016</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=504016</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/01/20/mysql-ssma-mysql-mssql.aspx#comments</comments><description>&lt;p&gt;מוצר חדש שעלה בשקט בשקט ב-CTP, ומיועד למי שנמצא על קו התפר בין MySQL, פרוייקט הקוד הפתוח הפופולארי לבין SQL Server.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_62CF1600.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_1BD5CD36.png" width="503" height="389" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;מדובר בתוכנה קטנטנה ששוקלת רק 11MB על הכונן הקשיח, ודורשת את ה-MySQL ODBC Client שניתן להורדה חינם מאתר MySQL. אותי מפליא מדוע הם לא בחרו פשוט להשתמש ב-Native Provider של MySQL לסביבת .NET Framework., אבל מילא. שיהיה.&lt;/p&gt;  &lt;p&gt;הכלי עצמו, לאחר שהותקן בדקה או שתיים, דורש רשיון (הניתן חינם באתר Microsoft) בדומה לכלים דומים (SSMA של Access)&amp;#160; ולאחר שנפתח נראה כמעט זהה לכלי המקביל עבור Access, למעט האשף שעושה את החיים קצת פשוטים יותר. הכלי, אגב, תומך גם בשדרוג ל-SQL Azure שבענן אותו מיקרוסופט דוחפת בכל הכח.&lt;/p&gt;  &lt;p&gt;תחילה ניצור פרוייקט חדש:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_65A42F19.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_03A23D0E.png" width="504" height="171" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; בשלב הבא נתחבר ל-MySQL המקור ול-SQL Server היעד וניתן לתוכנה לנתח את מבנה הנתונים במקור, וגם מציע הצעות לשינויים במקרים של אי תאימות.&lt;/p&gt;  &lt;p&gt;כשמדובר בהמרת ה-Schema של הטבלאות הוא עושה עבודה טובה, וממיר היטב גם את האינדקסים המצורפים לטבלה ומסייע (לא בדקתי)להעביר גם את הטריגרים. כמו שאר הכלים מהסדרה הוא תומך בהמרה און ליין וגם ביצירת קובץ SQL.   &lt;br /&gt;בנוסף לכך הוא מציג דו&amp;quot;ח מאוד יפה על DB והבעיות הנובעות מהבדלים בין SQL Server ל-MySQL בתחום הטיפול בתאריכים ואחרים, וכותב בסוגריים הערכת זמן לטיפול בבעיה.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;בשלב הבא ניסיתי להמיר דרכו מסד נתונים של 3GB עליו מבוססת אפליקציית Web, הוא טען שהצליח, אולם כשניסיתי להעביר את המידע הוא טען כי ההמרה נכשלה.     &lt;br /&gt;בדיקה ב-Management Studio לא הראתה שום זכר לטבלאות שהיו אמורות להיווצר. ייצוא ידני של ה-SQL&amp;#160; שהוא הציע ליצור והרצה ידנית ב-Management Studio עבר חלק.&lt;/p&gt;  &lt;p&gt;הליך העתקת המידע מורכב מעט ודורש הכרות פנימית עם מבנה הנתונים ועם MySQL ו-SQL Server באופן כללי. עם זאת – מרגע שהכל הוגדר כשורה, למעט חריגים - אין בעיות או הפתעות מיוחדות (חוץ מתאריכי האפס). העתקת המידע מתבצעת בד&amp;quot;כ ב&amp;quot;פרוסות&amp;quot; של כ-10,000&amp;#160; רשומות בפעולה, בתלות בנפח ובגודל הטבלה והזיכרון בשרת המקור והיעד.&lt;/p&gt;  &lt;p&gt;חשוב לציין שהתוכנה &lt;strong&gt;מתעלמת לחלוטין ממאפיינים ייחודיים ל-MySQL&lt;/strong&gt; הנעדרים במתחרה המיקרוסופטי, כמו למשל היותן של טבלאות זיכרון ודברים מעין אלו. במקרה של מערכת שנכתבה והותאמה ספציפית ל-MySQL ניתן יהיה לצפות להפתעות רעות מאוד בתחום הביצועים.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_16C1B434.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_27396388.png" width="504" height="410" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;המסך הראשי של התוכנה. בצ&amp;quot;מ נמחקו פרטי הטבלאות.&lt;/p&gt;  &lt;p&gt;בעז&amp;quot;ה מתישהו – על MySQL בסביבת .NET: רגישויות, ביצועים ועוד ועוד. ואולי גם הדרך ההפוכה – המרה מטבלאות של SQL Server לאלו של MySQL.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=504016" width="1" height="1"&gt;</description></item><item><title>Nginx – פרוקסי הפוך לביזור וקיצוץ עומסים מ-IIS</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/01/16/nginx_5F00_for_5F00_aspnet_5F00_preformance.aspx</link><pubDate>Sat, 16 Jan 2010 15:59:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:498497</guid><dc:creator>Moshe L</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=498497</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=498497</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/01/16/nginx_5F00_for_5F00_aspnet_5F00_preformance.aspx#comments</comments><description>&lt;p&gt;Nginx הוא שרת קטן שנכתב ללינוקס (אבל עובד גם על חלונות) ומיועד למטרה אחת ויחידה: Reverse Proxy מתוחכם. הוא יודע לשמור אצלו ב-Cache את הקבצים הסטטיים למינהם ומוריד את העומס ה זה מה-I/O של שרת האפליקציה*, והוא יודע גם לבזר את הבקשות בין השרתים השונים שלכם תוך שימוש ב-Sticky Sessions כדי לוודא שכל גולש משוייך ל-Session בשרת &amp;quot;שלו&amp;quot;.&lt;/p&gt;  &lt;p&gt;בדרך כלל אתרים שזקוקים לדבר כזה משתמשים כבר ב-CDN או פיתרון דומה, אבל למי שצריך לשפר ביצועים של אתר בגודל בינוני+, שהגולשים שלו מרוכזים במדינה אחת זה יכול להיות פיתרון מצויין (וגם זול).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nginx.org/" target="_blank"&gt;Nginx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;* אמנם גם ל-IIS יש Cache משלו, Kernel Caching, שבהחלט מוריד עומסים בשרת בצורה משמעותית, אבל הוא לא מתמודד עם קבצים שנגישים בתדירות נמוכה יותר, ובחלק מסביבות העבודה עלולים להיות חלק לא קטן מהעומס. בנוסף – הוא גם מתמודד בצורה טובה פחות עם Caching של רכיבים דינאמיים מאשר&amp;#160; Cache חיצוני המיועד בין השאר גם לזה.   &lt;br /&gt;יש גם ייתרון לא קטן לפעמים בהעברת עלות הדחיסה – gzip של הקבצים משרת האפליקציה לשרת אחר.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=498497" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D905E605D505E205D905DD05_/default.aspx">ביצועים</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ITPRO/default.aspx">ITPRO</category></item><item><title>דחיסת JS ו-CSS בצד שרת עם YUI</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/01/11/js-css-yui.aspx</link><pubDate>Mon, 11 Jan 2010 10:45:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:492922</guid><dc:creator>Moshe L</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=492922</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=492922</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/01/11/js-css-yui.aspx#comments</comments><description>&lt;p&gt;מי שצבר קצת נסיון יודע שחיסכון במשקל דפים ורכיבים נלווים הוא הכרחי.&lt;/p&gt;
&lt;p&gt;גיליתי באקראי שיש גירסא של &lt;a href="http://www.codeplex.com/YUICompressor" target="_blank"&gt;דוחס ה-JS וה-CSS של YUI&lt;/a&gt; לסביבת .NET בקוד פתוח. אפשר להשתמש בו באמצעים מגוונים או עם MSBuild (מה שנשמע לי מעניין יותר) במהלך בניית גירסת ייצור.&lt;/p&gt;
&lt;p&gt;מעניין.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=492922" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ASP.net/default.aspx">ASP.net</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D905E605D505E205D905DD05_/default.aspx">ביצועים</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx">DEV</category></item><item><title>IE בישראל ירד מתחת ל-90%. IE6 ירד ל-24%</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/24/ie-90-ie6-24.aspx</link><pubDate>Thu, 24 Dec 2009 10:34:50 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:475617</guid><dc:creator>Moshe L</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=475617</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=475617</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/24/ie-90-ie6-24.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.inn.co.il/News/News.aspx/198034"&gt;כתבה שפירסמנו&lt;/a&gt; בערוץ 7 על סטטיסטיקות דפדפנים בקרב גולשים &lt;strong&gt;לא מקצועיים&lt;/strong&gt; בישראל. ממחקר לא מקצועי ולא מהימן שעשינו לגבי הדפדפן העתיק והפופולארי, הסתבר כי אחוז גדול מאוד של משתמשיו הם עובדי משרדי ממשלה, ביטוח לאומי וכו&amp;#39;, שפשוט לא יכולים לשדרג.&lt;/p&gt;  &lt;p&gt;במערכת החינוך המצב טוב יותר, אבל רחוק מלהיות מושלם. לעיתים פשוט פנינו לאחראי מחשבים של מוסדות והתחננו שישדרגו, עבד לעיתים ולעיתים – לא כ&amp;quot;כ.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ומה אצלכם?&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=475617" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Firefox/default.aspx">Firefox</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D305E405D305E405E005D905DD05_/default.aspx">דפדפנים</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ITPRO/default.aspx">ITPRO</category></item><item><title>SQL: חלוקה לדפים ביעילות</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/20/smart-sql-paging.aspx</link><pubDate>Sun, 20 Dec 2009 15:52:22 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:473984</guid><dc:creator>Moshe L</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=473984</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=473984</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/20/smart-sql-paging.aspx#comments</comments><description>&lt;p dir="ltr" align="left"&gt;English: SQL Server and MySQL optimization for paging large tables. skip the Hebrew explanations and look at the SQL. the first is slow, the second is better and the third&amp;#39;s cost is 1% of the original.   &lt;br /&gt;The four is MySQL specific &amp;quot;limit&amp;quot; feture and the last using ROW_NUMBER() function introduction in SQL Server 2005.&lt;/p&gt;  &lt;p&gt;מי לא נתקל בשליפות זוחלות מטבלאות ענק שתוקעות את כל שרת ה-SQL המסכן ובהמשך גם שרת האפליקציה. במדריך המקוצר הזה אנסה לתת טיפ או שניים לשליפה יעילה וחסכונית במשאבים. השאילתות נכתבו והותאמו ל-SQL Server אבל יעבדו ללא בעיה הן על אקסס ובשינויים קלים שיוסברו בהמשך גם על MySQL מחמד נפשי.&lt;/p&gt;  &lt;p&gt;ניקח למשל טבלה של 1,000,000 רשומות. נקרא לה&amp;#160; forum_messages, ונצרף עוד טבלה, של 100,000 רשומות, נקרא לה forum_topics&lt;/p&gt;  &lt;p&gt;נמלא אותן בנתונים של פורום ממוצע, סה&amp;quot;כ בין 5000 ל-70,000 הודעות פר פורום וכ-20 הודעות לשרשור. נשים אינדקס על מספר השרשור ואינדקס נוסף על מספר הפורום (יש כמובן עוד פרמטרים רבים, אבל ננסה לפשט אותם):&lt;/p&gt;  &lt;pre&gt;SELECT * FROM forum_messages, forum_topics WHERE m_forum=50 and t_id=m_topic ORDER BY m_date desc&lt;/pre&gt;

&lt;p&gt;יחזיר (נניח) 20,000 רשומות.&lt;/p&gt;

&lt;p&gt;אבל לנו מספיק רק 20, אז נעשה משהו כזה:&lt;/p&gt;

&lt;pre&gt;SELECT top 20 * FROM forum_messages, forum_topics WHERE m_forum=50 and t_id=m_topic ORDER BY m_date desc&lt;/pre&gt;

&lt;p&gt;יקח כ-&lt;strong&gt;5%&lt;/strong&gt; מהזמן בערך, עם השפעה נוספת בתחום של עיבוד בקוד ואם צריך גם רוחב פס ברשת.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;אבל אפשר לחסוך עוד קצת:&lt;/p&gt;

&lt;pre&gt;SELECT m_id, m_title,t_id,t_status from (SELECT top 20 * FROM forum_topics ORDER BY t_id desc) as x, forum_messages WHERE t_id=m_topic&lt;/pre&gt;

&lt;p&gt;בשיטה הזו, המכונה &amp;quot;Join מאוחר&amp;quot;, במקום לבצע שליפה על 1,000,000*100,000 ואז נצמצם אותה, נשלוף קודם מטבלה אחת 20 רשומות ורק אז נצרף מהטבלה השניה את שאר המידע. השליפה הזו תיקח כ-25% מהשליפה שלפניה (&lt;strong&gt;כ-1%&lt;/strong&gt; מהשליפה המקורית). אינדקס מתאים למיון יאפשר גם לחסוך עוד כמה אחוזים על ידי ייעול גם השלב הזה של השליפה.&lt;/p&gt;

&lt;p&gt;ב-MySQL אגב, העבודה שלנו פשוטה בהרבה. שם אפשר פשוט לבצע חלוקה לדפים עם LIMIT הפשוט והיעיל.&lt;/p&gt;

&lt;pre&gt;SELECT m_id, m_title,t_id,t_status from (SELECT  * FROM forum_topics ORDER BY t_id desc limit 20,40) as x, forum_messages WHERE t_id=m_topic ORDER BY m_date &lt;/pre&gt;

&lt;p&gt;יחזיר לנו את העמוד השני של הפורום מטבלת forum_topics, ואז יצרף אליה את הטבלה הכבדה יותר עם ההודעות לפי הצורך. הנה דוגמא למימוש כזה עבור SQL Server וחבריו תוך שימוש בפונקציה Row_Number שממומשת החל מ-SQL Server 2005&lt;/p&gt;

&lt;pre&gt;SELECT * FROM&amp;#160;&amp;#160; (SELECT top 40 ROW_NUMBER() OVER(ORDER BY t_id,m_id) AS rownum, 
  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * FROM (SELECT top 20 * FROM forum_topics ORDER BY t_id desc) as x, forum_messages WHERE t_id=m_topic) AS t1
  &lt;br /&gt;WHERE&amp;#160; rownum &amp;gt; 20 AND rownum &amp;lt;= 40&lt;/pre&gt;

&lt;p&gt;כשהרעיון הוא לשלוף את מספר הרשומות המינימלי האפשרי ואז לסנן אותו לפי rownum&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;אם יש צורך לדעת גם את מספר העמודים, בשביל זה הומצאה פונקציית count(*), שתעשה את העבודה בצורה נפלאה. את התוצאות שלה הייתי שומר באיזה Cache ומעדכן רק כשמשהו באמת משתנה.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=473984" width="1" height="1"&gt;</description></item><item><title>XP Mode בלי תמיכה במעבד</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/16/xp-mode.aspx</link><pubDate>Wed, 16 Dec 2009 08:52:43 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:469502</guid><dc:creator>Moshe L</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=469502</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=469502</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/16/xp-mode.aspx#comments</comments><description>&lt;p&gt;על בסיס VirtualBox ועוד סקריפט או שניים.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;נשמע מעניין למי שיש (כמוני) מעבדים שפשוט לא תומכים בוירטואליזציה, ומדהים כאלה כאלה נמכרים (גם High-End ו-Quad Core). מן הסתם זה איטי יותר אבל זה יעבוטד.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.boot-land.net/forums/index.php?noref=1&amp;amp;showtopic=9986" href="http://www.boot-land.net/forums/index.php?noref=1&amp;amp;showtopic=9986" rel="nofollow"&gt;http://www.boot-land.net/forums/index.php?noref=1&amp;amp;showtopic=9986&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=469502" width="1" height="1"&gt;</description></item><item><title>רעיונות רעים נפוצים ב-Web</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/12/web_5F00_common_5F00_bad_5F00_patterns.aspx</link><pubDate>Sat, 12 Dec 2009 18:31:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:464948</guid><dc:creator>Moshe L</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=464948</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=464948</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/12/web_5F00_common_5F00_bad_5F00_patterns.aspx#comments</comments><description>&lt;p&gt;כמה דוגמאות נפוצות ולא ממויינות לשיטות פיתוח גרועות שנתקלתי בהן בהיבט של ביצועים.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;שימוש ב-GridView לחלוקה לדפים של עשרות אלפי רשומות. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/20/smart-sql-paging.aspx" target="_blank"&gt;חלוקה לדפים&lt;/a&gt; בצד שרת – ASP.net (כלומר שליפה של עשרות אלפי רשומות מה-DB כדי להציג עשרים). &lt;/li&gt;    &lt;li&gt;רכיבי IFrame מיותרים. IFrame הוא רכיב כבד מאוד, גם בהיבט צד הלקוח (הדפדפן, והמריחות של IE שהוא הגורם להן) וגם בהיבט צד השרת (בקשות מיותרות). &lt;/li&gt;    &lt;li&gt;בקשות AJAX מיד לאחר הטעינה (Request מיותר ויקר, ועוד דינאמי). &lt;/li&gt;    &lt;li&gt;שימוש ביותר מ-JS Framework אחת בצד לקוח (כבד גם בצד השרת וגם בצד הלקוח). &lt;/li&gt;    &lt;li&gt;תמונות גדולות וכבדות שמוקטנות ב-HTML. &lt;/li&gt;    &lt;li&gt;מאות רכיבים קטנטנים שמייצרים מאות בקשות. &lt;/li&gt;    &lt;li&gt;שימוש מוגזם (מאוד) בעוגיות, למשל שמירת הודעות בפורומים שנקראו וכו&amp;#39;. &lt;/li&gt;    &lt;li&gt;Flash Loaders – אתר מגביל את שטח הדיסק לבאנר, אז טוענים אותו משרת חיצוני. בזבוז כפול. &lt;/li&gt;    &lt;li&gt;קבצים סטטיים לגמרי עם ? ותאריך עדכני (יש דרכים מוצלחות יותר למנוע Caching) &lt;/li&gt;    &lt;li&gt;ViewState של עשרות קילו בתים. &lt;/li&gt;    &lt;li&gt;Timeout של 20 שניות ומעלה. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;בכנס שארגן שלמה גולדברג לגולשי פורום .NET בתפוז, נוכחתי לדעת על מתכנתים באמת מוכשרים, שלא תמיד מודעים להשלכות של מה שהם עושים על הביצועים. משפט כמו &amp;quot;אפשר לשמור עוגיות עד 2K באקספלורר&amp;quot; אולי נכון, אבל חסר הבנה לגמרי לגבי המשמעויות של עוגיה בנפח 2K על חוויית הלקוח.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ובמה אתם נתקלתם?&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=464948" width="1" height="1"&gt;</description></item><item><title>JS: טריק לא מוכר לשיפור זמן התגובה של DOM: createDocumentFragment</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/29/js-dom.aspx</link><pubDate>Sun, 29 Nov 2009 20:32:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:455812</guid><dc:creator>Moshe L</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=455812</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=455812</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/29/js-dom.aspx#comments</comments><description>&lt;p&gt;נדמיין לעצמנו את הלולאה הבאה:&lt;/p&gt;&lt;pre&gt;var arr=[……];
  &lt;br /&gt;for(var i=0;i&amp;lt;arr.length;i++)
{
&lt;blockquote style="MARGIN-TOP:0px;"&gt;&lt;p&gt;var d=document.createElement(&amp;quot;div&amp;quot;);
&lt;br /&gt;d.innerHTML=arr[i].html;&lt;br /&gt;document.getElementById(&amp;quot;divonpage&amp;quot;).appendChild(d);
&lt;/p&gt;&lt;/blockquote&gt;
}&lt;/pre&gt;
&lt;p&gt;מי מאיתנו לא כתב לולאה כזו או דומה לה בחייו. עכשיו נדמיין מה קורה בפנים:&lt;/p&gt;
&lt;p&gt;בכל איטרציה של הלולאה, מחושב מחדש arr.length, אחר כך נוצר div חדש, מתווסף לו תוכן והוא נוסף לדף, מה שמרענן מחדש את התצוגה ואת הטבלאות הפנימיות של הדפדפן.&lt;/p&gt;
&lt;p&gt;אני מציע את השינוי הבא, והסברים בהערות:&lt;/p&gt;&lt;pre&gt;var arr=[……],len=arr.length; // שמירה של כמות המשתנים במערך&lt;br /&gt;var frag = document.&lt;a href="http://javascript.about.com/library/bldom14.htm" rel="nofollow" target="_blank"&gt;createDocumentFragment&lt;/a&gt;(); // עיין בקישור&lt;br /&gt;
&lt;br /&gt;for(var i=0;i&amp;lt;len;i++)
{&lt;blockquote style="MARGIN-TOP:0px;"&gt;&lt;p&gt;var d=document.createElement(&amp;quot;div&amp;quot;)
&lt;br /&gt;d.innerHTML=arr[i].html&lt;br /&gt;frag.appendChild(d) // שמירה &amp;quot;בצד&amp;quot; של מערך מוכן לשימוש
&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;
}&lt;/p&gt;&lt;p&gt;// ועכשיו נעדכן את התצוגה של הדפדפן רק &lt;strong&gt;פעם אחת&lt;/strong&gt;&lt;br /&gt;document.getElementById(&amp;quot;divonpage&amp;quot;).appendChild(frag);&lt;/p&gt;&lt;/pre&gt;
&lt;p&gt;זה נכון שבדפדפנים החדשים יותר יש אופטימיזציות לפתרון בעיות מהסוג הזה, מצד שני, לרוב המוחלט של הגולשים (לפחות בישראל) יש IE6/7 שלא מסתכלים אפילו לכיוון הזה, אז עדיין שווה לעבוד. עובד על כל הדפדפנים מ-IE6 ומעלה (לא בדקתי IE5 וכנופייתו).&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=455812" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/JS/default.aspx">JS</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D905E605D505E205D905DD05_/default.aspx">ביצועים</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx">DEV</category></item><item><title>PageSlow של גוגל – שימוש ראשוני</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/24/pageslow.aspx</link><pubDate>Tue, 24 Nov 2009 21:55:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:448669</guid><dc:creator>Moshe L</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=448669</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=448669</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/24/pageslow.aspx#comments</comments><description>&lt;p&gt;אני חסיד גדול של ביצועים בצד לקוח. תמיד שמח לנסות ולבדוק את כל השיטות האפשריות וגם הבלתי אפשריות, כך ש-YSlow מותקן אצלי כמעט מהיום שיצא לאוויר.&lt;/p&gt;  &lt;p&gt;לקחתי לניסוי את המתחרה החדש (יחסית) שלו מבית גוגל, והרצתי על אתר הבית שלנו בעבדית. כמה נקודות שהוא מגלה ו-YSlow בינתיים לא:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;בקשות DNS מבוזבזות – דומיינים מהם נטען רק רכיב אחד שאפשר לחסוך (כך גיליתי רכ.&lt;/li&gt;    &lt;li&gt;מקטין תמונות ומציע &lt;strong&gt;הצעות קונקרטיות על כל התמונות במערכת&lt;/strong&gt; – חוסך טעינה של תמונה תמונה לתוכנה גרפית.      &lt;br /&gt;הצרה הצרורה – הוא מציג רשימה ארוכה של תמונות בהן ניתן לחסוך. תחזיקו חזק! 37 byets. היה יעיל יותר אם הוא היה מתעלם מהן.      &lt;br /&gt;הקטנה ידנית של תמונות ב-YSlow (איטי ולעיתים לא עובד) נותנת קובץ מעט קטן יותר לעיתים. זניח.&lt;/li&gt;    &lt;li&gt;PageSlow עוקב גם אחרי CSS וביצועים של Selectors בדפדפנים שונים. נחמד.&lt;/li&gt;    &lt;li&gt;Remove Unused CSS – נשמע נחמד להסיר רכיבים לא שימושיים של CSS, אבל בפועל לא שימושי בעליל. הרעיון הוא לייצר קובץ CSS בודד ולשים אותו ב-Cache של הלקוח, גם אם הוא מכיל קצת רכיבי עיצוב של דפים פנימיים.&lt;/li&gt;    &lt;li&gt;בסעיף Cookie Size הכלי מתעלם מהרכיב המייצר Cookie הכי ארוך והכי כבד במערכת שלנו – Google Analytics. שאר העוגיות הם סוג של SessionID קטנים וזניחים במונחים של תקשורת או רוחב פס.     &lt;br /&gt;הרכיב האחרון אחראי ל-Cookie של לא פחות מאשר 100Bytes, תכפילו את זה בכמות הבקשות ותבינו שזה המון.      &lt;br /&gt;התמונות שלנו יושבות על דומיין אחר זה נכון, ובכל זאת.&lt;/li&gt;    &lt;li&gt;PageSlow מתעלם מנושא ה-CDN. העניין דווקא חיובי מכיוון שזה שינוי שמורכב יחסית לבצע, השינויים האחרים שהוא מציע פשוטים יותר ויעילים לא פחות.&lt;/li&gt;    &lt;li&gt;PageSlow מוצא URL שונה לקבצים זהים. למשל Home.js ו-home.js. ברכיכי AJAX הוא לעיתים מטעה אבל שווה תשומת לב.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;השאר פחות או יותר לא שונה בהרבה: GZIP, זמן פקיעה (Expire ו-Cache Control), צמצום (Minify) של קבצי טקסט.&lt;/p&gt;  &lt;p&gt;ההמלצה שלי: תשתמשו בשתיהן. מן הסתם התחרות תעשה להן ולאתר שלכם רק טוב.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=448669" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DNS/default.aspx">DNS</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Firefox/default.aspx">Firefox</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/CSS/default.aspx">CSS</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/HTML/default.aspx">HTML</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D905E605D505E205D905DD05_/default.aspx">ביצועים</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/F/default.aspx">F</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/PageSlow/default.aspx">PageSlow</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/YSlow/default.aspx">YSlow</category></item><item><title>גירסאות IE בטאבים</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/21/ietester.aspx</link><pubDate>Sat, 21 Nov 2009 19:56:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:448651</guid><dc:creator>Moshe L</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=448651</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=448651</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/21/ietester.aspx#comments</comments><description>&lt;p&gt;למי שעדיין אוכל קש מאחיזת 30% של IE6 בדפדפנים הישראליים ונזקק מדי פעם לפיתוח על הדפדפן הזה או גרועים ממנו&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.my-debugbar.com/wiki/IETester/HomePage" rel="nofollow" target="_blank"&gt;IETester&lt;/a&gt; היא תוכנה שמיועדת להציג בטאבים גירסאות שונות של IE. ניסיתי והתלהבתי.&lt;/p&gt;  &lt;p&gt;ממליץ עליה בחום למי שמפתח בצד לקוח הרבה. אמנם לא מושלם כמו Virtual PC כלשהו אבל יעיל כשמדובר בשגיאות טפשיות.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_3E248387.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_7BE19110.png" width="244" height="186" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;בצילום: &lt;a href="http://www.inn.co.il/" target="_blank"&gt;חדשות&lt;/a&gt; &lt;a href="http://www.inn.co.il" target="_blank"&gt;ערוץ 7&lt;/a&gt; ללא שקיפות PNG.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=8e6ac106-525d-45d0-84db-dccff3fae677" target="_blank"&gt;תוכנה דומה יש גם מבית Microsoft, עם קצת פחות&amp;#160; פיצ&amp;#39;רים&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=448651" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/JS/default.aspx">JS</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/CSS/default.aspx">CSS</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/HTML/default.aspx">HTML</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx">DEV</category></item><item><title>לוח שנה ותאריך עברי ב-.NET</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/18/HebrewCalendar_2D00_Hebrew_2D00_Dates_2D00_In_2D002E00_NET.aspx</link><pubDate>Wed, 18 Nov 2009 15:45:06 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:447546</guid><dc:creator>Moshe L</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=447546</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=447546</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/18/HebrewCalendar_2D00_Hebrew_2D00_Dates_2D00_In_2D002E00_NET.aspx#comments</comments><description>&lt;p&gt;מאז ומתמיד השתמשתי בתאריך עברי. השייכות שלו ללוח השנה שעל פיו אני חי (חגים וכו&amp;#39;) בגיל צעיר היא מובנת מאליה, ובהמשך - דברים שנהיים הרבה יותר פשוטים כשעובדים לפי &lt;a title="לוח שנה עברי, לועזי - ערוץ 7" href="http://www.inn.co.il/My/Calendar/"&gt;לוח שנה&lt;/a&gt; עברי, כמו שינויים בתפילה וברכת המזון. &lt;/p&gt;  &lt;p&gt;בתור מתכנת, נשאלתי לא אחת כיצד עושים שימוש בלוח העברי, ובדרך כלל עניתי מה שעניתי.    &lt;br /&gt;בהודעה הזו אנסה לפרט קצת יותר כיוון. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;HebrewCalendar&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;ב-.NET, החל מגירסא 1 קיימת המחלקה &lt;a href="http://msdn.microsoft.com/en-us/library/system.globalization.hebrewcalendar.aspx" rel="nofollow"&gt;System.Globalization.HebrewCalendar&lt;/a&gt;, המספקת לוח שנה עברי בדומה ללוחות נוספים מרחבי העולם, הממומשים במחלקות היורשות מ-&lt;a href="http://msdn.microsoft.com/en-us/library/system.globalization.calendar.aspx" rel="nofollow"&gt;System.Globalization.Calendar&lt;/a&gt;.     &lt;br /&gt;לכל הלוחות יש שיטות משותפות, בסגנון ה-GetX, כמו למשל GetDayOfMonth, GetMonth וכו&amp;#39;, וכולם עובדים עם DateTime הסטנדרטי של הסביבה. &lt;/p&gt;  &lt;p&gt;המרת תאריכים מעברי ולועזי ולהיפך: &lt;/p&gt;  &lt;pre&gt;Dim d as new DateTime(13,11,1987, new HebrewCalendar() &lt;/pre&gt;

&lt;p&gt;ב- d יהיה אובייקט DateTime סטנדרטי. &lt;/p&gt;

&lt;p&gt;d.ToString() יתן לנו 13/11/87, שזה התאריך הלועזי הרלוונטי. 
  &lt;br /&gt;כמובן שבמקרה העברי צריך להתחשב גם בשקיעה שיכולה להזיז את התאריך העברי יום קדימה. &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;הצגת תאריך עברי&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;Public Shared jewishCulture As System.Globalization.CultureInfo = System.Globalization.CultureInfo.CreateSpecificCulture(&amp;quot;he-IL&amp;quot;)
&lt;br /&gt;Public Shared Function ShortDate(ByVal dDate As Date) As String
&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; jewishCulture.DateTimeFormat.Calendar = HebCal
&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Return dDate.ToString(&amp;quot;dd MMMM&amp;quot;, jewishCulture)
End Function &lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;בדיוק כמו תאריך לועזי, רק עם לוח שנה מתאים ואחר. גם שאר האפשרויות של DateTime.ToString() תעבודנה פה&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;חישובי תאריך עברי&lt;/strong&gt; 

  &lt;br /&gt;

  &lt;br /&gt;פה אנחנו נתקלים בבעיה קשה, שלא מצאתי אותה מתועדת בשום מקום, וכנראה הגיע הזמן. &lt;/p&gt;

&lt;p&gt;בגוגל מצאתי למשל את המחלקה &lt;a href="http://csourcesearch.net/csharp/fidF4D09BA65F169C1C03F7B7F8D45620F9E7C1E34F.aspx?s=cdef%3asort" rel="nofollow"&gt;הזו&lt;/a&gt; שמסבירה את החישוב המדוייק, כנראה מפרוייקט mono, ובהמשך גם את &lt;a href="http://www.123aspx.com/Rotor/src/hebrewcalendar.cs.txt" rel="nofollow"&gt;קוד המקור של המחלקה המקורית של מיקרוסופט&lt;/a&gt;, שמשתמשת בטבלה כדי לזרז את החישובים.&lt;/p&gt;

&lt;p&gt;הבעיה עם כל המימושים האלה היא העובדה שהם נכונים מספרית אבל לא הלכתית.&amp;amp; עיבור השנים מוסיף עוד חודש בין השישי לשביעי (אדר ב&amp;#39;), אלא - שהקוד שמוסיף שנה במחלקה הזו, מוסיף אותה במספרים ולא מתחשב בנתון הזה, וכך אדר ב&amp;#39; נהיה ניסן בשנה רגילה במקום להיות אדר רגיל. בעיות נוספות יש גם בחישובים הרלוונטיים לחודש אלול בשנים בהן מס&amp;#39; החודשים הוא 13.&lt;/p&gt;

&lt;p&gt;אולי הגיע הזמן להרים את הכפפה ולפתח מחלקה שתירש מהמקורית ותתקן את העיוותים שלה (הקוד שאני כתבתי אז היה טלאי), בינתיים – חשוב לדעת שאלו המגבלות וכיצד חיים איתם. חוץ מזה – מדובר בכלי מצויין שהשימושים שלו רבים ומגוונים&lt;/p&gt;

&lt;p&gt;&lt;a title="לוח שנה" href="http://www.inn.co.il/My/Calendar/"&gt;לוח השנה של ערוץ 7&lt;/a&gt; – פותח לפני כשנתיים על בסיס המחלקה הזו ונוספות, וכולל יכולות מאוד מעניינות נוספות.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=447546" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ASP.net/default.aspx">ASP.net</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_EA05D005E805D905DA05_+_E205D105E805D905_/default.aspx">תאריך עברי</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx">DEV</category></item><item><title>דפים כמעט סטטיים זוחלים. למה ?</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/06/asp_2D00_pages_2D00_without_2D00_logic_2D00_slow.aspx</link><pubDate>Fri, 06 Nov 2009 19:47:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:432352</guid><dc:creator>Moshe L</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=432352</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=432352</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/06/asp_2D00_pages_2D00_without_2D00_logic_2D00_slow.aspx#comments</comments><description>&lt;p&gt;אחת התופעות שאני נתקל בה לפעמים אלו בעלי אתרים שמודעים לבעיות הביצועים של האתר שלהם, ולכן בדף הבית (או דפים מרכזיים) הם מבצעים אופטימיזציה ובודקים כל שלב בנפרד. מנהל של אתר אחד שראיתי אפילו בנה דף שמכיל רק Includeים לדפים (סטטים) אחרים אותם היה מעדכן לפי דרישה.&lt;/p&gt;  &lt;p&gt;אבל עדיין דף הבית שלו זחל, ואני נשאלתי – למה!&lt;/p&gt;  &lt;p&gt;התחברתי לשרת שלו והרצתי &lt;a href="http://blogs.microsoft.co.il/blogs/moshel/archive/2009/09/28/100-cpu-iis.aspx" target="_blank"&gt;DebugDiag&lt;/a&gt;, שאימת את ההשערה שלי. הסתבר כי הרבה מאוד בקשות שנתקעו למשך שניות אחדות, כלל לא הגיעו למנגנון של ASP ונתקעו הרבה קודם.&lt;/p&gt;  &lt;p&gt;אז למה?&lt;/p&gt;  &lt;p&gt;ל-ASP ול-ASP.net יש בתוך Application Pool בסך הכל 25 (ניתן לשינוי) Threadים בזמן נתון, כאשר כל אחד כזה מקבל דף, מעבד אותו ומשחרר. במידה ויש איטיות באתר ה-Threadים האלה מתמלאים מהר מאוד והבקשות הבאות פשוט מתפנות בהמתנה ל-Thread. בעצם, כאשר דף אחד או שניים זוחלים זו שיטה בטוחה לגרום לכל האתר לזחול ובהמשך להתקע.&lt;/p&gt;  &lt;p&gt;הפיתרון לבעיה הספציפית ההיא היה הפיכת חלק מהדפים לדפים סטטיים לגמרי, html, שמתעדכנים דרך ממשק הניהול של האתר. הללו מסופקים ישירות על ידי IIS, ללא צורך בתיווכים מתיווכים שונים, ולכן מגיעים ישר ללקוחות. כפועל יוצא – הלחץ על ה-Threadים יורד במעט מה שמקל באופן כללי על העומס בשרת.&lt;/p&gt;  &lt;p&gt;כצ&amp;#39;ופר, על הדרך, אנחנו מקבלים גם שיפור מאוד נחמד בביצועים, גם ברמת IIS וגם ברמת יתרונותיו של Cache.&lt;/p&gt;  &lt;p&gt;פיתוח מהנה.&lt;/p&gt;  &lt;p&gt;עוד באותו עניין:   &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/archive/2009/06/02/service-unavailable-timeout.aspx" target="_blank"&gt;איטיות בסביבת ייצור&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=432352" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Cache/default.aspx">Cache</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ASP.net/default.aspx">ASP.net</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D905E605D505E205D905DD05_/default.aspx">ביצועים</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ASP/default.aspx">ASP</category></item><item><title>צנזורה שאבד עליה הכלח</title><link>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/01/436396.aspx</link><pubDate>Sun, 01 Nov 2009 16:02:49 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:436396</guid><dc:creator>Moshe L</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/rsscomments.aspx?PostID=436396</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/moshel/commentapi.aspx?PostID=436396</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/moshel/archive/2009/11/01/436396.aspx#comments</comments><description>&lt;p&gt;כידוע לכולכם, לפני דקות קצרצרות &lt;a href="http://www.inn.co.il/News/News.aspx/195313"&gt;הותר לפרסום&lt;/a&gt; כי יעקב טייטל משבות רחל, עולה מארה&amp;quot;ב שנעלם מעל פני האדמה לפני כשבועיים נאשם על ידי השב&amp;quot;כ באי-אלו פשעים. בראשית השבוע שעבר &lt;a href="http://www.inn.co.il/News/News.aspx/195612"&gt;נחטפה אשתו באלימות&lt;/a&gt; מצומת תפוח שבשומרון בדרך להפגנה ודיון בבית המשפט בפתח תקווה. כתבה בנושא הוסרה מאתר ערוץ 7 ו-&amp;quot;וואלה&amp;quot;, אבל בגוגל אפשר היה בקלות למצוא את הכתבות המחוקות או מידע שפורסם ב-Twitter.&lt;/p&gt;  &lt;p&gt;במהלך השבועות האחרונים, מנהלת הצנזורה מלחמה מטופשת וחסרת תועלת להסרת פרסומים. כך למשל, הם היו מתקשרים מדי &lt;strong&gt;23:00-24:00&lt;/strong&gt; בלילה, כדי לדרוש למחוק מהפורומים של ערוץ 7 את השרשורים שעסקו בנידון ופורסמו לאורך היום. הכל נכתב ופורסם, אבל הצנזורה הטפשית חשבה שבאמת אפשר להסתיר משהו.&lt;/p&gt;  &lt;p&gt;בשיחות פנימיות גם כולנו ידענו לסמן את התאריך בו תותר הידיעה לפרסום, שכונה על ידי עיתונאי בכיר &amp;quot;חול המועד רבין&amp;quot;, בנסיון נואש לשפוך עוד קצת שמן על התבערה ההולכת ודועכת של פסטיבל ההסתה.&lt;/p&gt;  &lt;p&gt;אז עכשיו זה הותר לפרסום. נו שויין.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.inn.co.il/News/News.aspx/195313"&gt;תושב שבות רחל חשוד בביצוע פיגועים (חדשות ערוץ 7)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.inn.co.il/News/News.aspx/195612"&gt;הכתבה שנאסרה לפרסום לפני עשרה ימים (חדשות ערוץ 7)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=436396" width="1" height="1"&gt;</description></item></channel></rss>