A B C D
سه شنبه 15 شهریور 1390, 11:41 صبح
بنده خیلی وقتا دیدم که لود شدن یه صفحه ای، حالا چه به روش کلاسیک و چه به روش ایجکس، مدت مدیدی طول میکشه و بعضی وقتا اصلا میشه گفت که ارتباط به یه نوعی قطع شده و هیچ پاسخی دریافت نخواهد شد، ولی کاربر ممکنه مدت زیادی منتظر بمونه و آخرش هم به هیچی نرسه. گاهی که اصلا بنظر میرسه یک ساعت هم منتظر بمونی تکلیف این لودینگ ها مشخص نمیشه و ظاهرا مرورگر هیچ Timeout ای هم نداره.
بنده یه ایده ای دارم که بنظرم میتونه مفید باشه و شکل ایجکسی این کاربردها رو هوشمندتر بکنه.
میتونیم برای درخواستهای ایجکس مورد نظر یک تایمر هم بذاریم و مثلا در برنامه تشخیص بدیم که پاسخ عملیات ایجکسی که در جریان هست بیش از حد به تاخیر افتاده (مثلا بعد از 30 ثانیه تکلیفش مشخص نشده و هنوز درحالت انتظار باقی مونده) و بعد اون درخواست قبلی رو Abort کنیم و یک درخواست جدید بفرستیم.
میتونیم این جریانات رو یه جوری به کاربر هم نشون بدیم. مثلا تصویر لودینگ متوقف بشه و دوباره استارت بشه و یه پیام موقت و کوتاه هم به شکلی نشون میدیم که کاربر رو متوجه میکنه که برنامه داره بصورت هوشمند چه کاری انجام میده (دوباره تلاش میکنه). البته احتمالا باید تعداد این تلاشها رو به تعداد مشخصی محدود کنیم و در نهایت اگر برنامه موفق به دریافت پاسخ نشد، Retry ها خاتمه یافته و یه پیام خطا داده بشه یا در محل مورد نظر بجای محتوایی که قرار بوده دریافت بشه درج بشه.
تنها چیزی که منو به شک وا میداره اینه که شاید این روش از بعضی نظرها اصولی نباشه، چون بصورت طبیعی ممکنه به عللی منجمله بار سنگین سرور، دریافت پاسخ خیلی زیادتر از حد معمول طول بکشه. البته فکر میکنم 30 ثانیه زمان قابل قبولی باشه.
ضمنا اینکه مرورگرها خودشون Timeout ندارن هم شک برانگیزه. ولی فکر میکنم بتونیم این مسئله رو با این دلیل توجیه بکنیم که تصمیم این امر بر عهدهء برنامه نویس هست که باید تشخیص بده عملیات مورد نظر از نظر ماهیت و اهمیت طوری هست که وجود یک Timeout براش مشکل ساز نباشه یا خیر. چون واقعا در بعضی موارد احتمالا نباید هیچ دخالتی کرد و سرخود درخواست مجدد فرستاد یا درخواست رو Abort کرد و این رفتار ممکنه سایدافکت های مضری داشته باشه.
ضمنا نمونه های کاربرد این روش رو در سایتها و نرم افزارهای معتبر زیاد ندیدم، اما فکر کنم یه جاهایی هم دیده باشم! دقیقا یادم نیست. حالا اینم خودش سواله که چرا کمتر سایتی این روش رو اعمال کرده. البته ممکنه این امر بخاطر سرعت و کیفیت بالاتر ارتباطات اینترنتی اونا بوده باشه که به ندرت دچار وضعیت ها و خطاهایی میشن که برای ما نامعمول نیستن.
بنده یه ایده ای دارم که بنظرم میتونه مفید باشه و شکل ایجکسی این کاربردها رو هوشمندتر بکنه.
میتونیم برای درخواستهای ایجکس مورد نظر یک تایمر هم بذاریم و مثلا در برنامه تشخیص بدیم که پاسخ عملیات ایجکسی که در جریان هست بیش از حد به تاخیر افتاده (مثلا بعد از 30 ثانیه تکلیفش مشخص نشده و هنوز درحالت انتظار باقی مونده) و بعد اون درخواست قبلی رو Abort کنیم و یک درخواست جدید بفرستیم.
میتونیم این جریانات رو یه جوری به کاربر هم نشون بدیم. مثلا تصویر لودینگ متوقف بشه و دوباره استارت بشه و یه پیام موقت و کوتاه هم به شکلی نشون میدیم که کاربر رو متوجه میکنه که برنامه داره بصورت هوشمند چه کاری انجام میده (دوباره تلاش میکنه). البته احتمالا باید تعداد این تلاشها رو به تعداد مشخصی محدود کنیم و در نهایت اگر برنامه موفق به دریافت پاسخ نشد، Retry ها خاتمه یافته و یه پیام خطا داده بشه یا در محل مورد نظر بجای محتوایی که قرار بوده دریافت بشه درج بشه.
تنها چیزی که منو به شک وا میداره اینه که شاید این روش از بعضی نظرها اصولی نباشه، چون بصورت طبیعی ممکنه به عللی منجمله بار سنگین سرور، دریافت پاسخ خیلی زیادتر از حد معمول طول بکشه. البته فکر میکنم 30 ثانیه زمان قابل قبولی باشه.
ضمنا اینکه مرورگرها خودشون Timeout ندارن هم شک برانگیزه. ولی فکر میکنم بتونیم این مسئله رو با این دلیل توجیه بکنیم که تصمیم این امر بر عهدهء برنامه نویس هست که باید تشخیص بده عملیات مورد نظر از نظر ماهیت و اهمیت طوری هست که وجود یک Timeout براش مشکل ساز نباشه یا خیر. چون واقعا در بعضی موارد احتمالا نباید هیچ دخالتی کرد و سرخود درخواست مجدد فرستاد یا درخواست رو Abort کرد و این رفتار ممکنه سایدافکت های مضری داشته باشه.
ضمنا نمونه های کاربرد این روش رو در سایتها و نرم افزارهای معتبر زیاد ندیدم، اما فکر کنم یه جاهایی هم دیده باشم! دقیقا یادم نیست. حالا اینم خودش سواله که چرا کمتر سایتی این روش رو اعمال کرده. البته ممکنه این امر بخاطر سرعت و کیفیت بالاتر ارتباطات اینترنتی اونا بوده باشه که به ندرت دچار وضعیت ها و خطاهایی میشن که برای ما نامعمول نیستن.