حتما برای شما اتفاق افتاده است که به سایتی برخورد کنید که مملو از طراحی های زیبای فلش ،رنگ های بسیار روشن ،و مقادیر زیادی متن تا حدی که شما را وحشت زده می کنند. این اتفاق ناشی از چیست ؟حتما این ضرب المثل را شنیده اید که می گویند " آشپز که چند تا بشه ...." . چنین اتفاقی نیز ممکن است برای سایت بیافتد . گاهی اوقات وجود برخی از جزیئات نه تنها باعث جذب کاربران نمی شود که خود بخ خود مانع از ورود دوباره کاربر به سایت سما می شوند . برای مثال طراحی فلش . اگر سایت شما حاوی تعداد زیادی فایل فلش باشد ،این فلش ها می بایست توسط مرورگر کاربر دانلود شود که این خود زمان زیادی را می برد . اکثر اوقات کاربران چنین وقتی را ندارند . در نتیجه خیلی راحت از دیدن سایت شما صرف نظر کرده و سراغ سایت دیگری می روند که همان مطالب را به روشی عاقلانه تر در اختیار کاربران گذاشته است .
اما لحظه ای صبر کنید . چیزی که در بالا گفته شد به این معنا نیست که سایت شما تنها حاوی متن صرف باشد . در عوض سایت شما تا اندازه ای نیازمند این طراحی ها می باشد . طراحی سایت در سال های اخیر بیشتربه سمت طراحی های خلاقانه و در عین حال کاربردی رفته است ..
شرکت های طراحی سایت ،به این حقیقت رسیده اند که پر کردن یک سایت با هزاران عکس ، متن اضافی و استفاده از انواع رنگ ها کاملا غیر ضروری می باشد . این شرکت ها امروزه از قالب هایی استفاده می کنند که در عین خبری و مفید بوذن بسیار ارامش بخش نیز هستند . امروز دیگر طراحان با استفاده از رنگ ها و فونت های پایه ارائه کننده نوعی بازگشت در روش های طراحی هستند . از این گذشته ،طراحان سایت با استفاده از فضاهای خالی در محل های مناسب ، توجه کاربر را به نقطه ای خاص جلب کرده و او را با هزاران رنگ و چیز های اضافی هدف قرار نمی دهند .
سایت های فعال در زمینه تجارت الکترونیک ،کاملا به این نتیجه رسیده اند که وجود اشفتگی و بی نظمی در طراحی سایت ، جز دل زدگی و گیجی چیزی برای کاربر در بر ندرند .طراحان سایت درساخت اینگونه سایت ها تنها بر روی آیکن (تصاویر ) های کم حجم و در عین حال موثر تمرکز می کنند. طراحی وب سایت در حال حاضر به بستری برای انجام تغییرات بزرگ تبدیل شده است .
استفاده از فونت در طراحی سایت نقشی موثر در جلب نظر کاربران بازی می کند . اندازه فونت ،رنگ و نوع آن فاکتور هایی اساسی در تغییر ظاهر سایت هستند . برخی از طراحان از چند نوع فونت استفاده می کنند که پیشنهاد ما این است که حتی الامکان تنها از دو نوع فونت استفده شود . برای جلب تتوجه کاربر به کلمهای خاص می توان ، آن کلمه را با رنگ و یا نوع و یا حتی سایزی متفاوت از بقیه متن نشان داد.
عواملی چون صفحه ارایی ، استفاده از فونت ، تصاویر و ابزارهای پیشرفته طراحی تعیین کننده ی ظاهر هر سایتی می باشند ،که فاصله بین یک سایت ساده با پیشرفته با همین عوامل مشخص می شود .
بهینه سازی سایت در حقیقت شامل استفاده از هرگونه نرم افزار برای بیشتر کردن طول عمر و کیفیت سایت می باشد . جهت ساخت و طراحی حرفه ای یک سایت می بایست از روش ها و راهکارهای خاص و ویژه استفاده کرد . در کل برای طراحی سایت ،هر طراحی مجبور به استفاده از روش هایی معلوم ،شناخته شده و خاص می باشد .
به عنوان یک ارباب رجوع شما می بایست شرکت طراح سایت را از انتظارات و توقعات خود باخبر سازید که در این صورت کاربرانی که وارد سایت شما می شوند قادر به نظردهی و انتقاد خواهند بود که این در حقیقت باعث بهتر شدن وضعیت فعلی سایت شما می شود . بی شک وب سایت مهمترین بخش هر تجارتی می باشد ،از اینرو بررسی دقیق شما از سایتتان نیازمند دانستن نکات زیادی برای ارتقا و پیشرفت وب سایت خودتان می باشید . این بررسی و تحلیل دربردارنده ی موضوعات اساسی و اصلی مرتبط با ارتقا سایت می باشد . اولین گام برای ارتقا هر سایتی تصمیم گیری راجع به مخاطبان وکاربران ساست شما می باشد .
در این مرحله جوانب مختلف مرتبط به یک سایت اعم از مخاطبان ، نرم افزار ،سخت افزار،اطلاعات و هر چیز مرتبط دیگر می بایست مورد تجزیه تحلیل قوی قرار بگیرد . این مرحله می بایست به صورتی مناسب از نظر صرف زمان و میزان اطلاعات انجام شود . شرکت های طراح سایت باید با در اختیار داشتن تیمی حرفه ای سایتی را طراحی کنند که ضمن کم خرج بودن بیشترین بازدهی را داشته باشد . که این کار بدون همکاری طراح ،ارتقا دهنده و آزمایش کننده کارایی سایت ممکن نمی باشد .
قدم دوم در ارتقا وب سایت تصمیم گیری راجع به حجم کلی تغییرات مورد نیاز برای ارتقا سایت می باشد . در این مرحله می بایست طرح کلی پیشنهادی ای نوشته شود که در کل شامل اهداف مورد نظر ،مسئولیت ها و وظایف و هزینه های این پروژه میباشد .
گام بعدی طراحی و ارتقا سایت است که در طول آن طرح بندی وساختار صفحات سایت طراحی می شود . در اینجا باید گفت که تنها بخشی از صاحبان سایت علاقه مند به نمونه های اولیه و در عین حال کلی هستند ،که در اینجا طراحان می بایست 2 تا 3 نمونه طراحی را آماده کنند .
هرگونه تغییر در طرح کلی سایت همواره با نظر و پیشنهاد ارباب رجوع انجام می شود ،همچنین تغییرات مرتبط را نیز می توان قبل از انجام هرکاری انجام داد.
در طول طراحی سایت وجود گروهی حرفه ای جهت آزمایش سایت مفید می باشد ،این گروه می بایست همواره در هر مرحله از درستی و کیفیت کارها و طراحی های انجام شده ازلاع حاصل کنند . در اینجا گروهی خاص نیز می بایست در حوزه طراحی دیتابیس نهایت تلاش را به خرج بدهند .
مرحله بعدی ،ایجاد apt (يک سيستم برنامه نويسى که کاربردهاى کنترل عددى براى کنترل برنامه ريزى شده اعمال ماشين استفاده مى شود) و SEOScopeEdit Object File ایجاد حیطه لازم برای ویرایش داده های موجود در سایت می باشد . شرکت های فعال و حرفه ای در این حوزه با در اختیار رداشتن تیم های متخصص قادر هستند ،محتوای سایت شما را بدون غلط های املایی و دستوری بنویسند .
اطلاعاتی که در بالا در اختیار شما قرار گرفت ،تنها آغازین گام ها برای طراحی سایت می باشد . به منظور ارتقا سایت شما می بایست کار را به شرکت های متخصص بسپارید .
به جرأت میتونم بگم node.js انقلابیترین حرکت در زمینه توسعه وب توی یکی دو سال گذشته بوده. node در github سومین پروژه از لحاظ محبوبیته و همین الان که من دارم این مطلب رو مینویسم این پروژه بیش از 4000 تماشاچی داره و بیش از 400 بار fork خورده و 100 ها ماژول براش نوشته شده و همه این اتفاقات در کمتر از یک سال و اندی که از شروع این پروژه میگذره افتاده.
اگر اخبار و تحولات توسعه وب رو دنبال کرده باشید حتما تا به حال مطالبی در موردش شنیدید اما ممکنه به اهمیت موضوع پی نبرده باشید. به عبارت دیگه اکثر افراد در وهله اول متوجه نمیشن که node چه چیز جدیدی برای ارائه داره و چی باعث محبوبیت اون شده.
اگر میخواهید در مورد node بیشتر بدونید در ادامه این مطلب با من همراه باشید.
حالا این node.js چی هست؟ یک فریم ورک جدید مثل jquery؟
نه اشتباه نکنید. node.js هیچ ربطی به مرورگر نداره و کدی که برای node نوشته میشه قرار نیست روی مرورگر اجرا بشه.
پس لابد یک زبان برنامه نویسی جدیده!
زبان جدید هم نیست. برنامههای node به زبان جاوا اسکریپت نوشته میشن. جاوا اسکریپتی که سمت سرور اجرا میشه. البته از node میشه برای نوشتن برنامههای غیر سروری هم استفاده کرد ولی بیشتر کاربردش برای نوشتن برنامههای سروری مخصوصا وبسرورهاست.
پس node رو میشه مثل php و python روی وبسرور نصب کرد.
نه. node مستقله. در واقع node خودش وبسرور داره و از وبسرور فعلی شما (مثلا آپاچی) استفاده نمیکنه.
میشه دقیقتر توضیح بدی یک برنامه تحت وب با node چه جوری اجرا میشه؟
node از طریق خط دستور (command line) اجرا میشه و برنامه شما رو اجرا میکنه. حالا برنامه شما میتونه از ماژول وبسرور node استفاده کنه و یک وبسرور راه بندازه.
ولی من هر کاری که بخوام با php و python و ruby و … میتونم انجام بدم.
خوب آره. node هم قرار نیست کار جدیدی که قبلا غیر ممکن بوده رو انجام بده. قرار هم نیست جای php و python و … رو بگیره. حداقل هنوز نه.
خوب پس چی باعث شده اینقدر طرفدار پیدا کنه؟
دلایل مختلفی داره. اگر ایده و هدف اصلی node و نحوه کارش رو بدونید خیلی از دلایلش مشخص میشه.
هدف node ایجاد راهکاری آسان برای نوشتن برنامههای مرتبط با شبکه با سرعت، کیفیت و مقیاس پذیری بالاست. پس دلیل اول محبوبیت node رو میشه این جوری نوشت که با node حتی برنامهنویسهای غیرحرفهای هم میتونن برنامههای حرفهای برای شبکه بنویسند.
مگه node چه جوری کار میکنه؟
سوال خیلی خوبیه. برای اینکه به این سوال جواب بدیم اول باید ببینیم که بقیه وبسرورها چه جوری کار میکنند.
معمولا وبسرورها اینجوری کار میکنند که به ازای هر کانکشن یک thread جدید می سازند و این thread تا زمانی که کانکشن مربوطه باز باشه باقی میمونه. این کار بار پردازشی و مصرف مموری اضافی برای هر کانکشن ایجاد میکنه و به عبارتی باعث میشه تعداد کلاینت هایی که یک وبسرور همزمان میتونه پاسخگو باشه محدود باشه، عددی که به 10 هزار نمیرسه. برای همین این مشکل با نام «مسئله 10 هزار کانکشن همزمان» یا C10K معروفه. البته این مسئلهی جدیدی نیست. بحث سر این مسئله و راهکارهای موجود از حدود 11 سال پیش وجود داشته. وبسرورهای جدید نظیر nginx و lighttpd و cherokee این مشکل رو حل کردند. و البته node.js هم با توجه به هدف اولیه ای که داشته جزو اون دسته از وبسروهایی محسوب میشه که این مشکل رو ندارند.
و این مشکل چطور حل شده؟
قبل از اینکه به راه حل مشکل بپردازیم باید ببینیم مشکل از کجا ناشی میشه.
مشکل از اونجایی ناشی میشه که دریافت، پردازش و پاسخ دادن به یک درخواست از یک کلاینت اونقدر طول میکشه که نمیشه برای دریافت کانکشن بعدی منتظر اتمام کار کانکشن قبلی موند. بنابراین وبسرورها برای پاسخ به کلاینت جدید یک thread جدید ایجاد میکردند.
خوب پس مشکل اصلی در واقع کند بودن روند دریافت، پردازش و پاسخ هست.
دقیقا. اما مسئله اینجاست که پردازنده ها به اندازه کافی سریع هستند و اون چیزی که باعث کند شدن این روند میشه I/O هست. یعنی عملیات ورودی و خروجی، چه از شبکه و چه از سیستم فایل.
اونوقت مشکل IO رو چطور حل کردند؟
برای رفع این مشکل به جای اینکه عملیات ورودی/خروجی مستقیما انجام بشه از معماری رویداد گرا برای پیاده سازی IO استفاده میشه. به عبارتی به جای اینکه منتظر نتیجه IO بمونیم یک رویداد برای دریافت نتیجه تعریف میکنیم و اجرای برنامه ادامه پیدا میکنه. به این ترتیب عملیات های ورودی/خروجی باعث بلاک شدن اجرای برنامه نمیشه. و node هم با همین معماری نوشته شده برای همین اولین جمله ای که در توصیف node در سایتش نوشته شده اینه: «Evented I/O for V8 JavaScript»
اگر وبسرورهایی مثل nginx قبلا این مشکل رو حل کردند پس node چه حرفی واسه گفتن داره؟
درسته که این مشکل قبلا حل شده ولی این مشکل فقط در سطح وب سرور حل شده. منظورم اینه که مثلا وقتی میخوای یک برنامه php رو روی این وبسرور اجرا کنی با اینکه وبسرور برای هر درخواست thread ایجاد نمیکنه ولی php این کار رو میکنه.
پس با این حساب node راهکاری برای برنامه نویسی رویداد گرای IO سمت سرور فراهم کرده.
درسته. البته node اولین نیست. قبل از node این سبک برنامه نویسی با Twisted در python و EventMachine در ruby هم امکان پذیر بوده. خود برنامه نویس node هم گفته که توی طراحی node از این دو پروژه ایده گرفته.
پس چرا اونها به اندازه node معروف نشدند؟
دلایل مختلفی داره.
یکی اینکه برنامه های node به زبان جاوا اسکریپت نوشته میشن. و اکثر کسانی که تو کار توسعه وب هستند کم و بیش با این زبان آشنایی دارند. علاوه بر این زبان جاوا اسکریپت زبان فوق العاده ای برای معماری رویداد گراست و اکثر کسانی که قبلا با جاوا اسکریپت برای مرورگر کد نوشتند برنامه نویسی رویداد گرا با جاوا اسکریپت رو تجربه کردند.
یک مزیت دیگه جاوا اسکریپتی بودن اینه که برای برنامه نویسی سرور و کلاینت از یک syntax استفاده میشه که قطعا راحت تره و حتی بخشهایی از کد رو برای هر دو طرف میشه استفاده کرد (مثل اعتبار سنجی فرمها).
دیگه اینکه node برای موتور جاوا اسکریپت از V8 استفاده میکنه که جزو سریعترین مفسرهای اسکریپتی محسوب میشه و حتی از پایتون هم سریعتره.
دلیل دیگه اینه که node از اول با این ایده یعنی رویداد گرا طراحی شده نه به صورت یک library جداگانه، بنابراین کار باهاش خیلی راحت تره.
ولی به درد من نمیخوره. من هیچ وقت 10 هزار تا بازدیدکننده همزمان ندارم. مشکلی هم با سرعت برنامه هام ندارم.
مسئله فقط سرعت و مقیاس پذیری نیست.
برای مقایسه یک برنامه php رو در نظر بگیرید. هر بار که یک درخواست به سرور ارسال میشه برنامه php اجرا میشه و یک نتیجه ای رو بر میگردونه و تموم میشه. ولی برنامه ای که با node نوشته شده یکبار اجرا میشه و تو حافظه میمونه. اینجا به جای اینکه وبسرور برنامه رو اجرا کنه این برنامه هست که وبسرور رو اجرا میکنه. بنابراین برنامه به همه کانکشنهای سرور دسترسی داره و مثلا میتونه اطلاعاتی رو از یک کلاینت بگیره و به یک کلاینت دیگه بفرسته بدون اینکه از دیتابیس یا shared memory استفاده کنه. برای مثال با این ویژگی میشه بدون استفاده از دیتابیس و یا هیچ ابزار جانبی دیگه ای یک چت روم نوشت.
یک مثال دیگه از قابلیتهای node حالتیه که برای همه درخواست ها احتیاج به یکسری اطلاعات مشترک داریم که باید از دیتابیس خونده بشه. با php یا باید همه اطلاعات هر بار از دیتابیس خونده بشه و یا اینکه یکبار کش بشه و دفعات بعد از کش خونده بشه. ولی با node میشه این اطلاعات رو یکبار خوند و برای همه کانکشن ها ازش استفاده کرد.
در ضمن امروزه با فراگیر شدن وب 2 استفاده از comet هم رایج تر شده. برای پیاده سازی comet در واقع یک کانکشن به سرور برقرار میشه و باز نگه داشته میشه. که با وبسروری مثل آپاچی با زیاد شدن تعداد کانکشنها عملا این کار غیر ممکن میشه. ولی node برای این کار فوق العادست.
نکته دیگه ای که در مورد node وجود داره تعدد ماژول هاشه. تقریبا توی هر زمینه ای که بخواهید برای node ماژول پیدا میشه.
برای نمونه socket.io ماژولی برای پیاده سازی ارتباط دو طرفه بین سرور و مرورگر هست. این ماژول برای پیاده سازی comet تقریبا از همه روشهای موجود نظیر Ajax long pulling و Flash Socket و WebSocket پشتیبانی میکنه و بسته به اینکه مرورگر شما با کدامیک از این روشها سازگار باشه خودش بهترین روش ممکن رو انتخاب میکنه. و تقریبا همه مرورگرهای رایج رو پشتیبانی میکنه.
با این ماژول به راحتی میشه ارتباطات دوطرفه و بلادرنگ بین سرور و کلاینت برقرار کرد.
خلاصه اینکه ابزارها و ماژول های فوق العاده ای برای node نوشته شده نظیر express و hummingbird و vows و ماژولهای مختلفی برای کار با دیتابیسهای مختلف. حتی به خاطر تعدد ماژولها برای node ابزار مدیریت بسته ها (node package manager) هم نوشته شده تا نصب و بروزرسانی ماژولها راحت تر باشه.