صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 76

نام تاپیک: اصل مهم - فشرده سازی صفحات وب در ASP.NET 2.0

  1. #1

    Thumbs up اصل مهم - فشرده سازی صفحات وب در ASP.NET 2.0

    توجه:
    کلیه ی حقوق این مقاله متعلق به سایت 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 را انتخاب کنید.
    به عنوان مثال، من صفحه ای رو در هر دو حالت نرمال و فشرده مقایسه کردم. نتیجه واقعا شگفت انگیز بود!
    به دو عکس زیر دقت کنید:




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

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

    موفق باشید.
    فایل های ضمیمه فایل های ضمیمه

  2. #2
    چرا در IE کار نمی کند.

  3. #3

  4. #4
    برای من این ارور رو میده :

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

    از این خط :

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

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

  5. #5
    خطای فوق نشان میده که DLL پیدا نشده!
    DLL ایجاد شده باید در پوشه ی Bin قرار داده بشه.

    موفق باشی.

  6. #6
    مشکل حل شد من عبارت Onenter در فایلی که آپلود کرده بودید رو با Onzip عوض کردم مشکل حل شد .

  7. #7
    کاربر دائمی آواتار یاسر مددیان
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    سرزمین پارس
    پست
    385
    آقای راد اگه مشکل لود نشدن عکسها هم حل بشه عالی می شه. من که نتونستم کاری بکنم اگه میشه شما کمک کنید.



    با تشکر

  8. #8
    نقل قول نوشته شده توسط یاسر مددیان مشاهده تاپیک
    آقای راد اگه مشکل لود نشدن عکسها هم حل بشه عالی می شه. من که نتونستم کاری بکنم اگه میشه شما کمک کنید.



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

  9. #9
    مقاله جالبی در این باره
    Compression support in ASP.NET 2.0
    http://www.microsoft.com/belux/msdn/...mpression.mspx

  10. #10
    کاربر دائمی
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - تهران
    پست
    127
    نقل قول نوشته شده توسط یاسر مددیان مشاهده تاپیک
    آقای راد اگه مشکل لود نشدن عکسها هم حل بشه عالی می شه. من که نتونستم کاری بکنم اگه میشه شما کمک کنید.



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

    مرسی آقای راد

  11. #11
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    172
    آقای راد من در تبدیل به 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

  12. #12
    چون داری یک فایل VB رو با کامپایلر #C کامپایل می کنی!

  13. #13
    کاربر دائمی آواتار یاسر مددیان
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    سرزمین پارس
    پست
    385
    ولی اون مشکلی که من گفتم هنوز وجود داره وقتی این و فراخونی می کنیم عکسها یه موقع لود میشن یه موقع لود نمیشن ( عکسهای تو سایت ) ؟؟؟؟!!!!!

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

  14. #14

  15. #15
    کاربر دائمی آواتار یاسر مددیان
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    سرزمین پارس
    پست
    385
    آره ، ولی همون اول که صفحه اول سایت میاد بالا این مشکل وجود داره !

  16. #16
    بسیار خوب.
    Forms Authentication رو کاملا در Web.Config غیر فعال کن و نتیجه رو بگو.

  17. #17
    کاربر دائمی آواتار یاسر مددیان
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    سرزمین پارس
    پست
    385
    چشم .
    اگه اکانتم اجازه نداد فردا جواب رو میذارم .

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

  18. #18
    سلام
    من dll رو ساختم و در فولدر bin وب سایت هم گذاشتم ولی موقع اجرا پیغام میده که نمیتونه ماژول من رو پیدا کنه. اگه تو web.config آخرین عبارت (اسم کلاس) رو با اسم dll یا namespace عوض کنم اجرا میشه ولی هیچ فشرده سازی انجام نمیده. موضوع چیه؟

  19. #19
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771
    من یه مشکل عجیب پیدا کردم، یه ماژول Compressor نوشتم که تقریبا شبیه همین ماژوله ولی مشکل اینجاست که از کدهای جاوا اسکریپت دات نت خطا می گیره !!!

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

  20. #20
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771

    Exclamation رفع ایراد متد فشرده سازی GZip

    ماژول معرفی شده در این بخش و همچنین مقاله معرفی شده در صفحه قبل دارای یک مشکل بزرگ هست و اون هم اینکه این ماژول هرچیزی را علاوه بر صفحات 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");
    }
    }
    }
    }
    }

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

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

    ماژولر WebResource.axd با قابلیت جدید فشرده سازی در ASP.NET 2.0 ناسازگار است.

    در نتیجه، تو نمی تونی کاری کنی که این ماژولر که برخی کنترل ها و متدها، منابع خودشون رو از اون دریافت میکنند، در کدهای صفحه ظاهر نشه؛ در نتیجه مشکل پابرجاست.

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

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

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

    موفق باشید.
    آخرین ویرایش به وسیله Behrouz_Rad : دوشنبه 07 اسفند 1385 در 22:24 عصر

  22. #22
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771
    کدی که نوشتی عملا کار خاصی انجام نمیده!
    نه آقای راد، مشکل رو حل می کنه و فقط فایل های مورد نظر رو فشرده می کنه من عملا امتحان کردم و جواب داده !!! جالبه بدونید که علاوه بر WebResource.axd ها HttpHandlerها و فایل های ashx نیز از این قاعده مستثنا نبودند و همین مشکل را داشتند که با این روش ساده حل شدند.

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

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

    موفق باشید.

  24. #24
    میشه بگید تگهای <ExcludedPaths> و <ExcludedMimeTypes> رو دقیقا در کجای web.config باید قرار بدم ؟

  25. #25

    Unhappy

    بابا کسی نیست جواب ما رو بده ؟
    این دو تا تگ رو دقیقا باید کجای Web.Config قرار داد ؟

  26. #26
    به من این 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 رو اضافه کردم.

  27. #27
    نقل قول نوشته شده توسط lollypop مشاهده تاپیک
    سلام
    من dll رو ساختم و در فولدر bin وب سایت هم گذاشتم ولی موقع اجرا پیغام میده که نمیتونه ماژول من رو پیدا کنه. اگه تو web.config آخرین عبارت (اسم کلاس) رو با اسم dll یا namespace عوض کنم اجرا میشه ولی هیچ فشرده سازی انجام نمیده. موضوع چیه؟

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

  28. #28
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771

    Exclamation

    فرمت 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>
    ...


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

  29. #29
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771

    Exclamation

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

  30. #30
    نقل قول نوشته شده توسط manager مشاهده تاپیک
    فرمت add در بخش httpModules باید به شکل زیر باشه :
    <add name="ModuleName"
    type=".NET Class, Assembly"/>
    و به عنوان نمونه :


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


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


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

  31. #31

  32. #32
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771
    شما از کجا می فهمید که ماژولتون اجرا نمی شه ؟ سورس ماژول را در این بخش قرار بدین تا بررسی کنیم. به هر حال این کاری هست که ما انجام دادیم و کار کرده، احتمالا شما در جائی قصور کرده اید...

  33. #33
    نقل قول نوشته شده توسط Behrouz_Rad مشاهده تاپیک
    نام روال 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 کپی کردم

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

  34. #34
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771
    اسم فایل dll شما HttpCompression یا HttpCompressionModule ؟
    همون طور که خودتون هم می دونید مشکل از پیدا کردن فایل و لود کردن اسمبلی هست و کدها مشکلی نداره !!

  35. #35
    کاربر دائمی آواتار ali_kolahdoozan
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    اون سر دنیا
    پست
    1,631
    اصول فشرده سازی رو آقای راد گزاشتن . دستشون هم درد نکنه اما تنها منبع قابل مراجعه در جهان که نیست . توی کتابها هست . صد جای دیگه هم هست . قسمتی رو خود استفاده کننده ببره جلو و همین رو با دانش خودش بیامیزد . نه اینکه همه منتظر ایشان هستید و یکجورهایی یک عده یک حالت طلبکاری پیدا کردند که درست نیست

  36. #36
    نقل قول نوشته شده توسط ali_kolahdoozan مشاهده تاپیک
    اصول فشرده سازی رو آقای راد گزاشتن . دستشون هم درد نکنه اما تنها منبع قابل مراجعه در جهان که نیست . توی کتابها هست . صد جای دیگه هم هست . قسمتی رو خود استفاده کننده ببره جلو و همین رو با دانش خودش بیامیزد . نه اینکه همه منتظر ایشان هستید و یکجورهایی یک عده یک حالت طلبکاری پیدا کردند که درست نیست

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

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

  37. #37
    با این روش <ExcludedPaths> مشکل که دقیقا فایل WebRecource هستش حل میشه.ولی وقتی روی وب امتحان می کنم باز همون مشکلات قبلی باقی می مونه.
    مشکل کجا می تونه باشه ؟

  38. #38
    شاید اینها کمک کنه.
    فایل های ضمیمه فایل های ضمیمه

  39. #39
    کاربر دائمی آواتار iman_22a
    تاریخ عضویت
    بهمن 1383
    محل زندگی
    اهواز
    پست
    815
    سلام دوستان
    از آقای راد برای مقاله ارزشمندشون تشکر می کنم .
    من طبق تاپیک پیش رفتم و تمامی توصیه های دوستان رو هم خوندم و توی نمونه پروژم بکار بردم و در نهایت به اونجایی رسیدم که توی FireFox تفاوت بین حجم صفحه در حالت با Compression و در حالت بدون Compression خیلی چشمگیره ولی یک سری مشکلات هست ، در نمایش صفحه با Firefox تصاویر بخوبی نمایش داده می شوند ولی اشکالاتی در کنترل های Navigator و Treeview ایجاد می شود .
    در Ie6 که تست کردم Treeview مشکلی ندارد ولی کنترل Rotator از ‍ComponentArt اصلا نمایش داده نمی شود و پایین صفحه در Statusbar از صفحه ارور می گیرد که مربوط به همان Rotator است ولی تفاوتی از لحاظ حجمی بین دو حالت وجود ندارد.
    از پست جناب Manager هم استفاده کردم ولی همانطور که جناب راد فرمودند عملا کاری انجام نمی داد چون اصلا جلوی Compression را می گرفت .
    از پست حامد بوستان عزیز هم خواستم استفاده کنم و برام مشکل بود چون یخورده پیچیده بود و چون به زبان سی شارپم بود نتونستم چیز زیادی ازش بفهمم .

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

  40. #40
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771
    از پست جناب Manager هم استفاده کردم ولی همانطور که جناب راد فرمودند عملا کاری انجام نمی داد چون اصلا جلوی Compression را می گرفت .
    دقیقا اصلا برای همین ایجاد شد که جلوی Compression فایل های ناخواسته گرفته بشه. من دیگه با نوشته شما به شک افتادم نکنه اشتباه کرده باشم، ولی دیدم که dll که تهیه کردم به خوبی کار می کنه و حجم صفحات را چیزی در حدود 80% کاهش می ده. من مجددا dll رو آپلود می کنم، مطمئن هستم که مشکلتون حل می شه.

    دانلود

صفحه 1 از 2 12 آخرآخر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •