واژه Ajax سرنام عبارت Asynchronous JavaScript and XML و به معني جاوا اسكريپت و XML آسنكرون يا نامتقارن است. ايجكس فناوري جديدي است كه به كمك آن ميتوان اينترفيس يك برنامه تحت وب را طوري ساخت كه وقتي كاربر روي دكمه يا لينكي كليك ميكند، كليه عمليات ارسال اطلاعات و دريافت نتايج در پشت صحنه انجام شود و فقط آن قسمت از اينترفيس كه قرار است اطلاعات جديد را به نمايش درآورد تغيير كند بدون اينكه تمام صفحه از نو بارگذاري شود. در اين مقاله ميخواهيم اين فناوري نوين و تحول آفرين را از جنبههاي مختلف مورد بررسي قرار دهيم و با مباني فني آن آشنا شويم.
كمربندها را ببنديد!
آيا از دنياي كلاسيك وب خسته شدهايد؟ آيا مايليد با چهره جديد وب آشنا شويد؟ آيا ميخواهيد با جديدترين فناوري دنياي برنامهنويسي وب آشنا شويد؟ براي پرواز آماده باشيد! مقصد ما يكي از استانهاي كشور جديد التاسيس Web 2.0 است. ميخواهيم با هم به دنياي هيجان انگيز Ajax سفر كنيم.
در سرزمين ايجكس چهره سايتهاي وب مانند نرمافزارهاي روميزي به نظر ميرسند. اكنون وب خانه دوم اطلاعات ديجيتالي شما است. حالا كه با داشتن يك خط اينترنت پرسرعت ميتوانيد در تمام طول شبانه روز به اينترنت متصل باشيد، وقت آن فرارسيده كه نرمافزارهاي تحت وب نيز متحول شوند و كاركرد و قابليتي مانند نرمافزارهاي روميزي داشته باشند. به اين ترتيب فاصله و تفاوت ميان نرمافزارهاي دسكتاپ و نرمافزارهاي آنلاين ناپديد ميشود. ديگر لازم نيست وقتي روي دكمه submit كليك ميكنيد منتظر بارگذاري مجدد صفحه وب بمانيد. همهچيز فورا و به سرعت اتفاق ميافتد.
تصور كنيد به صورت آنلاين در حال خواندن نامههاي الكترونيكي خود در يكي از سايتهاي ياهو يا جيميل هستيد. فورا يادتان ميافتد كه بايد به كسي نامهاي بفرستيد. لازم نيست صفحهاي كه در حال مطالعه آن هستيد را ترك كنيد و يا با استفاده از ترفندهايي مانند رايت كليك و فرمان Open in New window يك پنجره جديد بازكنيد و منتظر بارگذاري مجدد صفحه شويد. شما فقط ميخواهيد يك پنجره جديد باز كنيد كه داخلش نامه خود را تايپ كنيد.
چه نيازي به بارگذاري مجدد آنهمه اطلاعات جزئي و جنبي (مانند لوگوي سايت، نام آيدي شما و ...) است كه در اطراف اطلاعات اصلي به نمايش درآمدهاند؟ ايجكس همين كار را براي شما ميكند. وقتي كه نامه خود را ارسال كرديد نيز فقط همان پنجره بسته ميشود و چند بايت براي سايت مقصد ارسال ميشود و اينترفيس صندوق پستي نامههاي شما بدون اينكه تكان بخورد و يا دوباره به نمايش درآيد همچنان پيش چشم شما و منتظر فرمان بعدي است. در دنياي ايجكس دكمههاي Back و Forward مرورگر معني و كاربرد خود را تقريبا از دست ميدهند.
همه دكمههاي مورد نياز داخل اينترفيس سايت موجود است. برخلاف جهان Web 1.0، در دنياي ايجكس گشت و گذار در وب لزوما خطي نيست. اگر ميخواهيد از يك فروشگاه الكترونيكي خريد كنيد، ميتوانيد محصول مورد نظرتان را به روش drag&drop داخل سبد بيندازيد و با فشردن دكمه نهايي، خريد خود را ثبت كنيد. پيغام ثبت موفقيت آميز سفارش براي شما نمايش داده ميشود و كار تمام است. لازم نيست از صفحه الف به صفحه ب و سپس از آنجا به صفحه ج برويد.
آجاكس چيست؟
اين واژه را اولين بار جسي جيمز گرت (Jesse James Garrett)، برنامهنويسي از شركت Adaptive Path در مقالهاي با عنوان <ئgt; بهكار برد. ايجكس سرنام عبارت Asynchronous JavaScript and XML و به معني تركيب نامتقارن جاوا اسكپريپت و XML است.
چرا نامتقارن؟ چون تركيب اين دو فناوري به شما كمك ميكند قسمتي از يك صفحه وب را بروز كنيد بدون اينكه لازم باشد <٦gt; با اين عمل، كل آن صفحه از نو بارگذاري شود. اين عمليات توسط شيء و فرماني به نام XMLHttpRequest انجام ميشود كه سالها پيش، هنگام معرفي نسخه 4 مرورگر اينترنت اكسپلورر وارد اين نرمافزار شده و به دليل قابليتهاي جالبي كه دارد، اين روزها تمام مرورگرهاي معروف و قدرتمند وب مانند فايرفاكس و اپرا از آن پشتيباني ميكنند. به كمك اين شيء ميتوانيد برنامههايي به زبان جاوا اسكريپت بنويسيد كه در پشت صحنه يك صفحه وب اطلاعاتي را به سرور بفرستند و دادههايي را دريافت كنند.
ايجكس اساسا رهاوردي از دنياي جاوا است و بار ديگر فناوري جاوا و زبان اسكريپتنويسي وابسته به آن را در كانون توجه برنامهنويسان قرار داده است. اما خبر خوب اينست كه چون همه پلتفرمهاي برنامهنويسي وب از قبيلPHP ،ASP.NET و JSP از جاوا اسكريپت و XML پشتيباني ميكنند، فناوري ايجكس در همه اين پلاتفرمها پيادهسازي شده و حتي جالب است بدانيد كه تعداد ماژولهاي ايجكس نوشته شده براي دات نت و PHP بيشتر از انواع جاوايي آن است.
مايكروسافت كه سالها پيش از شيء XMLHttpRequest در نرمافزار Outlook Web Access استفاده كرد و جزو اولين ترويجدهندگان اين تكنيك به شمار ميرود اخيرا نرمافزاري به نام Atlas معرفي كرده كه مخصوص برنامهنويسي مبتني بر ايجكس است. اما چون ايجكس بر اساس جاوا كار ميكند بديهي است كه جنبش اپن سورس و خيل عظيم برنامهنويسان جاوا نيز بيكار نمانده و ميكوشند تا دير نشده Ajax را به قلب دنياي نرمافزارهاي آزاد بياورند و از انحصاري شدن آن جلوگيري كنند تا اين فناوري به استاندارد جديد وب تبديل شود. به نظر ميرسد كه آنها موفق بودهاند زيرا حتي پيادهسازيهاي دات نتي ايجكس نيز اغلب به صورت اپن سورس است.
مكانيزم Ajax
جسي جيمز گرت در مقاله معروف خود شيوه عمل ايجكس را چنين توضيح ميدهد: هر عمل از سوي كاربر كه به طور معمول موجب توليد يك تقاضاي HTTP شود به جاي ارسال مستقيم به وب، موجب فراخواني يك فرمان جاوا اسكريپتي و هدايت آن به موتور ايجكس ميشود. هر نوع پاسخي به كاربر از سوي سرور (مانند كنترل صحت دادههاي وارد شده در يك فرم ورود اطلاعات، ويرايش اطلاعات در حافظه و حتي برخي از انواع هدايت كاربر در سايت) نيازي به ارسال يك صفحه جديد به سمت كاربر ندارد و تنها همان قسمتي كه بايد تغيير كند بروز ميشود.
به طور سنتي وقتي كاربر فرمي را پرميكند و به سايت ارسال ميكند، وب سرور با بارگذاري مجدد يا تازهسازي صفحه (refresh) و نمايش يك پيغام و يا نتيجه پردازش اطلاعات، به او پاسخ ميدهد و به همين دليل هم وقت سرور براي ارسال كل محتواي آن صفحه گرفته ميشود و هم كاربر بايد براي دريافت كامل آن صفحه منتظر بماند؛ كه نتيجه آن كاهش بازده سرور، مصرف پهناي باند و تلف شدن وقت و هزينه است. اما بهكارگيري تكنيك ايجكس اين مشكلات را به طرز قابلملاحظهاي كاهش ميدهد.
گوگل باز هم پيشتار
همانطور كه جسي جيمز گرت مينويسد، گوگل در ميان سايتهاي اينترنتي از نظر ميزان بهكارگيري فناوري ايجكس پيشتاز است و اين تكنيك را در نرمافزار سايتهاي Orkut ،Gmail ،Google Groups، سيستم Google Suggest و سرويس Google Maps به كار برده است. همچنين به گفته گرت بسياري از قابليتهاي دوست داشتني Flickr، سايت به اشتراكگذاري عكس ياهو، و نيز موتور جستجوي A9 در سايت آمازون بر اساس ايجكس كار ميكنند.
گرت مينويسد: اگر موتور ايجكس براي پاسخ دادن به كاربر نيازمند گرفتن اطلاعاتي از سمت سرور است، اگر قرار است دادهها براي پردازش به سرور ارسال شوند، اگر لازم است كدهاي اضافي براي نمايش تغييرات اينترفيس بارگذاري شوند، اگر نياز به بازيابي و بيرون كشيدن اطلاعات از بانك اطلاعاتي باشد، همه اين كارها بهطور آسنكرون و با استفاده از XML، بدون اينكه وقفهاي در تماس ميان كاربر و اينترفيس نرمافزار بهوجود آيد توسط موتور ايجكس انجام خواهد شد.
مزايا و معايب Ajax
طي سالهاي اخير صنعت نرمافزار در عرصه وب به سوي توليد سيستمهايي حركت كردهاست كه هرچه بيشتر مستقل از نوع سيستمعامل و مرورگري باشد كه كاربر استفاده ميكند.
نگاهي به سير تحولات مربوط به زبانهاي برنامهنويسي وب مانند PHP و ASP از يكسو و كاهش اقبال برنامهنويسان به فناوريهايي همچون ActiveX و Java Applet در سمت كلاينت از سوي ديگر، مويد اين نكته است.
در واقع يكي از دلايل مهم توجه دنياي نرمافزار به فناوري ايجكس همين است. اين دستاورد برخلاف فناوريهايي مانند Macromedia Flash نيازمند نصب هيچ نرمافزار الحاقي و اضافي روي مرورگر نيست و همين حالا بستر لازم براي پيادهسازي ايجكس روي ميليونها سايت و مرورگر وب وجود دارد. در اين ميان، اتكاي ايجكس بر فناوري XMLاز اهميت ويژهاي برخوردار است.
زيرا XML ماهيتا يك فناوري باز است كه انعطافپذيري زيادي دارد و هماكنون در مقياس گستردهاي در نرمافزارهاي تحت وب، از سيستمهاي تجارتالكترونيك گرفته تا نرمافزارهاي مديريت محتواي سايتهاي وب و فناوريهايي همچون وبسرويس، RSS و حتي پادكستينگ مورد استفاده قرار ميگيرد.
ظهور ايجكس نشان ميدهد كه فناوري XML هنوز قابليتهاي كشفنشدهاي دارد كه همچنان بكر ماندهاند و ميتوانند منشا تحولات بزرگ در سيستمهاي اطلاعاتي و ارتباطي باشند.
پياده سازي Ajax
يكي ديگر از مشكلاتي كه در ارتباط با ايجكس به نظر ميرسد اينست كه كار زيادي از برنامهنويس ميطلبد و در حال حاضر اجراي موفقيتآميز يك اينترفيس حرفهاي مبتني بر ايجكس كاري بسيار دشوار و وقتگير است. يعنيAjax به همان اندازه كه كار بازديدكنندهها را آسان ميكند، كار برنامهنويسان را مشكل ميكند! با اين حال ايجكس روي پلتفرمهاي مختلف پيادهسازي شده و مجموعه ابزارهاي مختلفي براي تسهيل كار برنامهنويسان عرضه شده است تا تجربه شيرينتري از Ajax داشته باشند.
برنامهنويسان ASP.NET در صورتي كه از نسخه دات نت 1.1 استفاده ميكنند ميتوان از ماژولAjax.NET استفاده كنند كه اولين پيادهسازي داتنتي ايجكس و رايگان است. مايكروسافت در ASP.NET 2.0 اين فناوري را با نام Atlas وارد پلتفرم كرده است كه علاقهمندان ميتوانند يكراست سراغ آن بروند.
براي پلتفرم جاوا نيز چندين پيادهسازي مختلف، اغلب اپن سورس، وجود دارد. از جمله AjaxAnywhere و AjaxTagsرا ببينيد. همچنين چندين پيادهسازي مخصوصPHP ميتوانيد پيدا كنيد. ماژولهاي CPAINT و xajax از آن جملهاند. ماژول CPAINT براي ASP نيز قابل استفاده است. چند ماژول ديگر هم مانند GeneXus وجود دارند كه مالتي پلتفرم هستند. براي هريك از پلتفرمهاي Perl ،ColdFusion و Python نيز دستكم يك پيادهسازي معروف وجود دارد.