وبلاگ شخصي
 
به

وبلاگ شخصی حسین مرگانی

خوش آمدید
Welcome to

Hossein Margani's Weblog

راه حل مشکل دانلود صفحه ASP.NET به جای نمایش در مرورگر 19:15 31/05/1388

روی سایتی کار می کردم که بعد از آپلود سایت روی هاست متوجه شدم وقتی به یه آدرس سایت می رم به جای اینکه صفحه توی مرورگر نمایش داده بشه پنجره دانلود مرورگر نمایش داده میشه و می خواد محتویات کامل صفحه رو دانلود کنه. توی گوگل سرچ کردم تا ببینم مشکل از کجاست متوجه شدم بخاطر استفاده از Cache در صفحات ASP.NET هست.

 مشکل خیلی ساده بود. شما صفحه ای دارید که در بالای اون نوشتید:

 <%@ OutputCache Duration="25" VaryByParam="None" %>

این کار یه کار معمولیه که باعث میشه صفحه به مدت  25 ثانیه هم در حافظه نهان مرورگر کاربر (Client) و هم در حافظه نهان سرور(Server) و هم در سرورهای واسط بین سرور و مرورگر کاربر (Proxy Server) اصطلاحاً Cache شود و نیازی به بازیابی اطلاعات صفحه نیست. مشکل وقتی بوجود می آید که این صفحه زمانی که در سرورها کش می شود برای کدام مرورگر این کار انجام میشود. تصور کنید زمانی که قرار است این صفحه کش شود درخواست توسط مرورگر یک موبایل انجام شود. سرور اطلاعات صفحه را برای مرورگر یک موبایل کش می کند و تا 25 ثانیه بعد اگر مرورگری از نوع دیگر مثلاً PC درخواست همان صفحه را بکند سرور اطلاعات صفحه را بصورت کش شده به درخواست کننده ارسال می کند و از آنجائیکه مرورگر موبایل Content-Type درخواستی را بصورت text/vnd.wap.wml مشخص میکند و مرورگر دیگر هم به همین صورت اطلاعات را دریافت می کند بنابراین به دلیل ناشناخته بودن Content-Type برای مرورگر PC پنجره دانلود نمایش داده میشود و کل صفحه به صورت یک فایل دانلود می شود.

برای حل مشکل باید از صفت VaryByCustom از OutputCache استفاده کنیم. بدین صورت:

<%@ OutputCache Duration="25" VaryByParam="None" VaryByCustom="browser" %>

این کار باعث میشود که اطلاعات کش شده به تفکیک نوع مرورگر کش شود. همچنین browser برای دات نت شناخته شده است که اتوماتیک این کار انجام میشود. ولی این جمله از MSDN گفته شده و عملاً این کار انجام نمی شود. برای اطمینان از این کار باید در فایل Global.asax متدی رو override کنید. بدین صورت:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "browser")
    {
        return Request.Browser.Browser;
    }
}

این کار باعث می شود که صفحات به تفکیک مرورگر و دقیقاً نوع مرورگر مثلاً IE، یا Firefox کش شود. حتی برای اطمینان کامل می توانید نسخه مرورگر کاربر یعنی Request.Browser.MajorVersion یا Request.Browser.MinorVersion را هم دخالت دهید. بدین صورت:

return Request.Browser.Browser +
    Request.Browser.MajorVersion +
    Request.Browser.MinorVersion;

همین!

ابزاری برای فشرده سازی تصاویر 07:26 30/05/1388
چند تا برنامه پیدا کردم برای کم کردن حجم تصاویر PNG و JPG.
 

 برنامه مربوط به تصاویر PNG رو تست کردم. جالب بود. نحوه استفاده:

c:\>optipng image1.png
OptiPNG 0.5.5: Advanced PNG optimizer.
Copyright (C) 2001-2007 Cosmin Truta.
** Processing:
image1.png
175x31 8-bit RGB non-interlaced
The image is losslessly reduced to 8-bit grayscale
Input IDAT size = 2892 bytes
Input file size = 5665 bytes
Trying...
zc = 9 zm = 8 zs = 0 f = 0 IDAT size = 1196
zc = 9 zm = 8 zs = 1 f = 0 IDAT too big
zc = 1 zm = 8 zs = 2 f = 0 IDAT too big
zc = 9 zm = 8 zs = 3 f = 0 IDAT too big
zc = 9 zm = 8 zs = 0 f = 5 IDAT too big
zc = 9 zm = 8 zs = 1 f = 5 IDAT too big
zc = 1 zm = 8 zs = 2 f = 5 IDAT too big
zc = 9 zm = 8 zs = 3 f = 5 IDAT too big
Selecting parameters:
zc = 9 zm = 8 zs = 0 f = 0 IDAT size = 1196
Output IDAT size = 1196 bytes (1696 bytes decrease)
Output file size = 3969 bytes (1696 bytes = 29.94% decrease)
و همینطور:
C:\>advpng.exe -z image2.png
10004 3746 37% image2.png
10004 3746 37%
نکته ای که باید بگم اینه که تصویر رو فشرده می کنه و روی خود تصویر ذخیره می کنه. این برنامه ها بدون اینکه کیفیت تصویر رو تغییر بدهند تصاویر رو فشرده می کنن و مناسبه برای استفاده در زمان اجرا.
منبع: dotnetslackers.com
حلقه صفر بار در Visual Basic 07:35 27/05/1388

یکی از دوستان به یه مورد بر خورد. بد نیست اینجا بگم. توی Visual Basic حلقه زیر یه بار اجرا میشه:

For index = 0 to 0
    Console.WriteLine(index)
Next 

چرا؟

تگها: ,

Programming


Spread Firefox Affiliate Button


Software tracking