در بخش اول ضمن بررسی تاثير متقابل وب بر نرم افزار ، مروری داشتيم به وب ايستا و وب پويا و اين كه برای انجام پردازش های مورد نياز در برنامه های وب می توان از امكانات و فناوری های متعددی در سمت سرويس گيرنده و سرويس دهنده استفاده كرد . هدف از بيان مطالب فوق ، پاسخ به اين سوال بود كه چرا به وجود يك فناوری ديگر نظير Ajax نياز است ( گرچه Ajax يك فناوری نيست و مجموعه ای از فناوری ها را شامل می شود ) .
با اين كه ايده فناورهائی نظير Ajax در گذشته نيز وجود داشته است و پياده كنندگان برنامه های وب در زمان خود با بكارگيری برخی فناوری ها و ترفندها توانسته بودند مشكل خود را تا حدود زيادی برطرف نمايند ولی گذشت زمان و گسترش باور نكردنی اينترنت ، باعث شد تا استفاده از بستر فوق برای ارائه سرويس های online در دستور كار اكثر سازمان ها و شركت ها در اقصی نقاط جهان قرار بگيريد . همين موضوع باعث شد كه دگر باره جامعه بزرگ طراحان و پياده كنندگان برنامه های وب اين نياز را احساس كنند كه به يك راه حل جامع و سيستماتيك برای برخورد با مسائل خود ( خصوصا" تعامل با كاربر ) در دنيای نوين برنامه نويسی وب نياز دارند . دنيائی كه در آن دقت و سرعت در ارائه خدمات online با بكارگيری كمترين منابع و توليد بيشترين بهره وری ، رمز ماندگاری يك سازمان در مدار رقابت و پيشرفت است . همين امر باعث شد كه شركت های بزرگ توليد كننده نرم افزار و خدمات online نيز دست به كار شوند و چيزی را خلق كنند كه ما امروزه از آن با نام Ajax ياد می كنيم .
در اين بخش به بررسی موارد زير خواهيم پرداخت :


  • تولد Ajax و ريشه يابی علت انتخاب اين نام
  • Ajax و فناوری های مرتبط با آن
  • اصول حاكم بر فناوری Ajax .
  • نحوه كاركرد Ajax در برنامه های وب

تولد Ajax
در فوريه سال 2005 ، Jesse James Garrett از Adaptive Path مقاله ای را با عنوان " يك رويكرد جديد به برنامه های وب " بر روی وب سايت خود منشتر كرد . وی در اين مقاله ضمن اشاره به اين موضوع كه فاصله بين برنامه های وب و desktop در حال از بين رفتن است ، به بررسی دو نمونه از برنامه های وب جديد با نام Google Suggest و Google Maps پرداخته بود . Garrett پس از تشريح نحوه عملكرد برنامه های فوق ، برای اولين مرتبه از واژه Ajax در مقاله خود استفاده كرد .
وی در مقاله خود دنيائی را پيش بينی كرده بود كه در آن برنامه های وب از لحاظ قابليت دستيابی ، پاسخ گوئی و سادگی قابل مقايسه با برنامه های desktop خواهند شد .

Ajax چيست ؟

  • Ajax برگرفته شده از Asynchronous JavaScript XML است و مشتمل بر مجموعه ای از فناوری ها است ، نه صرفا" يك فناوری .
  • Ajax ، اساس و پايه چيزی است كه امروزه از آن با نام وب 2 نام برده می شود ( نسل جديد وب ) . ايده اصلی ، ايجاد برنامه های وبی است كه دارای شكل ظاهری و توانمندی هائی مشابه با برنامه های desktop باشند .
  • Ajax چي‍زی بيشتر از يك نگرش جديد به برنامه های وب نيست . نگرشی كه در آن صرفا" يك حجم اندك از اطلاعات بين سرويس گيرنده و سرويس دهنده با هدف افزايش تعامل كاربر با برنامه ، مبادله می گردد .
  • Ajax ، مشتمل بر مجموعه ای از فن آوری ها است كه هر يك دارای جايگاه مختص به خود می باشند :

    - فن آوری های استاندارد presentation نظير XHTML و CSS
    - بهنگام سازی پويای يك صفحه مستقر شده در حافظه با استفاده از DOM ( برگرفته شده از Document Object Model )
    - مبادله و پردازش داده با استفاده از XML (فرمت مبادله داده ) و XSLT ‌( تبديل XML به XHTML )
    - بازيابی داده غيرهمزمان با استفاده از XMLHttpRequest ( كارگزار اوليه مبادله اطلاعات )
    و جاوا اسكريپت كه همه چيز را به يكديگر مرتبط می نمايد و از آن برای برنامه نويسی Ajax engine استفاده می گردد .

  • در دنيای واقعی ، از تمامی فناوری های فوق در Ajax استفاده می گردد ولی به وجود HTML/XHTML ، DOM و Javascript بيش از همه نياز است چون :
    از XHTML برای نمايش اطلاعات استفاده می گردد .
    از DOM برای تغيير بخش هائی از يك صفحه XHTML بدون نياز به load مجدد صفحه استفاده می گردد.
    از جاوا اسكريپت ، برای مقداردهی اوليه ارتباط بين سرويس گيرنده و سرويس دهنده و بهنگام سازی صفحات وب به كمك DOM استفاده می گردد .

  • يك عنصر اساسی و مهم ديگر كه در مقاله Garrett به آن اشاره نشده است ، ضرورت انجام پردازش های سمت سرويس دهنده است . تمامی فناوری های اشاره شده ( در پاراگراف قبل ) ، در ارتباط مستقيم با Ajax engine سمت سرويس گيرنده می باشند . بدون وجود يك سرويس دهنده مطمئن و پاسخگو به منظور ارسال محتويات برای Ajax engine ، در عمل Ajax فاقد كارآئی لازم خواهد بود . صرفنظر از فناوری استفاده شده در سمت سرويس دهنده ( نظير PHP و يا ASP.NET ) ، می بايست اين اطمينان حاصل گردد كه داده با فرمت صحيح برای Ajax engine ارسال می گردد .
  • از شی XMLHttpRequest درون جاوا اسكريپت برای ارتباط با سرويس دهنده استفاده می گردد تا در ادامه بتوان داده برگردانده شده از سرويس دهنده ( با فرمت Xml و يا متن معمولی ) را پردازش كرد .
  • از DHTML و CSS برای نمايش نتايج در مرورگر استفاده می گردد .
  • هدف از كنارهم قرار گرفتن تمامی فناوری های اشاره شده ، اين است كه شكل ظاهری برنامه های وب و نحوه پاسخ گوئی آنها به خواسته كاربران مشابه برنامه های desktop گردد .

همانگونه كه در نام اين فناوری مشخص است ، Ajax مشتمل بر مجموعه ای از فناوری ها است : Asynchronous JavaScript XML

  • غيرهمزمان و يا asynchronous بدين معنی است كه مرورگر لازم نيست منتظر بماند تا داده از سرويس دهنده برگردانده شود و می تواند به محض دريافت داده آن را پردازش نمايد . به عبارت ديگر ، انتقال داده در پس زمينه انجام شده و مرورگر مجبور به توقف و انتظار برای تحقق اتفاقی نخواهد بود .
    رويكرد فوق نشاندهنده يكی از ويژگی های مهم و حياتی Ajax است . در چنين مواردی‌، می توان داده را پس از ارسال توسط سرويس دهنده ، پردازش كرد . لازم نيست تمامی برنامه را معطل رسيدن داده از سمت سرويس دهنده كرد .
    در صورتی كه لازم است پردازش های سمت سرويس گيرنده منتظر دريافت داده بمانند ، مكانيرم دريافت و پردازش داده می بايست بطور همزمان انجام شود . در صورتی كه يك ارتباط ضعيف بين سرويس گيرنده و سرويس دهنده برقرار شده باشد اين موضوع می تواند عملكرد و موفقيت يك برنامه وب را با مشكل مواجه نمايد .

  • بخش جاوا اسكريپت واژه Ajax نيز بسيار مهم است چراكه بالفعل شدن پتانسيل های Ajax در مرورگر توسط آن محقق می گردد . Ajax به كمك جاوا اسكريپت با سرويس دهنده ارتباط خود را برقرار می نمايد و در ادامه نيز داده برگردانده شده از سرويس دهنده را پردازش می نمايد .
  • بخش xml واژه Ajax دارای چه مسئوليتی است ؟ XML به عنوان يك استاندارد جهانی در عرصه وب مطرح است و به كمك آن می توان از يك روش مبتنی بر متن برای مبادله داده در عرصه اينترنت استفاده كرد . يكی از دلايل مهم گسترش xml ، ماهيت مبتنی بر متن آن است . با توجه به اين كه طراحی اينترنت بگونه ای انجام شده بود تا بتواند مستندات مبتنی بر متن نظير اسناد HTML را نمايش دهد ، وجود xml به منزله قلابی است كه می توان آن را دور اينترنت انداخت و به صيد داده پرداخت. داده ئی كه به همراه ساختار خود می تواند امكان پردازش را در ساير سيستم ها فراهم نمايد . به همين دليل است كه برنامه های Ajax بگونه ای نوشته می گردند تا بتوانند بر روی داده برگردانده شده از سرويس دهنده با فرمت xml ، عمليات مورد نظر را انجام دهند . به عبارت ديگر ، پس از برقراری ارتباط با سرويس دهنده ، داده با فرمت xml برگردانده خواهد شد .
    xml ، صرفا" يكی از روش های برگرداندن داده است و در صورت لزوم می توان از فرمت هائی ديگر نظير متن معمولی نيز استفاده كرد .

  • در كنار جاوا اسكريپت و XML ، فناوری Ajax با فناوری های ديگری نظير DHTML و CSS نيز كار می كند . به كمك فناورهای فوق می توان داده موجود در يك صفحه وب را بدون نياز به load تمامی صفحه بهنگام كرد ( صرفا" load بخشی كه ضرورت آن احساس می شود ) . پتانسيل فوق يكی از اهداف و ويژگی های مهم برنامه های وب مبتنی بر فناوری Ajax محسوب می گردد .
  • بخشی از جاوا اسكريپت كه امكان Ajax را ميسر می سازد ، شی XMLHttpRequest است . شی فوق تقريبا" در تمامی مرورگرهای مدرن و پيشرفته از قبل تعبيه شده است . به كمك اين شی امكان اتصال به سرويس دهنده و مديريت داده برگردانده شده از آن در پس زمينه فراهم می گردد .
    اقتدار Ajax نه تنها وابسته به جاوا اسكريپت بلكه مديون شی XMLHttpRequest است .


اصول Ajax
Ajax هنوز در ابتدای راه است و بسياری از پياده كنندگان با اين پرسش مواجه هستند كه از اين فناوری در چه زمانی و در چه نوع برنامه هائی می توان استفاده كرد . عدم شناخت مناسب از اين فناوری باعث می شود تا از آن در برنامه هائی استفاده گردد كه نه تنها قابليت و يا ويژگی جديدی را به برنامه اضافه نمی نمايد بلكه در بسياری از موارد عدم موفقيت يك برنامه و نارضايتی كاربران آن را به دنبال خواهد داشت .
زمانی می توان اين ادعا را داشت كه يك برنامه وب مبتنی بر Ajax در اهداف خود موفق بوده است كه در آن اصول زير رعايت شده باشد .


  • به حداقل رساندن ترافيك : برنامه های Ajax می بايست حتی المقدور حجم اندكی از اطلاعات را برای سرويس دهنده ارسال و يا از آن دريافت نمايند . به عبارت ديگر ، با بكارگيری Ajax می بايست حجم ترافيك بين سرويس گيرنده و سرويس دهنده كاهش يابد .
  • عدم سردرگمی كاربر : برنامه های وب مبتنی بر فناوری Ajax مدل تعامل با كاربر مختلفی را نسبت به برنامه های وب سنتی معرفی كرده اند . در مقابل وب استاندارد ( كليك كن و منتظر باش ) ، برخی برنامه های Ajax از يك رويكرد ديگر برای پياده سازی بخش رابط كاربر خود نظير drag-and-drop و يا double-clicking استفاده می نمايند . صرفنظر از نوع مدل انتخاب شده برای پياه سازی تعامل با كاربر ، مهم ارائه امكانات بخش رابط كاربر بگونه ای است كه همواره كاربر در سريع ترين زمان بتواند در خصوص انجام حركت بعدی خود تصميم گيری نمايد .
  • استفاده منطقی از تجارب مثبت گذشته : وقت خود را بی خودی به ابداع مدل های تعامل با كاربر جديد كه كاربران شما با آنها آشنا نيستند ، هدر ندهيد . استفاده از تجارب برنامه های وب سنتی و desktop می تواند پياده كنندگان را در طراحی يك مدل مناسب جهت تعامل با كاربر كمك نمايد .
  • اجتناب از بكارگيری عناصر غيرضروری : از بكارگيری عناصر غير ضروری نظير تكرار انيميشن و بخش هائی نظير blinking page اجتناب كنيد. بكارگيری اين چنين عناصری باعث می شود تا كاربران در زمان انجام فعاليت های مورد نظر دچار سردرگمی شوند .
  • قابليت دسترسی و رضايت كاربران : برنامه های Ajax را با در نظر گرفتن رفتار و نوع خواسته كاربران طراحی و پياده سازی نمائيد . برای طراحی و پياده سازی خود را در يك مكان بسته محبوس ننمائيد. در غير اينصورت همواره اين احتمال وجود خواهد داشت كه خواسته برخی از كاربران ناديده گرفته شود . قابليت دسترسی و رضايت كاربران يكی از نكات بسيار مهم در موفقيت يك برنامه كامپيوتری محسوب می گردد .
  • پيشگيری از دانلود تمامی صفحه : تمامی ارتباط با سرويس دهنده پس از مقدار دهی اوليه دانلود صفحه ، می بايست توسط Ajax engine مديريت گردد . عدم مديريت صحيح بر روی فرآيند فوق می تواند بخش رابط كاربر يك برنامه وب را با مشكل اساسی مواجه سازد ( نظير دانلود حجم اندكی از داده در يك مكان و دانلود تمامی صفحه در بخش ديگر )
  • توجه به نياز كاربران قبل از هر چيز : برنامه های Ajax را قبل از هر چيز با كاربران خيالی در ذهن طراحی نمائيد . سهولت در انجام عمليات متداول می بايست در دستور كار قرار بگيرد . كمتر در انديشه انجام كارهای تبليغاتی و يا افكت های غيرضروری باشيد .

نقطه مشترك بين تمامی اصول اشاره شده ، قابليت استفاده از يك برنامه با حداكثر ظرفيت و رضايتمندی كاربران است . هدف اوليه Ajax ، بهبود و ارتقاء بخش رابط كاربر برنامه ها با هدف رضايتمندی بيشتر كاربران است .
نحوه كار Ajax
در برنامه های وب سنتی مرورگر مسئوليت مقداردهی اوليه درخواست ها و پردازش آنها جهت ارسال به سرويس دهنده وب را برعهده دارد . در مقابل ، در Ajax يك لايه ميانی ( كه Garrett آن را Ajax engine ناميد ) مسئوليت مديريت ارتباط برقرار شده را برعهده می گيرد . Ajax engine در واقع يك شی جاوا اسكريپت و يا تابع است و زمانی كه به اطلاعاتی از سرويس دهنده نياز باشد ،‌ از آن استفاده خواهد شد .
در مقابل برنامه های وب سنتی كه يك لينك به يك منبع ديگر ارائه می گردد ( نظير يك صفحه وب ديگر ) ، در برنامه های وب مبتنی بر Ajax ، هر لينك باعث فراخوانی Ajax engine می گردد كه وظيفه آن زمانبندی و انجام درخواست بطور غيرهمزمان است .
سرويس دهنده ( كه از لحاظ سنتی اسناد HTML ، تصاوير ، CSS و جاوا اسكريپت را ارائه می نمايد ) ، بگونه ای پيكربندی می گردد تا داده مورد نياز را در اختيار Ajax Engine قرار دهد. اين داده می تواند متن معمولی ، XML و يا ساير فرمت های مورد نياز داده باشد. بديهی است در چنين مواردی ، Ajax engine می بايست قادر به خواندن و تفسير داده باشد .
پس از دريافت پاسخ لازم از سرويس دهنده ، Ajax engine عمليات خود را كه اغلب بررسی داده و ايجاد تغييرات لازم در بخش رابط كاربر است ، آغاز می نمايد . با توجه به اين كه در فرآيند فوق به اطلاعات كمتری نسبت به برنامه های وب سنتی نياز است ، بخش رابط كاربر با سرعت بيشتری بهنگام می گردد و كاربر قادر به انجام كارهای خود با سرعت بيشتری است .
در شكل 1 ، عملكرد برنامه های وب سنتی نسبت به برنامه های وب مبتنی بر Ajax نشان داده شده است .



شكل 1 : عملكرد برنامه های وب سنتی نسبت به برنامه های وب مبتنی بر Ajax
منبع : Adaptive Path
خلاصه
فناوری های مرتبط با Ajax در طی ساليان گذشته مطرح و از آنها در مجموعه ای از نرم افزارها استفاده می گرديد . Jesse James Garrett در مقاله خود تمامی فناوری های اشاره شده را در زير يك سقف و با نام Ajax كنار هم قرار داد . با بكارگيری فناوری Ajax در نرم افزارهای برجسته ای نظير Google Suggest در سال 2005 ، Ajax در كانون توجه جهانی قرار گرفت . وب 2 ، برای نيل به اهداف خود به Ajax دل بسته است و Ajax می تواند تصويری جديد از برنامه های وب را در عرصه اينترنت به نمايش بگذارد .
وجود برخی خصايص خاص در بخش رابط كاربر برنامه های desktop و نحوه تعامل كاربران با اينگونه برنامه ها ، حلقه گمشده ای در برنامه های وب است. حلقه ای كه Ajax سعی دارد خلاء آن را پر كند . قطعا" در آينده ای نه چندان دور شاهد حضور بيشتر برنامه های وبی خواهيم بود كه دارای شكل ظاهری و عملكردی مشابه (خصوصا" تعامل با كاربر ) با برنامه های desktop می باشند .
شايد روزی فرا رسد كه يكی از واژه های برنامه های desktop و برنامه های وب به نفع ديگری كنار برود و يا هر دو بر يك نام مشترك ديگر به توافق برسند .
در بخش سوم به بررسی نمونه برنامه هائی خواهيم پرداخت كه در آنها از فناوری Ajax استفاده می گردد .