PDA

View Full Version : بهینه سازی کد و صفحات برای بارگذاری هر چه سریعتر



MSYNK
دوشنبه 27 مهر 1383, 14:42 عصر
با سلام
میخوام تو این تاپیک تمامی راه حلهای موجود‌(از جزیی ترین تا کلی ترین) برای اینکه بالاخره یه صفحه ای رو که کاربر میخواد ببینه به سریعترین وجه ممکن بارگذاری بشه!
حالا هر کی هر چی میدونه رو مطرح کنه!(هم مشکلات و موانع و هم احیانا راه حلها!)
با تشکر.

MSYNK
دوشنبه 27 مهر 1383, 15:01 عصر
با سلام
یکی از مهمترین مسائل موجود در برنامه نویسی وب ارتباط با دیتابیس هستش! چون یکی از پرهزینه ترین موارد از نظر performance یه وب اپلیکیشن همین ارتباط با دیتابیس هستش٬ پس تا میتونیم باید از ارتباطهای بیش از حد و بیهوده با اون پرهیز کنیم!(بشدت!!!!!)
حالا باید یه سری راه حل پیدا کنیم که تا میتونیم نیازهامونو بدون ارتباط با دیتابیس برطرف کنیم!(هر چی بیشتر بهتر٬ البته به شرطی که را حلها بیشتر از خود ارتباط بادیتابیس مشکل زا نباشند!)
1. یکی از بهترین راه حلها استفاده مناسب و بموقع از Cache هستش!
مثال:
ما یه سری دیتا داریم که کاربرا تو بازدید از سایت فقط اونا رو مشاهده میکنن و نمیتونن اونو تغییر بدن! مثلا اخبار سایت تو صفحه اول(و کلا اطلاعات زیاد دیده شدنی و کم آپدیت شدنی!)٬ حالا آیا ما باید تو هر بار بازدید هر کاربر بریم کلی راه رو تا دیتابیس طی کنیم که چی : یه سری اطلاعات تکراری رو بخونیم! اگه اینجوری باشه که پدر سرور درمیاد که! :: خوب اینجاست که Cache خودشو نشون میده و میتونیم با ذخیره این اطاعات تو کاشه خیلی راحت (بغیر از دفعات اول)اطلاعات مورد نیاز رو از کش بخونیم(با سرعت خیلی زیادتر) و استفاد کنیم!(برای دریافت اطلاعات بیشتر میتونین به کتابخونه سایت و جزوه معروف استاد نصیری در مورد ASP.NET قسمت پیشرفته جلسه هشتم مراجعه کنین.)
.......................
(حالا دوستان هر چی در چنته دارن رو کنن :mrgreen: )
با تشکر.

MSYNK
سه شنبه 28 مهر 1383, 09:06 صبح
با سلام
ViewState
این خاصیت برای حفظ حالت کنترلهای سمت سرور در Postbackهای صفحه به سرور بکار میره!(و ... برای جزئیات بیشتر به مطلبی که استاد نصیری در همین بخش و در همین زمینه یعنی حفظ حالت ارائه کردند رجوع کنید)
اما در بسیاری از مواقع احتیاج خاصی به فعال بودنش وجود نداره و از اونجا که با true بودن این property حجم صفحات تولید شده به شدت با افزایش کنترلهای سرور(که این خاصیتشون true هست) افزایش پیدا میکنه٬ لازم دیدم تا تذکر بدم که برای کنترلهایی که حفظ حالت لازم ندارن(مثلا دیتاگریدهایی که paging ندارند و یا ... بر حسب تجربه به موارد مهم دیگری نیز برخورد میکنید!) بایستی حتما خاصیت EnableViewState را به false مقداردهی کنین! اگر یکبار امتحان کنین تفاوت رو تو بارگذاری صفحه حتما مشاهده میکنین!
(البته با توجه به اطلاعاتی که استاد نصیری در تاپیک ASP.NET 2.0 ارائه دادند این مورد در ورژن بعدی حل شده!)
موفق باشین.

Farhad.B.S
چهارشنبه 29 مهر 1383, 13:20 عصر
مبحث فشرده سازی کد های HTML :

یکی از راه هایی که میتونه تاثیر زیادی بر روی سرعت بارگذاری صفحات داشته باشه کاهش حجم HTML خروجی صفحات است.
راه های زیادی برای اینگونه فشرده سازی وجود داره ، یک راه اولیه استفاده از عناصری است که حجم کمتری (از نظر مقدار کد HTML)
نسبت به سایر عناصر تولید میکنند و در مقابل همون کارایی رو دارند. به عنوان مثال استفاده از css و div ها به جای استفاده از تیبل های رایج .
این عناصر در حالی که قالب بندی و انعطاف پذیری صفحه رو مانند تیبل ها (و حتی ظریف تر) انجام میدند در مقابل حجم بسیار کمتری از کد رو نیز تولید میکنند.
برای اطلاعات بیشتر :
http://www.hotdesign.com/seybold/
http://www.csszengarden.com/

یکی دیگه از راه ها، تکنیک فشرده سازی کد HTML خروجی توسط حذف فواصل خالی است (white spaces) که میتونه
به صورت داینامیک یا استاتیک انجام بشه. این فواصل فقط برای خوانایی بیشتر کد توسط توسعه دهنده و یا نرم افزار های طراحی
صفحات گذاشته میشند که در عمل حجم زیادی رو اشغال می کنند.
به عنوان یک راه حل در ASP.Net ، می توان با override کردن متد Render صفحات ،این فواصل رو از کد خروجی حذف کرد.

MSYNK
چهارشنبه 29 مهر 1383, 14:22 عصر
با سلام


به عنوان یک راه حل در ASP.Net ، می توان با override کردن متد Render صفحات ،این فواصل رو از کد خروجی حذف کرد.
میشه در این زمینه یه مثال هم بزنین!
(چون من اینو نمیدونستم و نمیدونم که که چیجوری بایستی اینکار رو بصورت داینامیک انجام داد!)

Farhad.B.S
چهارشنبه 29 مهر 1383, 15:06 عصر
http://www.codeproject.com/aspnet/WhitespaceFilter.asp
http://www.iranasp.net/Articles/ShowArticle.aspx?articleid=154
---------
البته در اینجا از Response.Filter استفاده شده ، ولی روش کار به یک صورته ... شما
با آوررید کردن متد Render ، خروجی نهایی رو بدست میارید و اصلاحاتی رو که در این مقاله
با استفاده از RegEx بر روی کد انجام شده ، بر خروجیتون اعمال میکنید.

Vahid_Nasiri
چهارشنبه 29 مهر 1383, 18:14 عصر
در مورد فشرده سازی صفحات تولیدی با استفاده از gzip :
http://www.barnamenevis.org/forum/viewtopic.php?t=8164
(انتهای مقاله در مورد دات نت هم مثال زده)

MSYNK
پنج شنبه 30 مهر 1383, 10:29 صبح
با سلام

اصلاحاتی رو که در این مقاله
با استفاده از RegEx بر روی کد انجام شده ، بر خروجیتون اعمال میکنید

ببخشید : آیا این اصلاحات تو مقاله انجام شده یا خودمون باید انجام بدیم؟(من اصلاحاتی نمیبینم...)
منظورتون از RegEx چیه؟
با تشکر.

saeed_programer
پنج شنبه 30 مهر 1383, 13:27 عصر
سلام
آیا کسی از نحوه کارکرد و چگونگی ASPJET که اخیرا یکی از دوستان برنامه نویس آن را طراحی کردتند اطلاعاتی دارید.

Farhad.B.S
پنج شنبه 30 مهر 1383, 15:03 عصر
ببخشید : آیا این اصلاحات تو مقاله انجام شده یا خودمون باید انجام بدیم؟(من اصلاحاتی نمیبینم...)
منظور بنده اصلاحاتیه که در مقاله فوق ، بر روی کد HTML خروجی انجام شده (حذف فواصل خالی با توجه به موقعیت این فواصل)


منظورتون از RegEx چیه؟
Regular Expression

zabihian
شنبه 06 خرداد 1385, 10:48 صبح
www.farashahr.com یک برنامه ارائه کرده که حجم viewstate رو به 32 بایت و حجم html رو به یک پنجم کاهش می ده. رایگان. برنامه روی تمام برنامه های ASP.NET کار می کنه. یعنی یک صفحه 100 کیلویی رو می کنه 15 کیلو تقریبا.

zabihian
شنبه 06 خرداد 1385, 10:55 صبح
در مورد فشرده سازی صفحات تولیدی با استفاده از gzip :
http://www.barnamenevis.org/forum/viewtopic.php?t=8164
(انتهای مقاله در مورد دات نت هم مثال زده)
یک نگاه به http://www.farashahr.com بیاندازید.

zabihian
شنبه 06 خرداد 1385, 11:16 صبح
اگه بخام کوتاه و ساده بگم موضوع قابل تقسیم به چند بخش است:
1- اینترفیس
از xml بجای اطلاعات کم تغییر استفاده کنید.
از page caching برای ارائه صفحات کم تغییر استفاده کنید.
مقدار html را کم کنید. از روشهای zip و حذف viewStateاستفاده کنید (www.farashahr.com)

2- تکنولوژی تولید صفحه
اطلاعات لازم برای پردازش را در محلی مانند session یا Cache ذخیره کنید و از آنحا سرویس بدهید.
پردازش را توزیع کنید یعنی قسمتی را در page_onload و قسمتی را در button_click و الی آخر
کد را بهینه کنید. هر چه را ایجاد می کنید خودتان نابود کنید. و ...

3- دیتابیس
روی ایندکس ها بشدت کار کنید. اگر تعداد کاربران خیلی کم است (تا 10 نفر) یک اتصال به بانک زده و آنرا باز نگه دارید. به همه از این اتصال سرویس دهید. (بایستی مراقب همزمانی باشید) و اگر خیلی زیاد است. برای هر درخواست اتصال زده و رها کنید. از microsoft.application..block استفاده کنید.
فیلدهای غیر ضروری را نیاورید.
از پراسیجر ها استفاده کنید.
بانک اطلاعاتی را Cache کنید!

ali_sorouri2005
شنبه 06 خرداد 1385, 13:25 عصر
سلام دوستان
ابرای مطالب این بحث از همه متشکرم چون واقعا بحث مفیدی هستش
من یه سوال دارم که البته بارها مطرحش کردم ولی بد نیست که اینجا هم مطرح بشه
می خواستم ببینم استفاده از panel ها در یک صفحه به جای استفاده از صفحات مختلف سرعت رو بالا نمیبره؟چون دیگه لازم نیست یه صفحه جدید باز بشه بلکه بخشی از همون صفحه فعلی تغییر میکنه در حقیقت یه ساختار لایه ای ایجاد میشه
با تشکر

manager
شنبه 06 خرداد 1385, 19:56 عصر
سلام دوستان
... می خواستم ببینم استفاده از panel ها در یک صفحه به جای استفاده از صفحات مختلف سرعت رو بالا نمیبره؟چون دیگه لازم نیست یه صفحه جدید باز بشه بلکه بخشی از همون صفحه فعلی تغییر میکنه در حقیقت یه ساختار لایه ای ایجاد میشه
با تشکر

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

یکی از راه های کاهش حجم استفاده زیاد از Css هست ولی مشکلی که asp.net داشت اینه تمام فایل های Css موجود در شاخه ی Theme رو به صفحه اضافه می کنه من فایل های Css رو به قسمت های کوچک تر شکستم و یه کنترل نوشتم که Css ها لازم هر صفحه رو به اون صفحه Add می کنه و مشکلش رو بر طرف کردم همچنین استفاده از Filter هائی رو که دوستان معرفی کرده بودن برای کاهش حجم خروجی صفحه به شدت پیشنهاد می کنم.
استفاده درست از Ajax باعث افزایش کارائی می شه ولی هرگز فراموش نکنید Ajax به جرات 99% بد هست و 1% خوب ولی همون 1% تاثیر بسزائی داره..

msakbari
شنبه 06 خرداد 1385, 22:25 عصر
از مطالب فوق بسیار متشکرم .
خودم هم سعی می کنم چند مورد ذکر کنم ایشاللا
مرسی

iekrang
یک شنبه 07 خرداد 1385, 05:26 صبح
www.farashahr.com یک برنامه ارائه کرده که حجم viewstate رو به 32 بایت و حجم html رو به یک پنجم کاهش می ده. رایگان. برنامه روی تمام برنامه های ASP.NET کار می کنه. یعنی یک صفحه 100 کیلویی رو می کنه 15 کیلو تقریبا.
قابل دانلود نیست! برای بقیه هم این مشکل وجود داره؟

msakbari
یک شنبه 07 خرداد 1385, 16:04 عصر
باید حتما عضو شوید !!!!!!!!!!!!!!!!!!!!!!

nazaninam
چهارشنبه 10 خرداد 1385, 09:39 صبح
استفاده نادرست از کنترل های وب که شدیدا رایج هست و خیلی ها کنترل های html رو فراموش کردند ، خیلی های javascript رو فراموش کردند و حتی بخاطر یه alert از response.write استفاده میکنند...
جاهایی که واقعا لازم نیست از کنترل های html استفاده کنید چون خیلی سریع تر لود میشن.