در طول یک دهه تکامل کاربردهای مبتنی بر وب از شکل ابتدایی و ایستا، به صفحات پویا، کاربردهای مبتنی بر جاوا و سایر فناوریهای مربوط به تولید کاربرد در سمت کارگزار، و در چند سال اخیر به کاربردهای 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 عبارت است از:
- مرورگرها از رابطهای کاربر 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 Client Engine و موتور به روزرسانی یا ZK Update Engine تشکیل شده است. صفحه اولیه که در مرورگر نمایش داده میشود، دربرگیرنده اجزاء ZKاست، با ایجاد یک رخداد از سوی کاربر، درخواست مربوطه به موتور به روزرسانی فرستاده میشود. موتور بروزرسانی اجزاء ZK متناظر را به روز کرده و رخداد را در صف پردازش قرار میدهد. کاربرد، رخدادها را به ترتیب از صف استخراج کرده و با استفاده از دادههای دیگر و منطق برنامه به دستکاری اجزاء ZK (اجزاء فرم رابط کاربر) میپردازد. در نهایت پاسخ از موتور بروزرسانی به موتور مرورگر ارسال شده و اجزاء فرم در صفحه مرورگر نیز به روز میشوند.
این چارچوب تولید کاربرد از 70 جزء XUL و 80 جزء XHTML و یک زبان نشانهگذاری برای طراحی رابط کاربر بهره میبرد که فرآیند تولید کابرد را به شکل چشمگیری تسریع مینماید. طراحان کاربرد با استفاده از این مجموعه رابط کاربر و اجزاء کاربرد (نظیر منوها، دکمههای رادیویی، دکمههای فشاری، فهرستها و نظایر آن) را طراحی کرده و با توجه به عکسالعملهای کاربر (رخدادها) عکسالعملهای مربوطه را برنامهریزی مینمایند. این چارچوب رایگان از نشانی http://www.zkoss.org قابل دریافت است. برای استفاده از این چارچوب تولید کاربردهای AJAX، نگارش 1.4 یا بالاتر JRE و کارگزار وب با پشتیبانی Servlets (نظیر Apache Tomcat) مورد نیاز است.
در حال حاضر حدود 20 ایالت در آمریکا از این نرمافزار استفاده میکنند و بر اساس آخرین مطالعات انجام شده، از زمان ورود این نرمافزار میزان اشتباهات ماموران پلیس چندین برابر کاهش یافته است. همکاران سیستم - ماموران پلیس در ایالت پنسیلوانیای آمریکا تاکنون مجبور بودند برای هر تصادف در سطح شهر، صفحات چاپی را به صورت دستی پر کنند.
اگر این تصادفات مجروح و یا کشته نیز به همراه داشت، این ماموران مجبور بودند بیش از 30 صفحه را پر کنند که این کار زمان زیادی از آنها میگرفت.
اما بر اساس اخبار رسیده، پلیس ایالتی پنسیلوانیا هماکنون میتواند با یک نرمافزار جدید تصادفات را به صورت دیجیتالی گزارش دهد.
این نرمافزار TraCS نام گرفته و به صورت اختصاصی برای سیستمهای عبور و مرور در خیابان و تخلفات در سطح شهر طراحی شده است.
در حال حاضر حدود 20 ایالت در آمریکا از این نرمافزار استفاده میکنند و بر اساس آخرین مطالعات انجام شده، از زمان ورود این نرمافزار میزان اشتباهات ماموران پلیس چندین برابر کاهش یافته است.
این طور که گفته میشود، در این سیستم جدید ماموران پلیس تنها نام، نامخانوادگی و نوع تخلف فرد را وارد میکنند و بقیه اطلاعات به صورت خودکار پر میشود.
دستگاهی که این نرمافزار روی آن نصب شده است، نقشه آنلاین شهر را در اختیار ماموران پلیس قرار میدهد و به صورت لحظه به لحظه موقعیت آنها را مشخص میکند.
دولت آمریکا امیدوار است در ماههای آینده این نرمافزار را به صورت رسمی در تمام ایالتهای خود به کار بندد.