PDA

View Full Version : مقاله: فشرده سازی صفحات و استفاده از کنترل های MSAjax



hadi000333
شنبه 23 آذر 1387, 07:45 صبح
این اولین مقاله ای هست که می نویسم پس ضعف ها و کاستی ها رو به بزرگواریتون ببخشید.

در این مقاله فرض بر این است که شما آشنا یی نسبتا خوبی به Asp.net و C# دارید.

مقدمه :
در این مقاله به فشرده سازی صفحات و استفاده از کنترل های MSAjax
می پردازم.
در این سایت یک ماژول برای کم کردن حجم صفحه معرفی شده ولی مشکلاتی داره که خواهم گفت. و روش های دیگه که معرفی میشه یا کارایی با اون پردازشی که انجام میدن نداره و یا چندان فرقی ندارن.

قسمت اول:
استفاده از کنترل های Ms Ajax فوق العاده هستند ولی حجم خیلی زیادی رو دارند. ولی نمیشه به خاطر این عیب ازشون صرفه نظر کرد.
.چرا؟
به هر حال شما مجبورید از آنها استفاده کنید!!
قسممت دوم :
استفاده از Compress صفحات برای سایت ها تو ایران یک اجباره!!!
ولی وقتی از این روش استفاده می کنی دیگه قادر به استفاده از کنترل های MS Ajax نیستید. چه بد!
پس باید یه کاری کرد.

خوب من از روشی که scriptResource ها رو ادغام می کنن استفاده نمیکنم .
چرا؟
چون قابلیت کش رو از مرور گر می گیرن. و پردازش زیادی انجام میدن .
راه حل:
تنها کاری که ما باید بکنیم اینه که تکنیک این کار رو تغییر بدیم.
چه طوری؟

روش پیاده سازی رو از Module به Page تغییر بده. همین !!!
خوب حالا کد :
یک کلاس به این شکل بسازید:


using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Xml;
using System.Xml.Xsl;
using System.Data.SqlClient;
using System.IO;
using System.Text;
using System.IO.Compression;
namespace hadi000333
{
public class MyUtility
{

public static bool IsGZipSupported()
{

string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];

if (!string.IsNullOrEmpty(AcceptEncoding) &&

AcceptEncoding.Contains("gzip") || AcceptEncoding.Contains("deflate"))

return true;

return false;

}

public static void GZipEncodePage()
{

if (IsGZipSupported())
{

HttpResponse Response = HttpContext.Current.Response;



string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];

if (AcceptEncoding.Contains("gzip"))
{

Response.Filter = new System.IO.Compression.GZipStream(Response.Filter,

System.IO.Compression.CompressionMode.Compress);

Response.AppendHeader("Content-Encoding", "gzip");

}

else
{

Response.Filter = new System.IO.Compression.DeflateStream(Response.Filte r,

System.IO.Compression.CompressionMode.Compress);

Response.AppendHeader("Content-Encoding", "deflate");

}

}

}

}
}

و در Page هاتون به این شکل استفاده کنین.

protected void Page_Load(object sender, EventArgs e)
{
hadi000333.MyUtility.GZipEncodePage();
}

توضیح:
IsGZipSupported : بررسی می کند آیا مرورگر از GZip پشتیبانی میکنه یا نه.
GZipEncodePage : وظیفه فشرده سازی به عهده این متد هست.

این روش خیلی مناسبه و همون کارایی رو داره یعنی تا 85%
مزایا :
1- کاملا با MsAjax کار میکنه .
2- می تونید در هر صفحه که نیاز دارید استفاده کنید.و در صفحه هایی که تصویر زیادی دارید استفاده نکنید.
ولی یه مشکل کوچیک : شما باید توی هر صفحه این کد رو بنویسید.
پس از Object Oreinted استفاده کنید تا دنیا زیبا تر بشه.
پس:

namespace System.Web.UI
{
public class BasePage : System.Web.UI.Page
{

protected override void OnLoad(EventArgs e)
{
hadi000333.MyUtility.GZipEncodePage();
base.OnLoad(e);
}

}
}
و در Page هاتون از کلاس بالا ارث بری کنید.


public partial class _Default : System.Web.UI.BasePage
{
protected void Page_Load(object sender, EventArgs e)
{

}

}

و از Compress کردن Page هاتون لذت ببرید.
موفق باشید.
منیع:
این روش رو Rick Strahl در وبلاگ خودش معرفی کرده.
http://west-wind.com/WebLog/posts/10294.aspx

jasadeghi
شنبه 14 دی 1387, 09:00 صبح
با تشکر از دوست خوبمون جناب هادی خان

اینم سرس vb برنامه




Imports System
Imports System.Data
Imports System.Configuration
Imports System.Linq
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Xml.Linq
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Data.SqlClient
Imports System.IO
Imports System.Text
Imports System.IO.Compression
Namespace hadi000333
Public Class MyUtility

Public Shared Function IsGZipSupported() As Boolean

Dim AcceptEncoding As String = HttpContext.Current.Request.Headers("Accept-Encoding")


If Not String.IsNullOrEmpty(AcceptEncoding) AndAlso AcceptEncoding.Contains("gzip") OrElse AcceptEncoding.Contains("deflate") Then

Return True
End If

Return False

End Function

Public Shared Sub GZipEncodePage()

If IsGZipSupported() Then

Dim Response As HttpResponse = HttpContext.Current.Response



Dim AcceptEncoding As String = HttpContext.Current.Request.Headers("Accept-Encoding")

If AcceptEncoding.Contains("gzip") Then


Response.Filter = New System.IO.Compression.GZipStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)

Response.AppendHeader("Content-Encoding", "gzip")

Else



Response.Filter = New System.IO.Compression.DeflateStream(Response.Filte r, System.IO.Compression.CompressionMode.Compress)

Response.AppendHeader("Content-Encoding", "deflate")

End If

End If

End Sub
End Class

End Namespace

mojniknam
پنج شنبه 03 بهمن 1387, 17:07 عصر
1--------------
من تاحالا از فشرده سازي استفاده نكردم.

در صفحه هایی که تصویر زیادی دارید استفاده نکنید.
مشكل فشرده سازي با تصاوير چيه؟
يه توضيحي در اين مورد بدين
2--------------
اين روش شما چقدر توي سرعت لود اوليه سايتي كه آجاكس استفاده شده تاثير داره؟