PDA

View Full Version : حرفه ای: بهترين روش ajax طراحی



sky_in_iran
سه شنبه 14 اردیبهشت 1389, 15:27 عصر
باسلام خدمت شما دوستان و اساتيد محترم
لطفا منو راهنمايي كنيد من يه پروژه دستم و شيديدن نياز دارم به استفاده از ajax براي استفاده از اين كار راه هاي زيادي است حالا كدوم بهتر و بصرفه تر و سرباري كمتري داره نميدونم راهنماييم كنيد . چيزايي كه حول محور اونا گشتم استفاده از ajax control toolkit و anthem و jquery بوده به حرحال هركدوم مزيتي داره و اشكالي بهتري كه كارو سريع راه بندازه كدومه براي هر كدوم ايراد زياد گرفتن و يه جوري به شك ميندازن چون تو طراحي بر مبناي وب سرعت بيشترين چيزيه كه در تير رس قرار داره .
من يه پروژه دارم نميخوام برم تو بهر شبكه ميخوام وب بيس باشه يه جورايي شبيه اتوماسيون اگه لطف كنيد هرچهزودتر راهنمايي كنيد ممنون ميشم
موفق و پيروز و سربلند باشيد

Vahid_moghaddam
یک شنبه 26 اردیبهشت 1389, 12:02 عصر
استفاده از ajax control toolkit و update panel ساده ترین روشه و مناسب برای خیلی جا ها. اگه درست استفاده بشه.
از روش های سریع تر که البته نیاز به کدنویسی سمت کلاینت داره می شه به page method ها، ajax web service ها و ajax در jquery اشاره کرد.
پیشنهاد می کنم یه نگاهی به سایت http://encosia.com (http://encosia.com/) بندازید. در این سایت بیشتر درباره استفاده از jquery برای پیاده سازی ajax صحبت شده. مقالات بسیار خوبی داره و می تونید ایده های خوبی بگیرید.

sky_in_iran
یک شنبه 26 اردیبهشت 1389, 12:14 عصر
استاد مقدم ميشه بيشتر درباره استفاده درست از ajax toolkit توضيح بديد ؟ منظور از استفاده درست چيه ؟

Vahid_moghaddam
یک شنبه 26 اردیبهشت 1389, 13:03 عصر
منظور من استفاده درست از update panel هست.فقط کنترل هایی باید درون update panel قرار بگیرند که لازمه refresh بشن. مثلا فرض کنید یه دکمه دارید و یک textbox که قراره با فشار دادن دکمه متنی از server گرفته بشه و در textbox نمایش داده بشه. خب اینجا لازم نیست button هم توی update panel باشه. فقط باید یه triger برای update panel تعریف بشه تا با کلیک کردن دکمه refresh صورت بگیره.
یا مثلا فرض کنید شما تمام یک گریدویو رو می ذارید توی up و هدف هم اینه که با یک کلیک یه المان داخل یکی از سطرهای گرید تغییر کنه. اطلاعات زیادی post back میشه. اینجا بهتره با استفاده از روش های دیگه درخواست رو بفرستیم، پاسخ رو بگیریم و فقط همون المان رو تغییر بدیم.

چیزهایی شبیه به این ها.

کنترل های ajax control toolkit هم تا یه حدی سرعت رو میارن پایین. تا جایی که میشه بهتره از روش های سبک تری استفاده بشه. مثلا برای ساختن یه confirm box یا یه modal popup بهتره از جاوا اسکریپت یا jQuery استفاده کنیم.

در همون سایتی که لینکش رو براتون گذاشتم مقاله زیر رو ببینید:

http://encosia.com/2007/07/11/why-aspnet-ajax-updatepanels-are-dangerous/

sky_in_iran
دوشنبه 27 اردیبهشت 1389, 20:23 عصر
استاد مقدم از راهنماييتون خيلي سپاسگزارم باز من يه سوال دارم من دارم برنامه اي مينيويسم كه قراره انشا الله تو اينترانت كار كنه webapplication بعدش من تو فرمام هم dropdownlist هست هم گريد . داخل گريدم 2تا دكمه ويرايش و حذف دارم يه جورايي مجبورم همه فرمم تو updatepanel باشه تصوير برنام رو ميزام ببينيد يكي از فرمام و خوب با اين اوصاف من كلي حجم كارم بالاست به نظر شما چيكار كنم ؟ درضمن اتصال به بانكمم خيلي زياده تو فرمم از جداول مختلف داده ميگيره اين موردم تو كندي تاثيرش چقدر ؟ چيكاركنم ؟

Vahid_moghaddam
دوشنبه 27 اردیبهشت 1389, 21:01 عصر
1.در درخواست های آسنکرون شما هر چی بتونید حجم دیتای ارسالی و دریافتی رو کاهش بدید، به سرعت بالاتری می رسید. یه راه نوشتن فرمی که شما تصویرش رو گذاشتید اینه که از update panel استفاده نکنید. رکورد جدید رو با یه page method یا web method ذخیره کنید و گریدویو رو با استفاده از جاوا اسکریپت به روز کنید. توی این راه حل شما نیاز به نوشتن کدهای جاوا اسکریپت دارید. در واقع حجم برنامه نویسی سمت کلاینت می ره بالا اما حجم دیتای ارسالی و دریافتی میاد پایین. باید بین این دو تا انتخاب کنید: سرعت بالاتر و کدنویسی بیشتر.
2. هر چی تراکنش با دیتابیس کمتر باشه، راندمان بالاتری خواهید داشت. cache کردن دیتا ها یکی از روش هاییه که شما ارتباط با دیتابیس رو کاهش می دید و از دیتای ذخیره شده در حافظه سرور استفاده می کنید. استفاده درست و به جا از cache تاثیر خوبی در کارایی داره. استفاده درست یعنی مثلا دیتاهایی cache بشه که در سطح application state مورد استفاده قرار می گیره، دیتای اضافی cache نشه، به expire شدن cache توجه بشه و ....

در نهایت اگه سریعترین راه رو می خواید، update panel رو استفاده نکنید. اما آیا افزایش سرعت به زمانی که برای نوشتن حجم زیادی از کد client side و server side می ارزه یا نه، این بستگی به توانایی شما داره، به زمانی که باید پروژه رو تحویل بدید داره، به اینکه کاربران شامل چه طیفی هستند داره و ....
مقاله های زیر به فارسی هستند و درباره بهبود کارایی هنگام استفاده از update panel هستند.

http://www.30sharp.com/ShowArticle.aspx?nid=10&did=93&AuthorID=1

http://www.30sharp.com/ShowArticle.aspx?nid=10&did=151&AuthorID=1

http://www.30sharp.com/ShowArticle.aspx?nid=10&did=154&AuthorID=1

sky_in_iran
چهارشنبه 29 اردیبهشت 1389, 07:17 صبح
استاد مقدم واقعا سپاسگزارم برخودم واجب مي دونم از كمك بزرگ شما خيلي خيلي تشكر كنم درسته در كلام نميشه از راهنمايي هاي شما قدر داني كرد با زدن يك كليد تشكر هم نميشه تمام احساس خورسندي و انتقال داد براي همين گفتم به اين صورت نيز از زحمات شما تشكر كنم بازم سپاسگزارم
موفق باشيد

sky_in_iran
چهارشنبه 29 اردیبهشت 1389, 08:58 صبح
بازم من سوال داشتم استاد مقدم ببخشيد از اين همه مزاحمت
شما روش cache براي كم كردن اتصال به بانك پيشنهاد داديد حالا يك سوال در مقايسه حالت cache و ليستها همون (Collections) كدوم بهتره ؟
استفاده از كش يا ليست ها كدوم بهينه تر است ؟

Vahid_moghaddam
چهارشنبه 29 اردیبهشت 1389, 12:30 عصر
بازم من سوال داشتم استاد مقدم ببخشيد از اين همه مزاحمت
شما روش cache براي كم كردن اتصال به بانك پيشنهاد داديد حالا يك سوال در مقايسه حالت cache و ليستها همون (Collections) كدوم بهتره ؟
استفاده از كش يا ليست ها كدوم بهينه تر است ؟
من متوجه منظورتون نمی شم.هر ایتم در cache یک key داره (از نوع string) و یک مقدار از نوع object (البته خصوصیات دیگه ای رو هم مثل وابستگی، انقضا و ... می شه برای این آیتم تعریف کرد). این obejct می تونه یه list باشه، یه string باشه و....

sky_in_iran
پنج شنبه 30 اردیبهشت 1389, 00:11 صبح
استاد منظورم اينه كه كلن از سيستم كالكشن استفاده بشه بهتره يا از كش ؟ به طور مجزا منظورمه ها . مثلا يه ليست (كالكشن) درست كنم كار كنم يا نه اين روش خوب نيست از روش كش كردن استفاده كنم؟
مثلا ميشه يه arraylist تعريف كرد داده ها كه به بانك اضافه ميشه به اينم اضافه كنم بعد هنگام جستجو يا ليست گيري به اين رجوع كنم اين بهتره يا نه
بيام مثلا يك dataset و كش كنم

Vahid_moghaddam
پنج شنبه 30 اردیبهشت 1389, 08:02 صبح
به جای arraylist ها از generic list ها استفاده کنید.
شمل وقتی یه collection تعریف می کنید (در روشی که منظورتون هست)، این collection در هر postback مقدار خودش رو از دست می ده. برای امتحان، یک صفحه ایجاد کنید و روی اون یک button بذارید. کد زیر رو در سمت سرور بنویسید:


List<int> list=null;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
list=new List<int>() {1,2,3};
}
}

protected void Button1_Click(object sender, EventArgs e)
{
list.add(5);
}


در کد بالا ما یه لیست ژنریک از int داریم. می تونید به جای این لیست از یک arraylist استفاده کنید. در page_load این لیست مقدار دهی می شه. در یک مثال واقعی این لیست با مقادیری که از دیتابیس خونده می شه، پر می شه. وقتی روی دکمه کلیک کنید، شما پیغام خطایی دریافت خواهید کرد که لیست ایجاد نشده.
وقتی شما یک list یا arraylist تعریف می کنید و به جای اضافه کردن رکوردها به دیتابیس، این رکوردها رو به لیست اضافه می کنید، این لیست باید جایی نگهداری بشه. برای داشتن این لیست در هر درخواست می تونیم این لیست رو cache کنیم. مثال:


List<int> list=null;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
list=new List<int>() {1,2,3};
Cache.Insert("list", list);
}
}

protected void Button1_Click(object sender, EventArgs e)
{
List<int> list=(List<int>)Cache["list"];
list.add(5);
}


در استفاده از cache نکاتی رو باید در نظر داشت. cache از حافظه سرور استفاده می کنه. پس هر چیزی رو نباید cache کرد. اطلاعات cache شده در سطح application هست یعنی برای تمام درخواست ها می تونه استفاده بشه (بر عکس session که برای هر درخواست متفاوته). بنابراین اطلاعاتی باید cache بشه که برای تمام کاربرها قابل استفاده هست. معمولا اطلاعات مخصوص هر درخواست cache نمیشه. آیتم های موجود در cache می تونن expire بشن. پس در هربار استفاده باید چک کنیم مقداری که می خوایم هنوز وجود داره یا نه.
پیشنهاد می دم در مورد cahce لینک های زیر رو مطالعه کنید:

http://msdn.microsoft.com/en-us/library/xsbfdd8c%28VS.71%29.aspx

http://msdn.microsoft.com/en-us/library/aa478965.aspx

http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=149

http://www.4guysfromrolla.com/articles/100902-1.aspx

http://aspalliance.com/articleViewer.aspx?aId=69&pId=

sky_in_iran
پنج شنبه 30 اردیبهشت 1389, 12:08 عصر
استاد مقدم بازم از توجه شما سپاسگزارم
مثالي كه در باره كالكشن ها زديد درسته اما اگر برنامه ما لايه اي باشه و اين كالكشن و تو لايه بيزينس يا ديتا اكسس بزارم بازم صفحه رفرش بشه از بين ميره ؟ با اين توضيحاتتون يه سوال برام پيش اومد منظورتون از تفاوت كش و سيشن اينه كه سيشن مخصوص همون كاربره كه صفحه رو باز كرده ولي كش عموميت داره ؟

Vahid_moghaddam
پنج شنبه 30 اردیبهشت 1389, 12:24 عصر
1. نه. از بین نمی ره. به شرطی که اون شی دوباره ساخته نشه (استفاده از الگوی singleton برای این لایه ها، انتخاب خوبیه).
2. بله. همونطور که گفتم cache در سطح application هست

sky_in_iran
پنج شنبه 30 اردیبهشت 1389, 19:14 عصر
1. نه. از بین نمی ره. به شرطی که اون شی دوباره ساخته نشه (استفاده از الگوی singleton برای این لایه ها، انتخاب خوبیه).

استاد سپاس از كمكاتون
تو توضيحاتتون نفرموديد حالا اگر سينگل كنم باز اين راه خوبه يا كش يا در يك سطح هستند ؟
در پست هاي قبلي راهنمايي فوق العاده اي كرديد به من من بازم سپاسگزارم تو جريان updatepanel مقالاتي كه آدرس داديد و مطالعه كردم خيلي كمكم كرد حالا يك سوال من حالا از updatepanel استفاده نمي كنم دارم از يكسري امكانات ajax toolkit استفاده مي كنم مثل
Ajax:CascadingDropDown آيا اين حالا اشياي آماده ajax toolkit بازم كارو سنگين ميكنه يا نه استفاده از اينا مشكلي نداره ؟

Vahid_moghaddam
پنج شنبه 30 اردیبهشت 1389, 20:33 عصر
در مورد سوال اول دقیقا نمی دونم. اما چون هر دو از حافظه سرور استفاده می کنن منطقا شباهت هایی به هم دارند. روی item های cache (هنگام expire شدن) کنترل بیشتری دارید.

کنترل های ajax toolkit کنترل هایی هستند که کار زیادی روشون انجام شده. هر روز توسعه بیشتری پیدا می کنن، کامل تر می شن و باگ هاشون بر طرف می شه. ببینید استفاده از update panel هم ایرادی نداره. مهم اینه که به کاری که دارید می کنید اشراف داشته باشید و از هر چیز به طور مناسب استفاده کنید.

sky_in_iran
جمعه 31 اردیبهشت 1389, 21:59 عصر
سلام استاد مقدم از توجه شما بسيار سپاسگزارم انشا الله هميشه موفق باشيد
من بازم سوال دارم : سوالم اينه كه اون تصويري كه از برنامه براتون گذاشتم من همه كاراشو از طريق webmethod همون web servise انجام دادم و با كمك جاوااسكريپ تمام كارارو انجام دادم گريد ساختم و ليست و بقيه اين روشم درسته ؟ اشكال نداره به تعداد زياد از webmethod استفاده كنم؟

Vahid_moghaddam
شنبه 01 خرداد 1389, 12:36 عصر
چه اشکالی داره؟ البته یه نکته رو در مورد webservice در نظر داشته باشید: هر کسی می تونه به webservice شما دسترسی داشته باشه. پس اگر نمی خواید این اتفاق بیفته، از مکانیزم هایی استفاده کنید تا مطمئن بشید درخواست معتبره. از طرف دیگه نوشتن کدهای جاوا اسکریپت رو بهینه کنید. منظورم اینه تا حد امکان فایل های js رو کوچک کنید و بعد از نوشتن اونها و قبل از قرارد دادنشون در هاست، اون ها رو فشرده کنید. تعداد درخواست ها رو هم در نظر داشته باشید. هر requset و reaponse زمان می بره پس تا جایی که ممکنه تعداد اون ها باید کم باشه. نکاتی مثل این ها رو در نظر بگیرید و همچنین مدیریت خطاها رو در سمت کلاینت فراموش کنید (ممکنه فراخوانی یه webmethod موفقیت آمیز نباشه)

از سایت زیر می تونید برای pack کرن فایل های جاوا اسکریپت استفاده کنید:

http://dean.edwards.name/packer/

sky_in_iran
یک شنبه 02 خرداد 1389, 10:39 صبح
استاد مقدم بازم از راهنمايياتون سپاسگزارم
استاد درباره موضوع requset و reaponse كه فرموديد سعي بر كم استفاده كردن باشه خوب در جايي كه چند تا select بهم وابسته داريم چه بايد كرد خوب با هر تغييري در select بايد عمل ارسال و ذريافت انجام بشه!! و يا گريدي و فرض كنيد كه تعداد صفخاتش زياده !! بعضي جاها نميشه از requset و reaponse به تعداد زياد اجتناب كرد . يا به نظر شما خوبه يسري از داده هاي پر مصرف مانند داده هاي select ها رو در سيستم شخص به صورت كوكي درآورد و از اون استفاده كرد و در هنگام پايان كار حذف كرد ؟ يا حتي بعضي از صفحات پر مصرف گريد ؟ نظرتون نصبت به اين مورد چيه ؟ آيا راه ديگر و بهتري هست ؟

Vahid_moghaddam
یک شنبه 02 خرداد 1389, 11:31 صبح
وقتی باید ارسال و دریافت صورت بگیره، باید اتفاق بیفته!

در مورد استفاده از cookie برای هدفی که شما دارید، بخش زیر از مقاله
http://www.eggheadcafe.com/tutorials/aspnet/198ce250-59da-4388-89e5-fce33d725aa7/aspnet-cookies-faq.aspx
رو ببینید (درباره محدودیت های کوکی):


Most browsers support cookies of up to 4096 bytes. THerefore, cookies are best used to store small amounts of data, or even better,only an identifier such as a user ID. This user ID can then be used to identify the user and read user information from a database or other data store. In the case of Forms Authentication, the Forms cookie can store its own expiration time, as well as custom UserData (roles, preferences, etc.) This can eliminate the need to use Session to store small amounts of user-specific data. Forms auth cookies are normally encrypted. Cookie data can be compressed (http://www.eggheadcafe.com/tutorials/aspnet/064b41e4-60bc-4d35-9136-368603bcc27a/7zip-lzma-inmemory-com.aspx) to allow storage of entire classes in .Net. Browsers impose limitations on how many cookies your site can store on the user's computer. Most browsers allow only 20 cookies per site; if you try to store more, the oldest cookies are discarded. Some browsers also put an absolute limit, usually 300, on the number of cookies they will accept from all sites combined.
....
Although cookies can be very useful in your application, you should try to avoid having the application depend on being able to store cookies. Do not use cookies to support critical features. If your application must rely on cookies, you can test to see whether the browser will accept cookies. ASP.NET Session relies on cookies. With ASP.NET, we have the ability to configure the Session as "cookieless" where the SessionId is "munged" onto the URL. You can also set this to "auto" and the runtime will determine which mode to use.



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

http://msdn.microsoft.com/en-us/library/06bh14hk.aspx
http://articles.sitepoint.com/article/dynamic-pages-asp-net