در طول يك دهه تكامل كاربردهاي مبتني بر وب از شكل ابتدايي و ايستا، به صفحات پويا، كاربردهاي مبتني بر جاوا و ساير فناوريهاي مربوط به توليد كاربرد در سمت كارگزار، و در چند سال اخير به كاربردهاي AJAX ختم شدهاند.
چارچوبي رايگان براي توليد كاربردهاي AJAX
سيامك عضدالملكي- دنياي كامپيوتر و ارتباطات
در طول يك دهه رشد و تكامل، كاربردهاي مبتني بر وب از صفحات ايستا، به سمت صفحات پويا، Applet، Flash و در نهايت به كاربردهاي AJAX ختم شده است. كاربراني كه سامانهها و كاربردهاي مدرن وب (نظير Google MAP و يا واسط كاربر جديد Yahoo Mail) را تجربه كردهاند، به اين نكته ظريف و جالب پيبردهاند كه رابط كاربر اين كاربردها بر خلاف كاربردهاي سنتي وب، از قابليتها و ويژگيهاي محاورهاي بيشتري برخوردار هستند. صفحات وب برخلاف كاربردهاي روميزي، ساختاري سست پيوند (Loosely Coupled) دارند.
به اين معني كه اطلاعات و دادههايي كه در صفحات وب نمايش داده ميشوند، پيوند مستحكمي با منابع داده (معمولاً بانكهاي اطلاعاتي) ندارند. از اين رو براي مشاهده دادهها (يا اطلاعات جديد) كاربر ميبايست درخواست خود را مجددا به كارگزار وب (كارگزار كاربرد) ارسال كند. اين عمل معمولاً با عملكرد Refresh در مرورگر حاصل ميشود. با استفاده از ترفند AJAX يا تركيبي ناهمزمان از JavaScript و XML، امكان توليد كاربردهاي محاورهاي مبتني بر وب فراهم ميگردد. منظور از معماري ناهمزمان آن است كه برخلاف معماري سنتي كارگزار- سرويسگيرنده، در AJAX مرورگر تقاضاهايي را بدون نياز به دخالت كاربر به كارگزار وب (يا كاربرد) ميفرستد و به اين ترتيب صفحات وب به طور پويا به روز ميشوند.
زبان برنامهنويسي كه با استفاده از آن اين تقاضاها به كارگزار وب فرستاده ميشوند، JavaScript است و اطلاعات با استفاده از شيس خاصي موسوم به XMLHTTPRequest دريافت ميشود. با وجود آنكه واژه فني AJAX اولين بار توسط Jesse James Garrett در سال 2005 به كاربرده شد، ولي يك دهه قبل شركت مايكروسافت همين ايده را در تكنيك Remote Scripting مطرح نموده بود. عنصر بنيادي در تكنيك AJAX شي XMLHTTPRequest است كه به مرورگر اينترنت (نظير IE يا FireFox) امكان ميدهد بدون بارگيري مجدد كل صفحه، درخواست داده را به طور پويا و بدون نياز به دخالت كاربر (ناهمزمان) به كارگزار وب ارسال نمايد. يكي از دلايل جذاب بودن كاربردهايي نظير Google Map استفاده از همين تكنيك ميباشد. در اين مقاله قصد داريم چارچوب رايگان و پرطرفداري را معرفي نماييم كه توليد كابردهاي مبتني بر تكنيك AJAX را به شكل چشمگيري تسريع مينمايند.
كاربردهاي سنتي وب
عليرغم رشد و گسترش وب، و محبوبيت و فراگيري آن، كاربردهاي سنتي وب با يك چالش اساسي مواجه هستند. اين چالش عدم توانايي كاربردهاي سنتي در ارائه رابط كاربر محاورهاي متناسب با كاربردهاي جديد در وب است. اين ناتوانايي ريشه در مدل حاكم بر اين رده از كاربردها است كه در آن از يك سو ارتباط كارگزار و سرويسگيرنده بدون حافظه و Stateless است و از سوي ديگر واحد ارتباطي در رابط كاربر يك صفحه كامل است. در اين مدل كه در شكل 1 به صورت نمادين ترسيم شده است، كاربردي كه در كارگزار اجرا ميشود، موظف است كه واكشي و تفكيك پارامترهاي درخواست، ارائه پاسخ، و هدايت و مسيريابي كاربر از يك صفحه به صفحه بعدي را بر عهده بگيرد.
كاربردهاي سنتي وب
به علاوه در صورتي كه خطايي در اين مسير رخ دهد، نحوه مواجه با آن نيز بر عهده كاربرد است. نياز به توضيح نيست كه تمام اين وظايف بر عهدهي كاربردي است كه در سمت كارگزار وب (كارگزار كاربرد) اجرا ميشود. براي تسهيل اين فرآيند عملياتي، چارچوبهاي متعددي نظير Struts، Tapestry و JSF ارائه شدهاند. با اين حال به سبب فاصله ذاتي مدل مبتني بر صفحه در كاربردها سنتي وب، با مدل محاورهاي در كاربردهاي مدرن، هيچ يك از اين چارچوبهاي راهحل كاملي براي ناتوانايي فوقالذكر تلقي نميشوند.
كاربردهاي مبتني بر AJAX
در طول يك دهه تكامل كاربردهاي مبتني بر وب از شكل ابتدايي و ايستا، به صفحات پويا، كاربردهاي مبتني بر جاوا و ساير فناوريهاي مربوط به توليد كاربرد در سمت كارگزار، و در چند سال اخير به كاربردهاي AJAX ختم شدهاند. همانطور كه در كاربردهاي جذابي چون Google Map مشاهده ميشود، ترفند AJAX زندگي جديدي به كاربردهاي مبتني بر وب بخشيده است به گونهاي كه اين كاربردها از نظر سطح محاورهاي بودن، يادآور برنامههاي روميزي هستند كه در دههاي قبل برروي كامپيوترهاي منفرد اجرا ميشدند. نكته جالب توجه آن است كه تكنيك AJAX تنها استفاده هوشمندانه از Javascript است و كاربران براي بهرهگيري از آن تنها به يك مرورگر ساده (و استاندارد) نياز دارند. ميتوان AJAX را به عنوان نسل جديدي از صفحات پوياي HTML تلقي كرد.
در اين تكنيك برنامههاي Javascript در پشت صحنه منتظر رخدادهايي ميمانند كه كاربر و محاوره وي با صفحات پديد ميآورد. در پاسخ به اين رخدادها (معمولاً) تنها بخشي از صفحه (كه به عبارت دقيقتر DOM يا Document Object Model) به شكل پويا تغيير مينمايد. ارتباط كارگزار و مرورگر در اين تكنيك ناهمزمان (Asynchronous) است. به اين ترتيب AJAX به مدل محاوره تك صفحهاي خاتمه ميدهد. با بهرهگيري از اين تكنيك و طراحي مناسب ميتوان اجزاء محاورهاي متعددي در صفحات وب گنجاند كه بر خلاف مدل سنتي به شكل پويا به روز ميشوند. اين تكنيك در شكل 2 مشاهده ميشود.
محاوره كاربرد و كاربر در تكنيك AJAX
به عنوان مثال فرض كنيد كه در يك صفحه (فرم) ورود اطلاعات نام كشور و شهر مورد نظر كاربر از وي پرسيده شود. در كاربردهاي سنتي ابتدا كاربر از فهرستي، كشور مورد نظر را انتخاب مينمايد. سپس كل صفحه به روز شده و فهرست مربوط به انتخاب نام شهر به شكل مناسب به روز شده و كاربر ميتواند شهر مورد نظر در آن كشور را انتخاب نمايد. بديهي است كه در كاربردهاي سنتي اين امر از طريق به روز رساني تمام صفحه به ازاء انتخاب هر پارامتر از فرم انجام ميشود. حال در كاربردهايي كه از تكنيك AJAX بهره ميبرند، به محض انتخاب كشور از فهرست اول، تنها فهرست دوم و نه تمام صفحه به روز شده و كاربر در فهرست شهرها، تنها شهرهاي مربوط به كشور انتخاب شده را مشاهده خواهد كرد. تفاوت مهم آن است كه در اينجا نيازي به روزآمد سازي تمام صفحه نيست.
چالشها
تكنيك AJAX با وجود آنكه قابليتهاي محاورهاي جالب توجهي به كاربردها ميافزايد، ولي از سوي ديگر پيچيدگي توليد كاربرد، و مهارتهاي مورد نياز براي توليد كاربرد را نيز افزايش ميدهد كه به نوبه خود هزينه توليد كاربردها را نيز افزايش ميدهد. ساير چالشهاي مرتبط با تكنيك AJAX عبارت است از:
- مرورگرها از رابطهاي كاربر JavaScript و API (رابط برنامههاي كاربردي) خاص خود بهره ميبرند كه در برخي موارد با يكديگر سازگار نيستند. تكنيك AJAX ارتباط تنگاتنگي با دستكاري DOM (مدل شيءگرايي صفحه وب) دارد. اين ناسازگاري كه در پيادهسازي مرورگرهاي اينترنتي وجود دارد موجب افزايش زمان توليد كاربرد (و در مواردي پيادهسازي متعدد براي مرورگرهاي متعدد كه امري خسته كننده است) ميگردد.
- استفاده از AJAX علاوه بر به روزرساني بخشي از صفحه وب، مبادله داده بين سرويسگيرنده (مرورگر) و كارگزار را نيز به دنبال دارد. اين تبادل داده ارتباط نزديكي با كاربرد و ماهيت آن دارد و موجب ميشود كه بخشي از منطق برنامه و حتي دادهها براي افزايش كارآيي و بهنيهسازي ارتباطات و تبادل دادهها به مرورگر منتقل گردد كه اين امر موجبات افزايش هزينه توليد و نگهداري كاربرد را به همراه دارد.
- براي به روزرساني بخشي از صفحه، لازم است كه مرورگر به شكل ناهمزمان با كارگزار ارتباط برقرار نمايد. از ديد كارگزار درخواستهاي AJAX تفاوتي با درخواستهاي عادي HTTP ندارند. در واقع تنها تفاوت آن است كه درخواستهاي عادي HTTP توسط كاربر توليد ميشوند، حال آنكه درخواستهاي AJAX به طور ناهمزمان و بدون نياز به دخالت كاربر به كارگزار فرستاده ميشوند. اين ويژگي ميتواند روال منطقي و دنبالهاي كاربرد را تحت تأثير قرار دهد.
در حال حاضر رهيافتهاي متعددي براي مواجه و پاسخگويي به اين چالشها داده شده است. رايجترين رهيافت ارائه چارچوبها و روالهاي كتابخانهاي به زبان JavaScript است. اين رهيافتها، برنامهسازان را مجبور ميكنند كه روالها را به نحوي به منطق كاربرد مرتبط نمايند. از سوي ديگر ماهيت ناهمزمان كاربرد چالشي است كه همچنان به قوت خود باقي است. رهيافت ديگر توسعه و گسترش برچسبهاي HTML به گونهاي است كه بدون نياز به برنامه نويسي Javascript و تنها با گنجاندن اين برچسبهاي رفتار موردنظر بروز نمايد. در اين رهيافت لازم است كه يك برنامه اوليه (به زبان Javascript) اجرا شود كه اين برنامه نقش تفسير برچسبهاي جديد (و غيراستاندارد) را بر عهده دارد.
مزيت عمده اين رهيافت سهولت در استفاده از برچسبهاي جديد و عدم نياز به برنامهنويسي است. هرچند كه با افزايش پيچيدگي منطق كاربرد اين رهيافت از كارايي خوبي برخوردار نخواهد بود. رهيافت ديگر توسعه و گسترش چارچوب توليد كاربرد به گونهاي است كه AJAX را در برگيرد. در رهيافت اخير، نتيجه، ارتباط تنگاتنگي با معماري اوليه كاربرد دارد. اغلب چنين رهيافتهايي نياز به برنامهنويسي به زبان Javascript را مرتفع مينمايند و به جاي آن نوشتن Servletهايي ضروري و اجتنابناپذير ميشوند كه تبادل پوياي داده بين كارگزار وب و مرورگر را ميسر مينمايند.
چارچوب ZK: ساده و غني
اين چارچوب در واقع مجموعهاي از توابع و متدهايي است كه با هدف پنهانسازي پيچيدگيهاي ذاتي AJAX از ديدكاربران توليد شده است. در واقع اين چارچوب توليد كاربرد، به طراحان و برنامهنويسان كاربردهاي مبتني بر وب امكان ميدهد كه با سهولت و سرعت بيشتري كاربردهاي موردنظر را توليد نمايند. اجزاء ساختماني اين چارچوب يك موتور مبتني بر AJAX است كه ارتباط محاورهاي (مرورگر و كارگزار) را خودكار مينمايد، به علاوه مجموعهاي غني از (XML User interface Language) UXL و XHTML است براي بهبود رابط كاربر، و در نهايت زبان نشانهگذاري ويژه براي توليد رابط كاربر بدون نياز به برنامه نويسي است.
مشابه با كاربردهاي روميزي (كه در دهه 1990 نوشته ميشدند)، در اين چارچوب رابط كاربر با استفاده از اجزاء UXL توليد شده و كاربرد گوش به زنگ رخدادهايي (نظير كليك موشواره و يا فشردن كليدها) ميماند كه توسط كاربر ايجاد ميشوند. رابط كاربر نيز بدون نياز به برنامه نويسي و تنها با استفاده از زبان نشانهگذاري خاصي موسوم به (ZK User-interface Markup Language)ZUML انجام ميشود. در چارچوب ZK تمام كاربرد برروي كارگزار اجرا ميشوند، هر رخدادي كه توسط كاربر ايجاد شود به برنامه كاربردي در حال اجرا برروي كارگزار ارسال ميشود. اگر يكي از اجزاء رابط كاربر توسط كاربر تغيير كند، اين تغيير به كارگزار (و كاربرد در حال اجرا در آن) ارجاع شده و تغيير مربوطه در صفحه مرورگر منعكس ميشود.
از ويژگيهاي مهم و قابل توجه اين كاربرد تضمين سازگاري آن با فناوريهاي جاري و مورد استفاده است. در واقع در مدل سه لايه (لايه نمايش، منطق و داده)، چارچوب ZK تنها لايه ارائه (يا نمايش) را تحت تأثير قرار ميدهد و منطق كاربرد و بانكهاي اطلاعاتي دست نخورده باقي خواهند ماند. معماري اين چارچوب در شكل 3 مشاهده ميشود.
معماري چارچوب ZK
همانطور كه در اين شكل ملاحظه ميشود، اين چارچوب توليد كاربرد از دو جزء بنيادي موسوم به موتور مروگر يا ZK Client Engine و موتور به روزرساني يا ZK Update Engine تشكيل شده است. صفحه اوليه كه در مرورگر نمايش داده ميشود، دربرگيرنده اجزاء ZKاست، با ايجاد يك رخداد از سوي كاربر، درخواست مربوطه به موتور به روزرساني فرستاده ميشود. موتور بروزرساني اجزاء ZK متناظر را به روز كرده و رخداد را در صف پردازش قرار ميدهد. كاربرد، رخدادها را به ترتيب از صف استخراج كرده و با استفاده از دادههاي ديگر و منطق برنامه به دستكاري اجزاء ZK (اجزاء فرم رابط كاربر) ميپردازد. در نهايت پاسخ از موتور بروزرساني به موتور مرورگر ارسال شده و اجزاء فرم در صفحه مرورگر نيز به روز ميشوند.
اين چارچوب توليد كاربرد از 70 جزء XUL و 80 جزء XHTML و يك زبان نشانهگذاري براي طراحي رابط كاربر بهره ميبرد كه فرآيند توليد كابرد را به شكل چشمگيري تسريع مينمايد. طراحان كاربرد با استفاده از اين مجموعه رابط كاربر و اجزاء كاربرد (نظير منوها، دكمههاي راديويي، دكمههاي فشاري، فهرستها و نظاير آن) را طراحي كرده و با توجه به عكسالعملهاي كاربر (رخدادها) عكسالعملهاي مربوطه را برنامهريزي مينمايند. اين چارچوب رايگان از نشاني http://www.zkoss.org قابل دريافت است. براي استفاده از اين چارچوب توليد كاربردهاي AJAX، نگارش 1.4 يا بالاتر JRE و كارگزار وب با پشتيباني Servlets (نظير Apache Tomcat) مورد نياز است.