عنوان:

‫نمایش حجم ViewState برنامه‌های ASP.NET WebForms


نویسنده: وحید نصیری
تاریخ: ۱۳۸۹/۱۰/۱۹ ۱۰:۰۶:۰۰
آدرس: www.dntips.ir

امکان اندازه گیری دقیق حجم ViewState در برنامه‌های ASP.NET WebForms وجود دارد (+) ، اما خوب، این روش یک ایراد مهم هم دارد. چند نفر حاضرند تمام صفحات خود را ویرایش کرده و ارث بری ذکر شده را پیاده سازی کنند؟
یک روش دیگر اعمال آن به تمام صفحات، استفاده از پوشه‌ی استاندارد App_Browsers و سپس ایجاد فایلی مانند ViewStateManager.browser می‌باشد:
<!--Applies to all pages-->
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page" adapterType="ViewStateManagerCore.SomeClass" />
</controlAdapters>
</browser>
</browsers>
به این صورت ارث بری مورد نظر به صورت خودکار بر روی تمام صفحات اعمال خواهد شد.
علاوه بر این دو روش (ارث بری دستی و ارث بری خودکار)، افزونه‌ای هم برای فایرفاکس جهت نمایش حجم ViewState صفحات طراحی شده است که از آدرس زیر قابل دریافت می‌باشد :




این موضوع چه اهمیتی دارد؟
ممکن است کاربران سایت شما گاهی از اوقات در بعضی از صفحات با خطای "Validation of viewstate MAC failed" مواجه و متوقف شوند. عموما حجم بالای ViewState این مشکل را درست می‌کند. حجم ViewState بالا است (چند صد کیلوبایت ...)، ‌صفحه دیر رندر می‌شود یا هنوز کامل نشده، شخص صفحه را متوقف می‌کند. ASP.NET در این حالت اجازه‌ی ارسال اطلاعات از این صفحه‌ی ناقص را به دلایل امنیتی نمی‌دهد که خوب است (شاید جعل شده باشد؟).


پ.ن.
راه حل پیشنهادی مایکروسافت جهت حل این مشکل (شروع شده از سال 2007)، ارتقاء برنامه‌های شما به ASP.NET MVC می‌باشد :)

نظرات

  • مهمان در ۱۳۸۹/۱۰/۱۹ ۱۲:۵۲:۰۷
    سلام.
    جناب نصیری حجم Viewstate تا چقدر باشد ایرادی ندارد؟
    مثلا حجم 7 کیلو بایت زیاد هست ؟
    شنیدم راههایی جهت فشرده سازی آن است.
    آقای نصیری آیا ما برنامه نویسان Web Form اگر به ASP.NET MVC مهاجرت نکنیم ضرر می کنیم؟
    ممنون
  • وحید نصیری در ۱۳۸۹/۱۰/۱۹ ۱۳:۰۰:۵۷
    سلام،
    - بستگی دارد. اگر شبکه داخلی است. کلا بحث اندازه گیری آن‌را فراموش کنید. چون سرعت دریافت بالا است. اگر برای اینترنت برنامه می‌نویسید مهم است و بالای 30 کیلوبایت به ازای هر صفحه را باید زیاد دانست.
    - همان لینک داده شده در ابتدای مقاله را دنبال کنید. یک سری لینک در کامنت‌های آن برای فشرده سازی هست به همراه پیاده سازی کامل.
    - هم...،‌ باید منتظر نگارش بعدی ASP.NET بود یعنی نگارش 5 . اگر در نگارش 5 هم تغییرات آنچنانی حاصل نشده بود (مثل نگارش 4 فعلی که فقط یک سری موارد جزئی در آن تغییر کرده، مثلا فشرده سازی سشن، مشخص کردن ID سمت کلاینت و از این نوع بحث‌هایی که خیلی وقت است خود برنامه نویس‌ها برای آن راه حل پیدا کرده‌اند و ... به نظر من جدید نیستند)، آنگاه ... MVC تنها راه حل "زنده" و در حال پیگیری از طرف مایکروسافت تلقی خواهد شد.