CSSHTMLPHPبرنامه نویسیجاواجاوا اسکریپتمیم تک 18

ایجکس یا Ajax چیست و چه کاربرد هایی دارد ؟ (قسمت دوم)

ایجکس یا Ajax چیست و چه کاربرد هایی دارد ؟ (قسمت دوم)

معرفی ایجکس

واژه ی Ajax یا ایجکس برای اولین بار در مقاله ای تحت عنوان ” Ajax رهیافت جدیدی در برنامه های تحت وب” توسط جسی جیم گریت برنامه نویسی از شرکت Adaptive Path مطرح گردید. در مقاله ی قبلی یعنی Ajax چیست و چه کاربرد هایی دارد ؟ (قسمت اول) گفتیم که Ajax مخفف Asynchronous JavaScript and XML به معنی ترکیب نامتقارن JavaScript و XML است. علت نامتقارن بودن آن این است که ترکیب این دو فناوری کمک می کند قسمتی از صفحه را بروزرسانی شود بدون اینکه لازم باشد هم زمان و متقارن با این عمل کل صفحه بارگذاری شود.

Ajax اساسا رهیافتی از دنیای جاواست.

کدنویسی ایجکس پیچیده است که در این مقاله نمی‌گنجد، بهتر است کمی با شکل کدهای ایجکس آشنا شویم. کد زیر نمونه‌ای از اعلان شی ءXMLHttpRequest را نشان می‌دهد:

< html >

< head >
< script type = ” text/javascript ” >
function loadXMLDoc ( )
{
…. کد ها و دستورات Ajax در اینجا قرار می گیرد …
}
< /script >
< /head >

< body >
< div id=”myDiv” >
متن این قسمت را با Ajax تغییر دهید
< /div >
< button type=”button” onclick=” loadXMLDoc() “ > Change Content < /button >
< /body >

< /html >

مزایای استفاده از ایجکس چیست ؟

رویکرد ایجکس به سمت فناوری وب سرویس قابل توجه است. از آنجا که Ajax تا حد زیادی به معماری XMLHttpRequest وابسته است، این قابلیت را دارد که فرامین ارسال و دریافت اطلاعات را نه فقط از طریق سایت اصلی نمایش دهنده یک صفحه وب، بلکه از طریق سایت های دیگری که احتمالا اطلاعات خود را بر بستر وب سرویس و XML قرار داده‌اند نیز دریافت کند. بنابراین ایجکس بالقوه یک فناوری سازگار با وب سرویس نیز هستند.

مزیت مهم دیگر Ajax بهره‌گیری آن از استاندارد CSS است.

استانداردی که به تنهایی منشا تحولات دیگری در زمینه اینترفیس نرم‌افزار های وب است و در آینده بسیار نزدیک به وجه غالب صفحه‌آرایی و اینترفیس سایت‌های وب تبدیل خواهد شد. توجه ایجکس به CSS نشان می‌دهد که این فناوری همزمان با به‌کارگیری جاوا اسکریپت و XML برای مدیریت داده‌ها، از استاندارد پیشرفته‌ای برای اینترفیس وب استفاده می‌کند و می‌توان حقیقتا آن را یک فناوری مرتبط با اینترفیس ( و نه فقط تعامل میان کلاینت و سرور) تلقی کرد.

معایب استفاده از ایجکس چیست ؟

با این وجود، ایجکس معایبی نیز دارد و این معایب موضوع بحث بسیاری در محافل برنامه‌نویسی روی اینترنت است. یکی از مسائلی که به عنوان ایراد مطرح شده، دشواری تغییر عادت کاربران در استفاده از کلیدهای Back و Forward و Refresh در مرورگرهای وب است. یکی از مشکلات برنامه‌نویسان وب این است که یا باید کاربر را عادت دهند که هرچه کمتر از این دکمه‌ها استفاده کند و یا نرم‌افزار خود را طوری بنویسند که اگر کاربر سهوا یا عمدا از این دکمه‌ها استفاده کرد، نرم‌افزار دچار اشتباه و خطا در تفسیر عمل کاربر نشود.

به عنوان مثال هنوز بسیاری از سایت‌های تجارت الکترونیکی که به کار فروش محصولات مشغولند هنگام طی شدن مراحل نهایی خرید آنلاین به کاربر هشدار می‌دهند که حین پردازش یک سفارش (یعنی درست در لحظه‌ای که فرمان نهایی از سوی کاربر ارسال شده است و هنوز صفحه نمایش پیغام ثبت موفقیت‌آمیز سفارش یا عدم ثبت آن برای وی نمایش داده نشده) از فشردن کلید Refresh جدا پرهیز کنند وگرنه ممکن است از کارت اعتبار آنها دوبار پول کسر شود. همچنین استفاده از دکمه‌های Back و Forward در عملیاتی که به آسانی برگشت‌پذیر نیستند ممکن است باعث گیج شدن کاربر است.

مثلا اگر نامه‌های داخل صندوق پستی خود را پاک کنید، استفاده از دکمه Back هرگز این عمل را Undo نمی‌کند. همچنین اگر یک قلم کالا به سبد خرید آنلاین خود اضافه کنید، فشردن دکمه‌ Back ممکن است در ظاهر چنین نشان دهد که آن قلم کالا مجددا از سبد برداشته شده اما در سمت سرور همچنان در سبد خرید کاربر باشد. از آنجا که فناوری ایجکس عمل Navigation یا راهبری در یک سایت را به روندی غیر‌خطی تبدیل می‌کند، تمام این مشکلات به شکل حادتری ممکن است بروز کند.

در واقع با حضور Ajax، کارکرد سیستم History مرورگر به مساله‌ای بغرنج تبدیل می‌شود. زیرا برنامه‌نویس یا باید با گنجاندن دکمه‌ها و فرامین اضافی، مکانیزم Undo را بازسازی کند و یا موتور ایجکس را طوری بنویسد که فشردن دکمه Back خود به خود موجب احظار فرمان Undo شود.

در هر دو صورت کار برنامه‌نویس آسان نخواهد بود. البته در این زمینه ترفندها و تکنیک‌هایی هم ابداع شده است. از جمله، استفاده از تگ IFRAME مخفی در اینترفیس صفحه که موتور ایجکس بتواند در صورت فشرده شدن دکمه Back از سوی کاربر، نسخه‌های پیشین نمایش داده شده از اینترفیس را از History  مرورگر بیرون بکشد و دوباره در چرخه عملیات موتور ایجکس وارد کند. این ترفند هم‌اکنون در سرویس Google Maps استفاده می‌شود.

مشکل دیگری که در رابطه با ایجکس وجود دارد، بی معنی شدن مفهوم Bookmark است.

بازهم مکانیزم غیرخطی ایجکس مشکل ساز می‌شود. آیا شما می‌توانید در نرم‌افزارهای معمولی دسکتاپ یک لحظه مشخص را Bookmark کنید و دوباره به آن برگردید؟ بعضی از نرم‌افزارها مانند فتوشاپ سیستم (Action history) این‌کار را انجام می‌دهند، ولی اغلب نرم‌افزارها چنین نیستند. در واقع به سختی می‌توان از لحظات مختلف یک نرم‌افزار عکس گرفت و snapshot تهیه کرد.

این‌کار به یک منبع داده پیچیده نیاز دارد که هم حالت‌های مختلف اینترفیس و هم وضعیت‌های متفاوت داده‌ها را قبل و پس از تغییرات در خود نگه دارد. البته درمورد Ajax راه هایی در این زمینه وجود دارد، از جمله استفاده از nanchor  در HTML که پس از علا‌مت  َ در یک URL  ظاهر می‌شود.

از آنجایی که جاوا اسکریپت امکان به روزرسانی داینامیک آنکورها را دارد، بعضی برنامه‌نویسان پیشنهاد کرده‌اند که از این راه برای نگهداری حالات مختلف یک برنامه مبتنی بر ایجکس استفاده شود. تکنیکی که ممکن است در زمینه حل مشکل دکمه‌های Back و Forward نیز سودمند واقع شود.

یک مشکل عمده در ارتباط با ایجکس این است که این فناوری به شدت متکی به XMLHttpRequest است و این شیء به دلایل امنیتی طی ماه‌های اخیر هرچه بیشتر و بیشتر در نسخه‌های جدید مرورگرها محدود شده است. زیرا اگر هر کلاینتی بتواند از هر نقطه‌ای به هر سروری این فرمان را بفرستد، آنگاه تهدید‌های امنیتی علیه سایت‌ها افزایش می‌یابد. محدودیت‌های جدید اعمال‌شده در نسخه‌های اخیر مرورگرها موجب شده که فرمان XMLHttpRequest  به‌غیر از سایتی که صفحه وب از آنجا آمده است نتواند با سایت دیگری دیالوگ داشته باشد و این مسئله در تناقض با کاربرد ای‌جکس در زمینه وب‌سرویس است.

را حل هایی برای حل این مشکل وجود دارد از جمله این‌که شی ‌ء XMLHttpRequest می‌تواند تقاضای دیالوگ با سایت‌های دیگر را به یک وب سرویس روی سایتی که صفحه وب از آنجا آمده است بفرستد و این وب‌سرویس (که روی میزبان سایت قرار دارد و با تمام اینترنت در ارتباط است) به صورت یک واسطه عمل کند و تقاضاهای مورد نظر را برای سایت مقصد ارسال کند. این وب سرویس‌های واسطه اصطلاحا Application Proxy نامیده می‌شوند.

البته ایجکس مشکلات کوچک و جانبی دیگری هم دارد که چندان مایه نگرانی نیست ولی به هرحال قابل لمس هستند. به عنوان نمونه، نرم‌افزارهای مبتنی بر ایجکس از حجم زیادی جاوا اسکریپت استفاده می‌کنند که همه اینها در هر session دست‌کم یک‌بار باید روی مرورگر بارگذاری شوند. بنابراین اولین باری که چنین اینترفیسی بارگذاری می‌شود صفحه وب آن‌قدر سنگین می‌شود که حتی با ارتباط باند پهن هم چند لحظه طول می‌کشد که صفحه بارگذاری شود.

در چنین شرایطی نوشتن یک موتور ایجکس هوشمند که با کمتر میزان کد بتواند بهترین کارکرد را داشته باشد، خود به یک چالش برنامه‌نویسی تبدیل می‌شود؛ ضمن این‌که کاربران وب در کشورهایی که سرعت دسترسی به اینترنت در آنها به طور معمول زیاد نیست باید هنگام بارگذاری صفحات وب این‌چنینی صبر پیشه کنند و برنامه‌نویسان نیز مراقب باشند تا در صورتی که به دلیل کندی خط یا قطع شدن‌ها لحظه‌ای آن، کدهای جاوا اسکریپت به طور کامل روی مرورگر بارگذاری نشد، نرم‌افزار دچار خطا و اشتباه نشود و بتواند این مشکلات را از طریق بارگذاری مجدد و هوشمندانه کد جاوا اسکریپت روی کلاینت، مدیریت کند.

ارسال پاسخ