PDA

View Full Version : اصل مهم - فشرده سازی صفحات وب در ASP.NET 2.0



Behrouz_Rad
شنبه 06 آبان 1385, 20:24 عصر
توجه:
کلیه ی حقوق این مقاله متعلق به سایت www.barnamenevis.org می باشد.
استفاده از مطالب این مقاله منوط به ذکر نام منبع است.

فایل ضمیمه ی مقاله را از انتهای همین مقاله داونلود کنید.

در این مقاله فرض بر آن است که خواننده، آشنایی در حد متوسط با ASP.NET و برخی مفاهیم مقدماتی آن دارد.
کدهای این مقاله با زبان VB.NET ارائه شده اند.

در دنیای امروز، انتقال سریع اطلاعات یکی از ارکان اصلی توسعه ی رو به جلوی فناوری محسوب می شود. وب نیز از این قائده مستثنی نیست و تلاش در جهت دریافت پاسخ توسط کلاینت در حداقل زمان ممکن، مخصوصا در زمان استفاده از اینترنت ایرانی(!) کارایی قابل توجهی در افزایش کیفیت ارائه ی خدمات خواهد داشت.

همان طور که می دانید، در زمان ارسال درخواست از سمت کلاینت به سرور، تعدادی اطلاعات که به عنوان Header شناخته شده هستند نیز همراه با درخواست به سرور ارسال می شوند.
برای آگاهی از این Header ها می توانید خاصیت Trace دایرکتیو Page صفحه را به مقدار True تنظیم کنید. در این حالت، اطلاعاتی در مورد پردازش جاری در انتهای صفحه ی وب شما نمایش داده خواهد شد. اگر به قسمت Headers Collection دقت کنید، در جلوی عبارت "Accept-Encoding"، انواع فشرده سازی ساپورت شده توسط مرورگر شما نمایش داده خواهد شد.
معمولا دو مقدار "gzip" و "deflate" در این قسمت نمایش داده می شوند و این مشخص می کند که مرورگر شما کدام یک از انواع فشرده سازی را ساپورت می کند. از این اطلاعات می توان برای تشخیص نوع فشرده سازی مناسب در سمت سرور برای درخواستی خاص بهره جست.

تکمیلی:
فشرده سازی داده ها، یکی از امکاناتی است که در نسخه ی 1.1 پروتوکول Http قرار داده شده و هر مرورگری که از این پروتوکول استفاده می کند (که تمامی مرورگرها این کار را می کنند)، می تواند از این امکان نیز استفاده کند.
در IE این قابلیت به طور پیش فرض فعال است. منوی Tools، گزینه ی Internet Options، سر برگ Advanced، قسمت HTTP 1.1 Settings، گزینه ی Use HTTP 1.1


یکی از امکانات جدیدی که در ASP.NET 2.0 گنجانده شده، امکان فشرده سازی داده ها است.
نیم اسپیس جدید System.IO.Compression شامل دو کلاس GzipStream و DeflateStream است.
این دو کلاس، دو نوع مختلف از عملیات فشرده سازی را ساپورت می کنند.
در حقیقت با استفاده از این دو کلاس، تعداد بایت های ارسالی به کلاینت را کاهش می دهیم.
این کاهش حجم، به معنای واقعی کلمه خواهد بود!

از آنجا که فشرده سازی باید بر روی تمامی درخواست ها انجام پذیرد، باید بتوان تمامی درخواست های ارسالی را هندل کرد.
استفاده از HttpHandler و HttpModule ها بهترین گزینه بدین منظور است.
HttpModule ها کنترل بیشتری بر روی درخواست ها خواهند داشت؛ پس بهترین کار، ایجاد یک HttpModule است که بر روی تمامی درخواست ها کنترل داشته باشد.

ابتدا یک کلاس به پروژه ی خود اضافه کنید. نام کلاس را "HttpCompression" می گذاریم.
این کلاس را در یک نیم اسپیس، مثلا با نام "Behrouz.Compression" قرار دهید.
نیم اسپیس های Web، IO و Compression را به کلاس اضافه کنید.
از آنجا که این کلاس نقش یک Http Module را بازی می کند، باید اینترفیس "IHttpModule" را نیز بدین منظور به کار بگیریم:
کد توضیحات فوق:


Imports Microsoft.VisualBasic
Imports System.Web
Imports System.IO
Imports System.IO.Compression

Namespace Behrouz.Compression
Public Class HttpCompressionModule
Implements IHttpModule
End Class
End Namespace

اینترفیس IHttpModule، دو متد دارد. متد Dispose و متد Init
متد Init مشخص می کند که HttpModule باید در چه رویدادی از رویدادهای پردازش فراخوانی شود.
برای اینکه این رویداد را به HttpModule معرفی کنیم، متدی تعریف می کنیم و سپس با استفاده از دستور AddHandler، این متد را به روال مربوطه نسبت می دهیم.


Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
AddHandler context.BeginRequest, AddressOf Me.onZip
End Sub

آرگومان context که یکی از پارامترهای متد Init است، به برنامه ی جاری اشاره می کند.
روال BeginRequest بهترین مکان برای گرفتن درخواست هاست. به متد Init می گوییم که متدی با نام onZip تعریف خواهیم کرد که باید در روال BeginRequest فراخوانی شود.
قسمت اصلی کار در روال onZip خواهد بود.
در این روال، داده هایی را که باید به کلاینت ارسال شوند، قبل از ارسال، فشرده می کنیم.


Public Sub onZip(ByVal sender As Object, ByVal e As EventArgs)
Dim myApp As HttpApplication = CType(sender, HttpApplication)
Dim encodings As String = myApp.Request.Headers.Get("Accept-Encoding")
If encodings Is Nothing Then Return
Dim myStream As Stream = myApp.Response.Filter
encodings = encodings.ToLower()
If (encodings.Contains("gzip")) Then
myApp.Response.Filter = New GZipStream(myStream, CompressionMode.Compress)
myApp.Response.AddHeader("Content-Encoding", "gzip")
ElseIf encodings.Contains("deflate") Then
myApp.Response.Filter = New DeflateStream(myStream, CompressionMode.Compress)
myApp.Response.AddHeader("Content-Encoding", "deflate")
End If
End Sub

sender، مرجعی است که قصد فشرده سازی را دارد و این مرجع، برنامه ی جاری است. به آن یک ارجا پیدا می کنیم.
مقدار هدر "Accept-Encoding" در متغیر encodings قرار می گیرد. در صورتی که این مقدار وجود نداشته باشد، مرورگر به هر دلیلی فشرده سازی داده ها را ساپورت نخواهد کرد. در این صورت، برنامه با دستور Return به کار خود پایان خواهد داد.
متد Filter کلاس Response، فیلتری را به داده هایی که قرار است به سمت کلاینت ارسال شوند اعمال می کند. این داده ها به شکل Stream خواهند بود.
در ابتدا باید نوع فشرده سازی ای که توسط مرورگر ساپورت می شود را تشخیص دهیم. این کار با متد Contains متغیر encodings امکان پذیر است. در ابتدا وجود عبارت gzip بررسی می شود و در صورتی که این مقدار جز مقادیر هدر بود، نوع فشرده سازی Gzip به آن اعمال می شود و مقدار هدر "Content-Encoding" به "gzip" تنظیم می شود. این مقدار برای آگاهی از نوع فشرده سازی است که بر روی داده های دریافتی اعمال می شود.
در صورتی که فشرده سازی gzip توسط مرورگر ساپورت نشود، وجود مقدار "deflate" بررسی می شود و این نوع فشرده سازی به داده ها اعمال می شود.

توجه:
فشرده سازی Gzip و Deflate تفاوتی در میزان کاهش حجم داده ها ندارند. جزئیات فشرده سازی Gzip در RFC 1952 و فشرده سازی Deflate در RFC 1951 شرح داده شده است. در این مراجع شرح داده شده است که این نوع فشرده سازی ها از ترکیبی از الگوریتم های "LZ77" و "هافمن" استفاده می کنند و حداکثر میزان فشرده سازی آنها برای داده هایی با حداکثر حجم "چهار گیگابایت" است.
فرمت Gzip یک استاندارد فشرده سازی Open Source و جزء فرمت های متداول در سیستم عامل هایی همچون لینوکس هست.

خسته نباشید! تنها کار باقیمانده، تبدیل کلاس به فایل DLL است.
با استفاده از کامپایلر VB.NET (فایل vbc.exe) و یا کامپایلر C#.NET (فایل csc.exe) می توانید این کار را انجام دهید.
فایل های فوق در مسیر زیر وجود دارند:


drive:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

با استفاده از خط فرمان DOS فایل را کامپایل می کنیم.
از منوی Start ویندوز، گزینه ی Run را انتخاب کنید. عبارت "cmd" را وارد کنید.
با دستور cd به مسیر فوق بروید و سپس عبارت زیر را وارد کنید:


vbc /t:library /r:System.dll,System.Web.dll D:\inetpub\wwwroot\myApp\App_Code\HttpCompression. vb

مسیر فایل HttpCompression.vb را بر مبنای سیستم خود تنظیم کنید.
پس از اجرای دستور فوق، فایل DLL حاصل در پوشه ی App_Code قرار خواهد گرفت.
حال پوشه ای با نام "bin" ایجاد کنید و DLL فوق را به آن انتقال دهید.
برای شناساندن این HttpModule به برنامه، باید آن را در فایل Web.Config تعریف کرد.
پس از عبارت <system.web> دستورات زیر را بنویسید:


<httpModules>
<add name="HttpCompressionModule"
type="Behrouz.Compression.HttpCompressionModule, HttpCompressionModule"/>
</httpModules>


بهترین راه برای دیدن نتیجه ی کار، استفاده از مرورگر Firefox است!
پس از اجرای برنامه در Firefox، از منوی Tools گزینه ی Page Info را انتخاب کنید.
به عنوان مثال، من صفحه ای رو در هر دو حالت نرمال و فشرده مقایسه کردم. نتیجه واقعا شگفت انگیز بود!
به دو عکس زیر دقت کنید:


http://i14.tinypic.com/2cckv15.gif

http://i13.tinypic.com/2h3aq01.gif

همان طور که ملاحظه می کنید، حجم خروجی صفحه پس از فشرده سازی، تقریبا یک هشتم حجم صفحه در حالت نرمال است!

فشرده سازی را به عنوان یک اصل ثابت در تمامی برنامه های خود به کار ببرید.

موفق باشید.

hanif_x90
پنج شنبه 02 آذر 1385, 17:59 عصر
چرا در IE کار نمی کند.

Behrouz_Rad
پنج شنبه 02 آذر 1385, 21:57 عصر
مشکل از خودته!

rtech
سه شنبه 19 دی 1385, 19:18 عصر
برای من این ارور رو میده :

Could not load file or assembly 'HttpCompressionModule' or one of its dependencies. The system cannot find the file specified

از این خط :

type="Behrouz.Compression.HttpCompressionModule, HttpCompressionModule"/>

من تمام کارهایی رو که گفتید انجام دادم

Behrouz_Rad
چهارشنبه 20 دی 1385, 10:49 صبح
خطای فوق نشان میده که DLL پیدا نشده!
DLL ایجاد شده باید در پوشه ی Bin قرار داده بشه.

موفق باشی.

rtech
چهارشنبه 20 دی 1385, 11:01 صبح
مشکل حل شد من عبارت Onenter در فایلی که آپلود کرده بودید رو با Onzip عوض کردم مشکل حل شد .

یاسر مددیان
چهارشنبه 20 دی 1385, 15:37 عصر
آقای راد اگه مشکل لود نشدن عکسها هم حل بشه عالی می شه. من که نتونستم کاری بکنم اگه میشه شما کمک کنید.



با تشکر

rtech
پنج شنبه 21 دی 1385, 08:43 صبح
آقای راد اگه مشکل لود نشدن عکسها هم حل بشه عالی می شه. من که نتونستم کاری بکنم اگه میشه شما کمک کنید.



با تشکر

وقتی که سایت رو آپلود کنی این مشکل هم حل میشه منم این مشکل رو داشتم ولی وقتی سایت رو پابلیش و آپلود کردم مشکل حل شد

anubis_ir
چهارشنبه 04 بهمن 1385, 15:41 عصر
مقاله جالبی در این باره
Compression support in ASP.NET 2.0
http://www.microsoft.com/belux/msdn/nl/community/columns/desmet/compression.mspx

Navid7h
پنج شنبه 05 بهمن 1385, 16:21 عصر
آقای راد اگه مشکل لود نشدن عکسها هم حل بشه عالی می شه. من که نتونستم کاری بکنم اگه میشه شما کمک کنید.



با تشکر

سایت رو IIS قرار بده. از cassini استفاده نکن !
من این مشکل رو داشتم اما وقتی که روی IIS ؛ Publish کردم بر طرف شد !

مرسی آقای راد

bardia goharbin
پنج شنبه 05 بهمن 1385, 18:55 عصر
آقای راد من در تبدیل به Dll با csc با مشکل مواجه هستم ولی با vbc مشکلی نیست
دستوری که اجرا میکنم

csc /t:library /r:System.dll,System.Web.dll c:\Temp\HttpCompressionModule.vb
و خطایی که میده

c:\Temp\HttpCompressionModule.vb(1,1): error CS0116: A namespace does not
directly contain members such as fields or methods

Behrouz_Rad
پنج شنبه 05 بهمن 1385, 20:21 عصر
چون داری یک فایل VB رو با کامپایلر #C کامپایل می کنی!

یاسر مددیان
جمعه 27 بهمن 1385, 23:20 عصر
ولی اون مشکلی که من گفتم هنوز وجود داره وقتی این و فراخونی می کنیم عکسها یه موقع لود میشن یه موقع لود نمیشن ( عکسهای تو سایت ) ؟؟؟؟!!!!!

آقای راد واسه اینم یه کاری کن ( لطفاً). اگه این بشه این کامپوننت فوق العاده ای میشه .

Behrouz_Rad
جمعه 27 بهمن 1385, 23:24 عصر
آیا از Forms Authentication استفاده می کنی؟

یاسر مددیان
جمعه 27 بهمن 1385, 23:28 عصر
آره ، ولی همون اول که صفحه اول سایت میاد بالا این مشکل وجود داره !

Behrouz_Rad
جمعه 27 بهمن 1385, 23:30 عصر
بسیار خوب.
Forms Authentication رو کاملا در Web.Config غیر فعال کن و نتیجه رو بگو.

یاسر مددیان
جمعه 27 بهمن 1385, 23:33 عصر
چشم .
اگه اکانتم اجازه نداد فردا جواب رو میذارم .

بازم ممنون که کمک می کنید .

lollypop
دوشنبه 30 بهمن 1385, 19:25 عصر
سلام
من dll رو ساختم و در فولدر bin وب سایت هم گذاشتم ولی موقع اجرا پیغام میده که نمیتونه ماژول من رو پیدا کنه. اگه تو web.config آخرین عبارت (اسم کلاس) رو با اسم dll یا namespace عوض کنم اجرا میشه ولی هیچ فشرده سازی انجام نمیده. موضوع چیه؟

manager
دوشنبه 07 اسفند 1385, 15:56 عصر
من یه مشکل عجیب پیدا کردم، یه ماژول Compressor نوشتم که تقریبا شبیه همین ماژوله ولی مشکل اینجاست که از کدهای جاوا اسکریپت دات نت خطا می گیره !!!

فعلا فشرده سازی رو disable کردم تا یه راه حل براش پیدا کنم

manager
دوشنبه 07 اسفند 1385, 18:49 عصر
ماژول معرفی شده در این بخش و همچنین مقاله معرفی شده در صفحه قبل دارای یک مشکل بزرگ هست و اون هم اینکه این ماژول هرچیزی را علاوه بر صفحات aspx فشرده می کند که این خود باعث بروز مشکلات می شود که عملا استفاده از آن را غیر ممکن می سازد. البته این مشکل با تغییر کوچکی حل می شود. فقط کافیست صفحات مورد نیاز خود را فشرده کنید. مثلا من فقط نیاز به فشرده سازی صفحات aspx,htm و html داشتم که به تغییر کوچکی این مهم حل شد :



void Zip(object sender, EventArgs e)
{
HttpResponse resp = ((HttpApplication)sender).Response;
HttpRequest req = ((HttpApplication)sender).Request;

string absolutePath = req.Url.AbsolutePath;
string ext = absolutePath.Substring(absolutePath.LastIndexOf('. ') + 1);
if (!String.IsNullOrEmpty(ext))
{
ext = ext.ToLower();
if (ext.Equals("aspx") || ext.Contains("htm"))
{
string encoding = req.Headers.Get("Accept-Encoding");
if (!String.IsNullOrEmpty(encoding))
{
encoding = encoding.ToLower();
if (encoding.Contains("gzip"))
{
resp.Filter = new GZipStream(resp.Filter, CompressionMode.Compress);
resp.AddHeader("Content-Encoding", "gzip");
}
else
if (encoding.Contains("deflate"))
{
resp.Filter = new DeflateStream(resp.Filter, CompressionMode.Compress);
resp.AddHeader("Content-Encoding", "deflate");
}
}
}
}
}

Behrouz_Rad
دوشنبه 07 اسفند 1385, 21:23 عصر
ماژول معرفی شده در این بخش و همچنین مقاله معرفی شده در صفحه قبل دارای یک مشکل بزرگ هست و اون هم اینکه این ماژول هرچیزی را علاوه بر صفحات aspx فشرده می کند که این خود باعث بروز مشکلات می شود
کدی که نوشتی عملا کار خاصی انجام نمیده!
این مشکلی هست که در حال حاضر تنها برای WebResource.axd اتفاق می افته!

صورت مسئله اینه:

ماژولر WebResource.axd با قابلیت جدید فشرده سازی در ASP.NET 2.0 ناسازگار است.
در نتیجه، تو نمی تونی کاری کنی که این ماژولر که برخی کنترل ها و متدها، منابع خودشون رو از اون دریافت میکنند، در کدهای صفحه ظاهر نشه؛ در نتیجه مشکل پابرجاست.

اما....
تا اینجا متوجه شدی که ماژولر WebResource.axd ناگزیر باید وجود داشته باشه ولی اگر راهی وجود داشته باشه که به ماژول فشرده سازی گفته بشه فایل خاصی رو از منابع پردازشی خودت مستثنی کن، مشکل برطرف میشه.
خوشبختانه راه حل منطقی و جالبی در دات نت 2.0 بدین منظور قرار داده شده که می تونه این مشکل رو برطرف کنه.
با استفاده از المنت <ExcludedPaths> در Web.Config و ذکر WebResource.axd در این قسمت، به ماژولر فشرده سازی میگی که فایلی با چنین نامی رو از لیست منابعی که فشرده می کنی حذف کن.

به همین سادگی...

البته اگر اشتباه نکنم Hotfix ای برای حل این مشکل عرضه شده...

موفق باشید.

manager
پنج شنبه 10 اسفند 1385, 10:09 صبح
کدی که نوشتی عملا کار خاصی انجام نمیده! نه آقای راد، مشکل رو حل می کنه و فقط فایل های مورد نظر رو فشرده می کنه من عملا امتحان کردم و جواب داده !!! جالبه بدونید که علاوه بر WebResource.axd ها HttpHandlerها و فایل های ashx نیز از این قاعده مستثنا نبودند و همین مشکل را داشتند که با این روش ساده حل شدند.

Behrouz_Rad
پنج شنبه 10 اسفند 1385, 10:57 صبح
این نکته رو هم اضافه کنم که فایل هایی رو که فکر می کنید فشرده سازی در کم کردن حجم اونها تاثیر چندانی نداره از لیست منابع پردازشی ماژولر حذف کنید تا در منابع سرور و زمان پاسخگویی صرفه جویی بشه.
به عنوان مثال برای مستثنی کردن تمامی فایل های JPEG از فشرده سازی:


<ExcludedMimeTypes>
<add mime="image/jpeg"/>
</ExcludedMimeTypes>

موفق باشید.

PrinceDotNet
پنج شنبه 24 اسفند 1385, 14:12 عصر
میشه بگید تگهای <ExcludedPaths> و <ExcludedMimeTypes> رو دقیقا در کجای web.config باید قرار بدم ؟

PrinceDotNet
جمعه 25 اسفند 1385, 01:29 صبح
بابا کسی نیست جواب ما رو بده ؟
این دو تا تگ رو دقیقا باید کجای Web.Config قرار داد ؟

hamed_bostan
جمعه 25 اسفند 1385, 02:17 صبح
به من این error رو میده :





Configuration Error

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Could not load file or assembly 'HttpCompressionModule' or one of its dependencies. The system cannot find the file specified. (D:\Programming\company\InfoWebsite\InfoWebSite\we b.config line 10)

Source Error:

Line 8: <httpModules>
Line 9: <add name="HttpCompressionModule"
Line 10: type="Bostan.Compression.HttpCompressionModule, HttpCompressionModule"/>
Line 11: </httpModules>
Line 12: <compilation debug="true" strict="false" explicit="true">
Source File: D:\Programming\company\InfoWebsite\InfoWebSite\web .config Line: 10






فایل dll هم داخل شاخه bin هست و ئاخل web.config هم که همونطور که توی خطا می بینین tag رو اضافه کردم.

hamed_bostan
جمعه 25 اسفند 1385, 02:37 صبح
سلام
من dll رو ساختم و در فولدر bin وب سایت هم گذاشتم ولی موقع اجرا پیغام میده که نمیتونه ماژول من رو پیدا کنه. اگه تو web.config آخرین عبارت (اسم کلاس) رو با اسم dll یا namespace عوض کنم اجرا میشه ولی هیچ فشرده سازی انجام نمیده. موضوع چیه؟


منهم به این مشکل برخوردم اگه ممکنه کمک کنید.

manager
جمعه 25 اسفند 1385, 08:05 صبح
فرمت add در بخش httpModules باید به شکل زیر باشه :


<add name="ModuleName"
type=".NET Class, Assembly"/>
و به عنوان نمونه :



<?xml version="1.0"?>
<configuration >
<configSections>
<system.web>
<httpModules>
<add name="AspCompression"
type="Farahy.Compression.AspxCompression, AspxCompression"/>
</httpModules>
...



اگر ماژول شما ماژول همین بخش باشه باید کار کنه...

manager
جمعه 25 اسفند 1385, 08:35 صبح
میشه بگید تگهای <ExcludedPaths> و <ExcludedMimeTypes> رو دقیقا در کجای web.config باید قرار بدم ؟

منهم به این مشکل برخوردم اگه ممکنه کمک کنید.
در مورد تگ های ExcludedPathes و ExcludedMimeTypes باید بگم این تگ های از تگ های استاندارد دات نیستند و می بایست توسط شما پیاده سازی بشن، البته پیاده سازی این تگها کاری نداره و آسونه و اگر یاد بگیرید چه طوری تگ تنظیماتی ایجاد کنید فوق العاده برای شما مفید خواهد بود. من یک نمونه آماده پیدا کردم و براتون گذاشتم، خواستید می تونید دانلود کنید و لذت ببرید.
http://www.codeproject.com/aspnet/HttpCompress.asp
اگر خیلی وقت کم دارید و می خواین هرچه سریع تر کارتون راه بیافته می تونید از همون روشی که من معرفی کردم و کدش رو هم گذاشتم استفاده کنید، اون هم همین کار رو می کنه.

hamed_bostan
جمعه 25 اسفند 1385, 11:34 صبح
فرمت add در بخش httpModules باید به شکل زیر باشه :


<add name="ModuleName"
type=".NET Class, Assembly"/>
و به عنوان نمونه :



اگر ماژول شما ماژول همین بخش باشه باید کار کنه...

به خدا من عین همین نوشتم :



<httpModules>
<add name="HttpCompressionModule"
type="Behrouz.Compression.HttpCompressionModule, HttpCompressionModule"/>
</httpModules>


کمکککککککککککککککک

Behrouz_Rad
جمعه 25 اسفند 1385, 11:56 صبح
نام روال OnEnter رو به OnZip تغییر بده.

manager
جمعه 25 اسفند 1385, 11:59 صبح
شما از کجا می فهمید که ماژولتون اجرا نمی شه ؟ سورس ماژول را در این بخش قرار بدین تا بررسی کنیم. به هر حال این کاری هست که ما انجام دادیم و کار کرده، احتمالا شما در جائی قصور کرده اید...

hamed_bostan
جمعه 25 اسفند 1385, 13:13 عصر
نام روال OnEnter رو به OnZip تغییر بده.


من دقیقا همین کار رو کردم .حتی رو local هم جواب نمیده و error ای که گفتم رو میده . کم پله پله همراه اموزشی که داده بودین تو پست اول قدم بهقدم اومدم جلو :




Imports Microsoft.VisualBasic
Imports System.Web
Imports System.IO
Imports System.IO.Compression

Namespace Behrouz.Compression
Public Class HttpCompressionModule
Implements IHttpModule

Public Sub Dispose() Implements System.Web.IHttpModule.Dispose

End Sub

Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
AddHandler context.BeginRequest, AddressOf Me.OnZip
End Sub

Public Sub OnZip(ByVal sender As Object, ByVal e As EventArgs)
Dim app As HttpApplication = CType(sender, HttpApplication)
Dim encodings As String = app.Request.Headers.Get("Accept-Encoding")
If encodings Is Nothing Then Return
Dim baseStream As Stream = app.Response.Filter
encodings = encodings.ToLower()
If (encodings.Contains("gzip")) Then
app.Response.Filter = New GZipStream(baseStream, CompressionMode.Compress)
app.Response.AddHeader("Content-Encoding", "gzip")
ElseIf encodings.Contains("deflate") Then
app.Response.Filter = New DeflateStream(baseStream, CompressionMode.Compress)
app.Response.AddHeader("Content-Encoding", "deflate")
End If
End Sub
End Class
End Namespace



بعد این رو اجرا کردم:




vbc /t:library /r:System.dll,System.Web.dll D:\inetpub\wwwroot\myApp\App_Code\HttpCompression. vb



با ادرس فایل خودم و dll تولید شد . بعد هم تو web.config نوشتم :




<system.web>
<httpModules>
<add name="HttpCompressionModule"
type="Behrouz.Compression.HttpCompressionModule, HttpCompressionModule"/>
</httpModules>
<compilation debug="true" strict="false" explicit="true">
<assemblies>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies></compilation>
<pages>
...
...


جای دیگه که کاری نباید می کردم ؟؟؟ dll هم توی bin کپی کردم

مطلب خیلی مهم و مفید و به درد بخوریه و نمی خوام از دستش بدم . ممنون می شم راهنماییم کنین

manager
جمعه 25 اسفند 1385, 13:26 عصر
اسم فایل dll شما HttpCompression یا HttpCompressionModule ؟
همون طور که خودتون هم می دونید مشکل از پیدا کردن فایل و لود کردن اسمبلی هست و کدها مشکلی نداره !!

ali_kolahdoozan
جمعه 25 اسفند 1385, 13:38 عصر
اصول فشرده سازی رو آقای راد گزاشتن . دستشون هم درد نکنه اما تنها منبع قابل مراجعه در جهان که نیست . توی کتابها هست . صد جای دیگه هم هست . قسمتی رو خود استفاده کننده ببره جلو و همین رو با دانش خودش بیامیزد . نه اینکه همه منتظر ایشان هستید و یکجورهایی یک عده یک حالت طلبکاری پیدا کردند که درست نیست

hamed_bostan
جمعه 25 اسفند 1385, 17:45 عصر
اصول فشرده سازی رو آقای راد گزاشتن . دستشون هم درد نکنه اما تنها منبع قابل مراجعه در جهان که نیست . توی کتابها هست . صد جای دیگه هم هست . قسمتی رو خود استفاده کننده ببره جلو و همین رو با دانش خودش بیامیزد . نه اینکه همه منتظر ایشان هستید و یکجورهایی یک عده یک حالت طلبکاری پیدا کردند که درست نیست


من فکر نمی کنم جایی طلبکاری کرده باشم ؟!!!
ضمنا بنده بار اولمه با آین نحوه dll استفاده کردن و با httphandler ها کار می کنم . توی اینترنت هم search کردم اما اگه به کد نگاهی بندازید می بینید مشکل از پیدا نکردن فایله و احتمالا یه جایی یه اشتباهی چیزی کردم . کمک هم نخوایم چشم

بهروز جان به هر حال ممنون از مقاله ات و توجهت .
یا حق

PrinceDotNet
سه شنبه 29 اسفند 1385, 01:15 صبح
با این روش <ExcludedPaths> مشکل که دقیقا فایل WebRecource هستش حل میشه.ولی وقتی روی وب امتحان می کنم باز همون مشکلات قبلی باقی می مونه.
مشکل کجا می تونه باشه ؟

hamed_bostan
سه شنبه 29 اسفند 1385, 04:13 صبح
شاید اینها کمک کنه.

iman_22a
سه شنبه 29 اسفند 1385, 12:50 عصر
سلام دوستان
از آقای راد برای مقاله ارزشمندشون تشکر می کنم .
من طبق تاپیک پیش رفتم و تمامی توصیه های دوستان رو هم خوندم و توی نمونه پروژم بکار بردم و در نهایت به اونجایی رسیدم که توی FireFox تفاوت بین حجم صفحه در حالت با Compression و در حالت بدون Compression خیلی چشمگیره ولی یک سری مشکلات هست ، در نمایش صفحه با Firefox تصاویر بخوبی نمایش داده می شوند ولی اشکالاتی در کنترل های Navigator و Treeview ایجاد می شود .
در Ie6 که تست کردم Treeview مشکلی ندارد ولی کنترل Rotator از ‍ComponentArt اصلا نمایش داده نمی شود و پایین صفحه در Statusbar از صفحه ارور می گیرد که مربوط به همان Rotator است ولی تفاوتی از لحاظ حجمی بین دو حالت وجود ندارد.
از پست جناب Manager هم استفاده کردم ولی همانطور که جناب راد فرمودند عملا کاری انجام نمی داد چون اصلا جلوی Compression را می گرفت .
از پست حامد بوستان عزیز هم خواستم استفاده کنم و برام مشکل بود چون یخورده پیچیده بود و چون به زبان سی شارپم بود نتونستم چیز زیادی ازش بفهمم .

اگر ممکنه در این موارد بحث کنید ... ممنون می شوم

manager
سه شنبه 29 اسفند 1385, 14:19 عصر
از پست جناب Manager هم استفاده کردم ولی همانطور که جناب راد فرمودند عملا کاری انجام نمی داد چون اصلا جلوی Compression را می گرفت .دقیقا اصلا برای همین ایجاد شد که جلوی Compression فایل های ناخواسته گرفته بشه. من دیگه با نوشته شما به شک افتادم نکنه اشتباه کرده باشم، ولی دیدم که dll که تهیه کردم به خوبی کار می کنه و حجم صفحات را چیزی در حدود 80% کاهش می ده. من مجددا dll رو آپلود می کنم، مطمئن هستم که مشکلتون حل می شه.

دانلود (http://mfarahy.persiangig.com/Components/AspxCompression.rar)

iman_22a
سه شنبه 29 اسفند 1385, 14:47 عصر
ممنون تست می کنم ، جوابشو بهتون می دم

iman_22a
سه شنبه 29 اسفند 1385, 15:04 عصر
جناب Manager مرسی ، ممنون
هیچکدوماز مشکلاتی که قبلا گفتم الان به چشم نمی خوره :متعجب:
حجم صفحه در Firefox بدون Comp. برابر 44.5 kb بود که الان 8 Kb :کف:
البته فکر کنم IE حجم رو درست نمی زنه چون هیچ تغییری در دوحالت نشون نمی ده ، بیخیال
دستتون درد نکنه ، عالی بود
:خجالت:

flashswf
پنج شنبه 30 فروردین 1386, 17:50 عصر
با سلام
دوستان عزیزی که مشکل کامپایل فایل و همین طور اجرا رو داشتن یا اینکه نمی خوان یک dll مجزا به پروژه شون اضافه کنن می تونن خیلی ساده بعد از اضافه کردن کلاس به پروژه شون در Web.Config به جای کد قبل این کد رو قرار بدن



<httpModules>
<add name="HttpCompressionModule" type="Behrouz.Compression.HttpCompressionModule"/>
</httpModules>


به همین سادگی دیگه نیازی به کامپایل فایل هم نیست

در مورد فایل های عکس و جاوا اسکریپت اگه اونها رو Compress کنید بروزر نمی تونه اونها رو باز کنه در نتیجه خیلی از کامپونت های دات نت که با جاوا اسکریپت کار نمی کنه
روش آقای manager برای حل این مشکل به نظر من خیلی خوبه

موفق باشید

jasadeghi
پنج شنبه 13 اردیبهشت 1386, 10:24 صبح
سلام آقا بهروز
برنامه خیلی جالبی بود و من در تمام پروژهام اون رو گذاشتم که خیلی هم تاثیر گذار بود.
ولی یک اشکال بزرگ برای من به وجود اومد و اون هم اینکه دیگه ولیدشن های من تو این پروژها غیر فعال میشن.
اگر راهی داره تا این اشکال هم برطرف بشه ممنون میشم .
در ضمن این رو هم بگم که من تا دستور




<httpModules>
<addname="HttpCompressionModule"
type="Behrouz.Compression.HttpCompressionModule, HttpCompressionModule"/>
</httpModules>


رو از داخل webconfig بر میدارم validation ها هم درست کار می کنن.

باز هم تشکر بابت آموزش جالبتون

manager
پنج شنبه 13 اردیبهشت 1386, 21:40 عصر
سلام آقا بهروز
برنامه خیلی جالبی بود و من در تمام پروژهام اون رو گذاشتم که خیلی هم تاثیر گذار بود.
ولی یک اشکال بزرگ برای من به وجود اومد و اون هم اینکه دیگه ولیدشن های من تو این پروژها غیر فعال میشن.
اگر راهی داره تا این اشکال هم برطرف بشه ممنون میشم .
در ضمن این رو هم بگم که من تا دستور




<httpModules>
<addname="HttpCompressionModule"
type="Behrouz.Compression.HttpCompressionModule, HttpCompressionModule"/>
</httpModules>

رو از داخل webconfig بر میدارم validation ها هم درست کار می کنن.

باز هم تشکر بابت آموزش جالبتون
با دقت بیشتری پست ها رو دنبال کنید.

mahdi_negahi
جمعه 04 خرداد 1386, 09:25 صبح
آقا منم از ajax استفاده میکنم و از updatePanle وقتی صفحه update میشه به من خطای Response.Wrie میگیره وقتی zip حذف میکنم درست میشه

rtech
یک شنبه 13 خرداد 1386, 23:01 عصر
چند روز پیش مقاله ای دریافت کردم در ضمینه فشرده سازی CSS ، Javascript ,axd و فایلهای دیگر که میتونه در کنار این فشرده سازی بر کل سایت تاثیر بسیار مثبتی بزاره که به زودی این مقاله رو برای شما در اینجا قرار میدم

tc1000
دوشنبه 14 خرداد 1386, 13:59 عصر
با سلام
آیا فشرده سازی در IE انجام نمی شود که ظرفیت فایل را آنطور نشان میدهد و یا فشرده سازی می کند اون ضاهری اونطوریه؟

mahdi_negahi
سه شنبه 15 خرداد 1386, 18:40 عصر
سلام دوستان یک نگاهی به این مقاله بندازید خیلی جالبه
http://www.codeproject.com/aspnet/httpcompression.asp

elvis_programmer
شنبه 09 تیر 1386, 17:16 عصر
خوب همونطور که جناب راد گفتن نتیجه عملکرد این فشرده سازی جالب هست و کمی هم شگفت انگیز اما چیز جالبتر برای من این بود که هر چی CSS در سایت و برنامه استفاده میشد دیگر کار نمیکرد و بعد از برداشتن این تکنیک دوباره CSS ها اعمال میشدند.کسی تا بحال به این نکته توجه کرده یا نه ؟ ممکنه این قضیه فقط برای من اتفاق افتاده باشه لطفا دوستان یک بررسی بفرمایند همینجا اعلام کنند. :متفکر:

Behrouz_Rad
شنبه 09 تیر 1386, 17:26 عصر
شما کل تاپیک رو بررسی کن تا به جوابت برسی!

elvis_programmer
شنبه 09 تیر 1386, 18:16 عصر
والا جناب راد من نددیم تا بحال کسی به این مشکل بر بخوره منظور شما دقیقا چی هست ؟؟؟

elvis_programmer
شنبه 09 تیر 1386, 18:30 عصر
اقا شما از کجا توی IE نگاه میکنید که میگید حجمش کم نشده ؟؟؟

RezaKia
دوشنبه 01 مرداد 1386, 21:35 عصر
سلام،

من مدت زیادی هست دارم با برنامه HttpCompress کار میکنم. برنامه جالب خوبی است اگر:

1. هیچ کدی تو پروژه نداشته باشی که State صفحه رو عوض کنه.
2. هیچ کدوم از کدهای پروژه IHttpModule و IHttpHandler رو تغییر ندن.
3. هیچ نوع Page Content Proxy نداشته باشی.
4. به هیچ وجه تقاضای ارتباط دوسویه یا Streaming نداشته باشی.

اگر این ها در پروژه شما نباشد، که قضیه حله. نسخه اصلی این رو از سایت سازنده اون بگیرید رایگان هم هست.

دو تا دایرکتوری داره، یکی VB و دیگری هم #C. راحت با اضافه کردن دوخط کد به Web.Config و اضافه کردن Dll به Bin تمام کارها بعهده خودشه. :لبخندساده:

اما اگر تو پروژه از این تکنیکهای لازم و حرفه ای استفاده کرده باشید، مجبورید مثل من تمام این کارها رو مدیریت کنید.


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

لذا بهتر است این گونه تکنیک ها را با احتیاط و نه برای هر پروژه های استفاده کنید.


قطعاً لازم است از حرکت زیبای آقای راد برای شروع این بحث تشکر کنم.


موفق باشید.

rtech
سه شنبه 02 مرداد 1386, 14:05 عصر
سلام،

من مدت زیادی هست دارم با برنامه HttpCompress کار میکنم. برنامه جالب خوبی است اگر:

1. هیچ کدی تو پروژه نداشته باشی که State صفحه رو عوض کنه.
2. هیچ کدوم از کدهای پروژه IHttpModule و IHttpHandler رو تغییر ندن.
3. هیچ نوع Page Content Proxy نداشته باشی.
4. به هیچ وجه تقاضای ارتباط دوسویه یا Streaming نداشته باشی.

اگر این ها در پروژه شما نباشد، که قضیه حله. نسخه اصلی این رو از سایت سازنده اون بگیرید رایگان هم هست.

دو تا دایرکتوری داره، یکی VB و دیگری هم #C. راحت با اضافه کردن دوخط کد به Web.Config و اضافه کردن Dll به Bin تمام کارها بعهده خودشه. :لبخندساده:

اما اگر تو پروژه از این تکنیکهای لازم و حرفه ای استفاده کرده باشید، مجبورید مثل من تمام این کارها رو مدیریت کنید.


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

لذا بهتر است این گونه تکنیک ها را با احتیاط و نه برای هر پروژه های استفاده کنید.


قطعاً لازم است از حرکت زیبای آقای راد برای شروع این بحث تشکر کنم.


موفق باشید.

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

ali643
دوشنبه 15 مرداد 1386, 01:22 صبح
من یه مشکل دارم که تو IE حجم صفحه کم نمیشه اما تو FF حجم صفحه 4/1 میشه.
در FF عکس منو رو Load نمیکنه اما در IE همه چیز درسته.
مشکل چی میتونه باشه؟؟؟؟

مرسی.

jasadeghi
سه شنبه 30 مرداد 1386, 16:15 عصر
دروود به تمامی دوستان

چند ماهی از آغاز این بحث که به همت جناب راد شروع شد میگذره.

اگر به خاطر داشته باشید اولین ورژن DotNetNuke که به بازار اومد سرعت لود خیلی کمی داشت ، ولی در نسخه های جدید این ضعف رو از بین برد و در حال حاظر سرعت مناسبی داره علاوه بر اینکه با AJAX هم کار میکنه و هیچ کدوم از اسکریپ ها و یا CSS ها و یا ... اون با خطا مواجه نمیشه.

من در سایت جدیدی که با AJAX طراحی کردم برای حل مشکل سرعت اون از DotNetNuke.HttpModules.Compression.dll استفاده کردم و تمام مشکلاتی رو که تا الان با کمپرسور ها داشتم بر طرف شد، و سرعت لود سایت هم بسیار بهتر شد.

تنها مشکلی که برای من به وجود اومد این بود که دیگه فایل Default.aspx من در هیچ کدوم از پوشه ها کار نمی کرد و با خطا مواجه می شد، که این مشکل رو هم با عوض کردن نام این فایل بر طرف کردم.

من فایلهای این کمپرسور رو که یک فایل dll و یک فایل config است، در اینجا قرار می دم تا شما هم بتونید از اون استفاده کنید، و اگر احیانا راه حلی برای حل مشکل نام Default.aspx هم پیدا کردید در اینجا قرارش بدین.




<httpModules>
<addname="Compression"type="DotNetNuke.HttpModules.Compression.HttpModule, DotNetNuke.HttpModules.Compression" />
</httpModules>




با آرزوی بهروزی

maxpayn2
شنبه 07 مهر 1386, 13:14 عصر
سلام
من کد های آقای راد رو به C# تبدیل کردم ولی وقتی میخوام کلاس رو به dll تبدیل کنم ارور میده ، طریقه تبدیل به dll و ارور رو ضمیمه میکنم ، لطفا اشکال کار رو بفرمایید

rtech
شنبه 07 مهر 1386, 18:14 عصر
در ویستا معمولا باید Permission لازم را برای اجرای بعضی از فایلها داشته باشید بهتر است از یوزر Administrator استفاده کنید .

maxpayn2
شنبه 24 آذر 1386, 18:01 عصر
این رو هم ببینید ، بد نیست
http://www.codeproject.com/KB/aspnet/httpcompression.aspx

mp2009
دوشنبه 17 دی 1386, 23:58 عصر
دقیقا اصلا برای همین ایجاد شد که جلوی Compression فایل های ناخواسته گرفته بشه. من دیگه با نوشته شما به شک افتادم نکنه اشتباه کرده باشم، ولی دیدم که dll که تهیه کردم به خوبی کار می کنه و حجم صفحات را چیزی در حدود 80% کاهش می ده. من مجددا dll رو آپلود می کنم، مطمئن هستم که مشکلتون حل می شه.

دانلود (http://mfarahy.persiangig.com/Components/AspxCompression.rar)


ممنون دوست عزیز . میشه بگید چه جوری توی web.config اونو فراخونی بکنیم؟

mp2009
شنبه 22 دی 1386, 21:33 عصر
دوستان العان من 4 روز هست که این سوال رو کردم. یعنی یه جوانمرد پیدا نمیشه جوابشو بده؟

FirstLine
یک شنبه 05 اسفند 1386, 10:54 صبح
دروود به تمامی دوستان

چند ماهی از آغاز این بحث که به همت جناب راد شروع شد میگذره.

اگر به خاطر داشته باشید اولین ورژن DotNetNuke که به بازار اومد سرعت لود خیلی کمی داشت ، ولی در نسخه های جدید این ضعف رو از بین برد و در حال حاظر سرعت مناسبی داره علاوه بر اینکه با AJAX هم کار میکنه و هیچ کدوم از اسکریپ ها و یا CSS ها و یا ... اون با خطا مواجه نمیشه.

من در سایت جدیدی که با AJAX طراحی کردم برای حل مشکل سرعت اون از DotNetNuke.HttpModules.Compression.dll استفاده کردم و تمام مشکلاتی رو که تا الان با کمپرسور ها داشتم بر طرف شد، و سرعت لود سایت هم بسیار بهتر شد.

تنها مشکلی که برای من به وجود اومد این بود که دیگه فایل Default.aspx من در هیچ کدوم از پوشه ها کار نمی کرد و با خطا مواجه می شد، که این مشکل رو هم با عوض کردن نام این فایل بر طرف کردم.

من فایلهای این کمپرسور رو که یک فایل dll و یک فایل config است، در اینجا قرار می دم تا شما هم بتونید از اون استفاده کنید، و اگر احیانا راه حلی برای حل مشکل نام Default.aspx هم پیدا کردید در اینجا قرارش بدین.




<httpModules>
<addname="Compression"type="DotNetNuke.HttpModules.Compression.HttpModule, DotNetNuke.HttpModules.Compression" />
</httpModules>




با آرزوی بهروزی

با سلام
من این دو تا فایل رو به پرزژه اضافه کردم اما پیغام خطا میده:



Server Error in '/ACP' Application.
--------------------------------------------------------------------------------

Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Could not load file or assembly 'DotNetNuke.HttpModules.Compression' or one of its dependencies. The system cannot find the file specified. (D:\www\ACP\web.config line 70)

Source Error:


Line 68:
Line 69: <httpModules>
Line 70: <add name="Compression" type="DotNetNuke.HttpModules.Compression.HttpModule, DotNetNuke.HttpModules.Compression" />
Line 71: </httpModules>
Line 72:





با تشکر

Modifier
چهارشنبه 29 اسفند 1386, 12:36 عصر
با سلام

من معمولا عادت ندارم که یه نفر یه چیزی رو بگه منم قدم به قدم اون رو بدون درک انجام بدم به خاطر همین چند سوال دارم :

1 - چرا ما باید کلاس رو به پروژه اضافه کنیم و آیا نمیشه این کلاس رو بسازیم و بعد بزاریمش توی BIN ؟

2 - و آیا خود browser ها کار فشرده سازی رو انجام نمیده پس برای چی ساپورت میکنه ؟

3 - و این طور که من خوندم این کار برای IE اثری ندارد و اگه این طوره چه سودی داره ؟

یا علی

Behrouz_Rad
سه شنبه 06 فروردین 1387, 17:53 عصر
1 - چرا ما باید کلاس رو به پروژه اضافه کنیم و آیا نمیشه این کلاس رو بسازیم و بعد بزاریمش توی BIN ؟

در نهایت هم در bin قرار می گیره.


2 - و آیا خود browser ها کار فشرده سازی رو انجام نمیده پس برای چی ساپورت میکنه ؟

خیر انجام نمیده. فشرده سازی قابلیتی هست که نسخه ی 1.1 پروتوکول HTTP از اون حمایت می کنه و هر مرورگری که از این پروتوکول استفاده می کنه، قابلیت دریافت داده ها به صورت فشرده رو هم داره و فشرده سازی رو هم ساپورت می کنه.


3 - و این طور که من خوندم این کار برای IE اثری ندارد و اگه این طوره چه سودی داره ؟

خیر اینطور نیست. IE هم از نسخه ی 1.1 پروتوکول HTTP حمایت می کنه.

موفق باشید.

IranVisual
پنج شنبه 15 فروردین 1387, 07:58 صبح
من توی وب سایتم استفاده کردم ولی صفحه من بهم میریزه بعضی موقع بعضی عکساش لود نمیشه بعد فلشهای کنار treeview هم بهم میریزه البته این مشکلات بعد از Upload فایلها توی سرور اتفاق میفته

e-shahshahani
شنبه 17 فروردین 1387, 18:32 عصر
من سایتم روی یه هاست هست که iis اون هاست خودش http compression را انجام میده و هیچ مشکلی هم برای سایت های روی اون هاست نیست. فایل های متنی از جمله aspx, html, js, css فشرده می شوند.
در iis یک گزینه هست که این کارو میکنه. http://www.google.com/search?q=http+compression+iis&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

موفق باشید.

chaalesh
یک شنبه 18 فروردین 1387, 13:12 عصر
آقای راد سلام
من از این روش استفاده کردم و همه چیز OK هست ولی حالا بجای host قبلی از dedicated server استفاده می کنیم اصلا کار نمیکنه؟؟!!
تنظیمی روی سرور میخواد؟

Behrouz_Rad
یک شنبه 18 فروردین 1387, 13:21 عصر
خیر.
اصلا کاری به تنظیمات سرور نداره!

miladr
دوشنبه 19 فروردین 1387, 01:09 صبح
من برای فشرده سازی از راه Flanders استفاده کردم.
http://www.codeproject.com/KB/aspnet/HttpCompress.aspx
اما کلا این هم با Ajax مشکل داره.
راه حل آقا بهروزم ExcludedPaths داره مثل Flanders اما نمی دونم کجا باید استفاده کرد و اینکه ایا جواب میده یا نه؟

IranVisual
شنبه 24 فروردین 1387, 16:18 عصر
وقتی از فشرده ساز شما استفاده میکنم آقای راد نمیتونم از freetextbox استفاده کنم

explod_javad
یک شنبه 25 فروردین 1387, 14:19 عصر
آقا بهروز ما آخرش نفهمیدیم که این روش خوبه یا نه !!
یه لطفی کن جم بندی کن
خوبه یا نه ؟
برای وب پروژه های بزرگ میشه استفاده کرد.

Behrouz_Rad
یک شنبه 25 فروردین 1387, 16:20 عصر
بله خوبه. به شرطی که بلد باشید ازش استفاده کنید و تمام این تاپیک رو مطالعه کنید.
من وظیفم رو در قبال این تاپیک انجام دادم و بقیش دست خود شماست که بتونید با هوش، ذکاوت، مطالعه ی کدهای پروژه های Open Source، جستجو ... به مزایا و معایب این روش پی ببرید.

موفق باشید.

explod_javad
دوشنبه 26 فروردین 1387, 10:50 صبح
عمل حذف فضاهای خالی (Remove White Space ) به وسیله چند روش قابل پیاده سازی می باشد .

روش RegularExpression به صورت زیر هست :

private static readonly Regex REGEX_BETWEEN_TAGS = new Regex(@">\s+<", RegexOptions.Compiled);

private static readonly Regex REGEX_LINE_BREAKS = new Regex(@"\n\s+", RegexOptions.Compiled);

protected override void Render(HtmlTextWriter writer)

{

using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new System.IO.StringWriter()))

{

base.Render(htmlwriter);

string html = htmlwriter.InnerWriter.ToString();


html = REGEX_BETWEEN_TAGS.Replace(html, "> <");

html = REGEX_LINE_BREAKS.Replace(html, string.Empty);


writer.Write(html.Trim());

}

}

این کد هارا می توانید در MasterPage بنویسید تا تمامی صفحاتی که از آن ارث میگیرند شامل شود .

این روش برای کسانی که از روش فشرده سازی هم استفاده می کنند بسیار مفید و کارامد هست .

دقت نمایید که برای استفاده از این روش باید فضا نام System.Text.RegularExpressions را ابتدا ایمپورت نمایید

امتحان کردم یه کمی تأثیر میزاره

Behrouz_Rad
دوشنبه 26 فروردین 1387, 14:39 عصر
@explode_javad
کدهایی که گذاشتی متعلق به Mads Kristensen، بنیانگذار BlogEngine.NET هست. منبع رو ذکر کن.
http://www.webdevelopernews.com/webdevelopernews-94-20071022RemovingWhitespaceFromYourPageswithASPNET. html

موفق باشید.

explod_javad
سه شنبه 27 فروردین 1387, 08:26 صبح
ما از یه جای دیگه گرفتیم
ولی حق با شماست باید منبع ذکر بشه . ایشالا دفعه بعد
http://www.how2learnasp.net/article.aspx?code=f4fd2b6c-d7e9-4c95-9dcf-e8d479452ce8