<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی رادمنش</title>
        <link>https://virgool.io/feed/@ali_radmanesh</link>
        <description>یک برنامه نویس عاشق کتاب! درحال حاضر توسعه دهنده فرانت اند (React / React-Native)</description>
        <language>fa</language>
        <pubDate>2026-06-17 12:55:22</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/19085/avatar/Qn4Bb7.jpeg?height=120&amp;width=120</url>
            <title>علی رادمنش</title>
            <link>https://virgool.io/@ali_radmanesh</link>
        </image>

                    <item>
                <title>نقشه راهی برای توسعه دهندگان وب در سال 2020!</title>
                <link>https://virgool.io/@ali_radmanesh/%D9%86%D9%82%D8%B4%D9%87-%D8%B1%D8%A7%D9%87%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D8%AF%D9%87%D9%86%D8%AF%DA%AF%D8%A7%D9%86-%D9%88%D8%A8-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84-2020-r91uecsfjcaa</link>
                <description>Web Developer Roadmap 2020سوالی که همیشه ذهن افراد تازه وارد حوزه وب را درگیر می‌کند این است که  از کجا شروع کنیم و کدام تکنولوژی / استک گزینه بهتری برای من است و یا اصلا چه گزینه هایی برای انتخاب کردن وجود دارد؟! این قضیه فقط برای افراد تازه کار نیست و توسعه دهندگانی که تجربه کاری در زمینه وب دارند هم اغلب از خود می پرسند: &quot;مرحله بعدی چیست و برای حرفه ای شدن چه چیزهایی رو باید یاد بگیرم؟&quot;فردی به نام کامران احمد (توییتر) سعی کرده به این سوال جواب بده! کامران از سال 2017 شروع کرد به ساخت نقشه راه برای افرادی که قصد دارند در فرانت اند، بک اند و دواوپس فعالیت کنند. کاری که ازش به شدت استقبال شده و نقشه راه های تقریبا کاملی به دست اومده که خیلی به درد بخور هستند. این نقشه راه ها به زبان انگلیسی و در ریپو گیت هابش به آدرس زیر موجود هست. https://github.com/kamranahmedse/developer-roadmap کاری که کم و بیش از سال گذشته صورت گرفت و امسال هم وارد ریپو اصلی شد ترجمه هایی از این نقشه راه ها به زبان های مختلف هست. به عنوان مثال ترجمه فارسی سال 2019 آنها توسط جادی صورت گرفت (در این آدرس) و من تصمیم گرفتم در دوران قرنطینه این نقشه راه ها رو برای سال 2020 به زبان فارسی آپدیت کنم!نتیجه کار به صورت زیر درآمد:مقدمه و پیش نیازهانقشه راه Front-endنقشه راه Backendنقشه راه Devopsبرای مشاهده تصاویر با کیفیت بالا به بخش ترجمه فارسی در ریپو اصلی مراجعه کنید. ترجمه های من اونجا موجوده: https://github.com/kamranahmedse/developer-roadmap/tree/master/translations/persian امیدوارم این ترجمه ها به درد فارسی زبان ها بخوره :)</description>
                <category>علی رادمنش</category>
                <author>علی رادمنش</author>
                <pubDate>Mon, 06 Apr 2020 10:42:07 +0430</pubDate>
            </item>
                    <item>
                <title>نمایش تعداد خیلی زیادی مارکر روی نقشه!</title>
                <link>https://virgool.io/@ali_radmanesh/%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%DB%8C%D9%84%DB%8C-%D8%B2%DB%8C%D8%A7%D8%AF%DB%8C-%D9%85%D8%A7%D8%B1%DA%A9%D8%B1-%D8%B1%D9%88%DB%8C-%D9%86%D9%82%D8%B4%D9%87-lm6dh44wv7lr</link>
                <description>کلی مارکر!سلام سلاممن بعد از مدت ها از لاک خودم اومدم بیرون و شروع کردم به نوشتن!یه موضوعی بود که چند وقتی ذهنم درگیرش بود و راه حلی براش پیدا نکرده بودم. من چند ماهی هست به واسطه پروژه ای که در شرکت انجام میدم با نمایش نقشه (در سایت و اپ موبایل) زیاد سروکار دارم. به این صورت که دیتاهای زیادی باید روی نقشه نمایش داده بشه و چالشی که اینجا وجود داره این هست که اگر بخواهیم تعداد خیلی زیادی مارکر (یا پین) رو روی نقشه نمایش بدیم، صفحه به شدت کند میشه و عملا نمیشه کاری انجام داد.برای اینکه بتونیم این مشکل رو حل کنیم دو تا راه حل وجود داره. قبل گفتن راه حل ها اینو بگم که من از OpenStreetMap به عنوان Tile Server و از Leaflet به عنوان Map Client در وب استفاده می کنم.راه حل 1. استفاده از Clusteringاولین راه حلی که برای این مسئله پیدا کردیم این بود که از Clustering (به فارسی میشه بهش گفت دسته بندی یا خوشه بندی) استفاده کرد، به این صورت که هر چند تا مارکر نزدیک به هم تجمیع میشن و با زوم کردن روی نقشه میشه به تعداد بیشتری از مارکرها رسید و در زوم های کم فقط کلیاتی از تعداد مارکرها رو میشه دید. از اون جایی که من میخوام درباره ی راه حل دوم صحبت کنم، بنابراین در اینجا فقط یک صفحه که خروجی خوشه بندی رو نشون بده میارم تا متوجه بشید راجع به چی صحبت کردم!این لینک رو باز کنید تا ببینید Clustering یعنی چی؟ Clustering 50K Markersاگر در آینده فرصت و حسش بود یه پست مفصل درباره ی Clustering میزارم.راه حل 2. استفاده از Canvas و CircleMarkerحالا اگه کسی که قراره کار رو بهش تحویل بدید با خوشه بندی حال نکنه و بگه من میخوام همه نقطه ها رو روی نقشه ببینم و صفحه هم کند نباشه، اون وقت چیکار باید کرد؟!اول از همه بزارید بگم چرا وقتی تعداد زیادی مارکر روی نقشه می اندازیم، سرعت به شدت افت میکنه. Leaflet به ازای هر Marker که تعریف می کنید و به نقشه اضافه می کنید یک DOM element درنظر می گیره. حالا درنظر بگیرید که شما 10،000 تا مارکر به نقشه اضافه می کنید. این باعث میشه 10 هزار تا element به صفحه HTML شما اضافه بشه! در نتیجه سرعت به شدت پایین میاد و عملا مرورگر قفل میکنه. راه حلی که گوگل به صورت هوشمندانه استفاده کرده رو در تصویر زیر بهتون نشون میدم:راه حل Google برای بهبود عملکرد حین نمایش تعداد زیادی مارکرهمان طور که در عکس می بینید تمامی المان های روی نقشه داخل یک canvas قرار گرفته اند و سپس canvas به DOM اضافه شده است. ما هم از گوگل کمک می گیریم!تو این روش به جای Marker از CircleMarker استفاده می کنیم و برای اینکه به ازای هر نقطه یک DOM Element تو leaflet ساخته نشه، بهش میگیم تمامی نقاط رو بریز توی یک Canvas و بعد فقط canvas رو به DOM اضافه کن. به همین راحتی!از اون جایی که اینجا نمیشه خوب تکه کدها رو آورد، من باز هم خروجی نهایی کار همراه با سورس کد رو میزارم براتون تا بتونید ازش استفاده کنید!لینک خروجی نهایی (نمایش 100 هزار نقطه روی نقشه): 100K dots on mapلینک سورس کد: https://github.com/AliRadmanesh/leaflet-lots-of-markers امیدوارم این پست مفید باشه براتون. تا پست بعدی بای :)</description>
                <category>علی رادمنش</category>
                <author>علی رادمنش</author>
                <pubDate>Thu, 27 Feb 2020 02:15:14 +0330</pubDate>
            </item>
                    <item>
                <title>همه چیز درباره ی فریمورک React Native</title>
                <link>https://virgool.io/@ali_radmanesh/%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%DB%8C-%D9%81%D8%B1%DB%8C%D9%85%D9%88%D8%B1%DA%A9-react-native-twgdodlxtbl0</link>
                <description>react native app development در نوشته ی قبلی تاریخچه ی مختصری از تکنولوژی هایی که برای توسعه ی موبایل اپلیکیشن وجود دارد را دیدیم. اگر نوشته ی قبلی را نخوانده اید توصیه می کنم حداقل یک نگاه کلی به آن بیندازید، خالی از لطف نیست! از اینجا بخوانید: سیر توسعه ی اپلیکیشن های موبایل چندسکویی (Cross-Platform Apps)در آنجا گفتیم که یکی از بهترین گزینه ها برای توسعه مولتی پلتفرم، فریمورک React Native است. حالا می خواهیم بیشتر با این فریمورک آشنا بشویم، ببینیم این فریمورک چه ویژگی هایی دارد که باعث شده اینقدر محبوب بشود و چه مزایا و معایبی دارد.اصلا React Native چیست؟اReact Native یک فریمورک جاوااسکریپت برای نوشتن موبایل اپلیکیشن های واقعی و قابل اجرا به صورت native در اندروید و iOS است. React Native برپایه ی React (یک کتابخانه ی جاوااسکریپت توسعه داده شده توسط فیسبوک برای ایجاد واسط کاربری (User Interface)) ایجاد شده است، با این تفاوت که هدفش به جای تولید وب اپلیکیشن، موبایل اپلیکیشن است. به زبانی دیگر، توسعه دهندگان وب می توانند اپلیکیشن موبایلی بنویسند که واقعا مشابه یک موبایل اپلیکیشن واقعی است! و این کار با استفاده از این کتابخانه ی فوق العاده صورت می گیرد. هم چنین از آن جایی که اکثر کدی که شما می نویسید می تواند برای پلتفرم های مختلف مورد استفاده قرار بگیرد، React Native به شما این قابلیت را می دهد که به طور هم زمان برای هر دو پلتفرم اندروید و iOS برنامه ی خود را توسعه دهید. این فوق العاده است!نحوه ی برنامه نویسی در React Native بسیار شبیه به React است که ترکیبی از جاوااسکریپت و زبانی شبیه به XML که نامش JSX است. یک نمونه کد ساده آن به شکل زیر است: https://gist.github.com/AliRadmanesh/aabf570e2f60c92de178b22326eeba4f در پشت پرده اتفاقی که می افتد این است که React Native یک پل (bridge) میان برنامه ای که ما به زبان جاوااسکریپت نوشته ایم و واسط (API) های دسترسی به ماژول های اصلی سیستم عامل (در اینجا اندروید و iOS) ایجاد می کند و بنابراین، برنامه شما با استفاده از اجزای واقعی UI موبایل ایجاد می شود، نه webview! این باعث می شود که برنامه ی شما تا حد زیادی شبیه برنامه هایی باشد که با اندروید یا iOS تولید می شوند. برای دسترسی به اکثر ویژگی های مهم موبایل، React Native واسط هایی را درنظر گرفته است. به عنوان مثال برای دسترسی به دوربین، دسترسی به موقعیت مکانی (location)، ذخیره ی اطلاعات برنامه در حافظه تلفن همراه و ... .پلی که میان بخش js و بخش native ایجاد می شود.برنامه نویسی با React Native نسبتا ساده، سریع و کارآمد است. اگر در فضای توسعه ی وب باشید و با نسل جدید جاوااسکریپت (ES6/ES7) کار کرده باشید خیلی سریع می توانید React Native را یاد بگیرید و اپلیکیشن دلخواه خودتان را بسازید!برای اینکه با استفاده از React Native اپلیکیشن خود را توسعه دهید نیازی به یادگیری جاوا یا Swift ندارید اما باید با اکوسیستم توسعه ی اپلیکیشن اندروید و iOS آشنایی داشته باشید. منظورم از اکوسیستم توسعه این است که بدانید در اندروید gradle چه کاری انجام می دهد، فایل manifest.xml چیست، تصاویر، فونت ها و ... در چه دایرکتوری قرار می گیرند، ماژول های سیستمی که اضافه می شود در چه فایل هایی از دایرکتوری android تغییرات ایجاد می شود و ... . هم چنین در سمت iOS فایل info.plist چه اطلاعاتی دارد، چگونه از Pod برای استفاده از ماژول های مدنظرمان به درستی استفاده کنیم، با فضای کلی Xcode آشنایی داشته باشیم و ... . نترسید! همه ی این ها را وقتی به طور جدی درگیر انجام یک پروژه با React Native بشوید یاد می گیرید. من خودم وقتی اولین پروژه ام را با React Native شروع کردم صرفا اطلاعات محدودی از توسعه ی اپ اندروید داشتم اما با جستجوی مناسب همه ی آنچه نیاز داشتم را پیدا کردم، از رفع ارورهای خنده دار و پیش پا افتاده تا خروجی گرفتن برای اندروید و iOS و حتی آپلود اپلیکیشن در پلی استور و اپ استور!اپلیکیشن Adidad GLITCH که با استفاده از react native ایجاد شده است.در ادامه برخی مزایا و هم چنین معایب استفاده از این فریمورک را خیلی سریع بررسی می کنیم. مزایای استفاده از React Native  توسعه ی سریع اپلیکیشناز آن جایی که React Native برای این ساخته شد که برنامه نویسان وب بتوانند به راحتی موبایل اپلیکیشن هم توسعه بدهند، بنابراین قواعد آن تا حد زیادی شبیه به برنامه نویسی وب است و می توانید سریع تر از جاوا یا سوئیفت برنامه ی خود را توسعه دهید.مولتی پلتفرم قابلیت بعدی React Native که خیلی باارزش هم هست مولتی پلتفرم بودن آن است. شما با تغییراتی اندک در ساختار کد خود می توانید هر دو خروجی اندروید و آی او اس را داشته باشید. این یعنی نیاز به دو تیم مختلف برای موبایل اپلیکیشن ندارید و در زمان و هزینه های خود صرفه جویی می کنید. برای استارتاپ ها دو فاکتور قبلی بسیار حیاتی است!  عملکرد قابل قبول اگرچه ممکن است آن پلی که میان جاوااسکریپت و دسترسی های native اپلیکیشن ایجاد شده است تاحدی باعث کند شدن برنامه بشود اما شما اکثرا این کندبودن را حس نمی کنید! چرا که در اغلب موارد نیازی نیست که این جابه جایی از ناحیه ی جاوااسکریپت به native رخ بدهد و برنامه کاملا مانند یک اپلیکیشن متداول با سرعت بالا کار می کند. این برتری بالای React Native نسبت به رقبای قدیمی تر مثل اپ های WebView و زامارین است.  ماژولار بودن و قابلیت توسعه یکی از ویژگی هایی که شخصا خیلی دوستش دارم همین ویژگی است. بگذارید با یک مثال این بخش را توضیح بدهم. در یکی از اپلیکیشن هایی که با React Native توسعه می دادم نیاز داشتم که پس از دریافت اس ام اس برنامه به طور خودکار کد ارسالی را بخواند. با کمی جستجو متوجه شدم این ماژول پیاده شده است اما دیگر پشتیبانی نمی شود بنابراین خودم دست به کار شدم و از آن جایی که قابلیت خواندن اس ام اس فقط در اندروید وجود دارد (البته آن هم دارد برداشته می شود!) کد اندروید آن را پیدا کرده و با یک پورت زدن (همان پل زدن بین اندروید و جاوااسکریپت) این قابلیت را به برنامه اضافه کردم. به همین راحتی! هر کسی می تواند سرویسی که نیاز دارد را خودش پیاده کند و در برنامه اش از آن استفاده کند. به این کار توسعه ی سرویس های اختصاصی (Custom Service) می گویند.  معایب React Native سرعت تغییرات بالا فریمورک React Native هنوز در نسخه ی بتا است و جای کار زیادی دارد. (در حال حاضر آخرین نسخه ی آن 0.59 است.) بنابراین اگر امروز یک پروژه ی جدید را با آن شروع کنید ممکن است برنامه ی اولیه شما با خطا مواجه شود! بنابراین اگر وارد برنامه نویسی React Native می شوید این نکته را درنظر داشته باشید که شما هم باید بتوانید هم زمان با این تغییرات جلو بروید.  پایدارنبودن کتابخانه های جانبی یکی از مشکلاتی که هنوز هم با آن دست و پنجه نرم می کنم خطاهایی است که هنگام آپدیت کردن برنامه ام به آن برخورد می کنم. فرض کنید ورژن react برنامه شما 16.6 و ورژن react native برنامه شما 0.57 است و چندین کتابخانه وابسته هم استفاده کرده اید. حالا اگر این کتابخانه ها را به آخرین ورژن آپدیت کنید به احتمال خیلی زیاد به خطاهای زیادی برخورد خواهید کرد! این واقعا آزاردهنده است و امیدوارم با تغییراتی که قرار است تیم react native روی هسته ی آن شکل دهد این مشکل هر چه زودتر برطرف شود.  جمع بندی با تمام حرف های گفته شده اگر علاقه مند به توسعه موبایل اپلیکیشن هستید و قصد دارید کل بازار را هدف قرار دهید (برای هر دو پلتفرم بازار اپ خود را عرضه کنید) دو گزینه پیش رو دارید:1. از دو تیم مختلف برای توسعه اندروید و آی او اس به طور مجزا استفاده کنید.این کار هزینه و احتمالا زمان بیشتری می طلبد.2. از یک تیم متخصص در زمینه توسعه مولتی پلتفرم استفاده کنید.در حال حاضر دو تکنولوژی معروف و قابل اطمینان برای توسعه مولتی پلتفرم React Native و Flutter هستند که هر دو توسط دو کمپانی بزرگ یعنی فیسبوک و گوگل پشتیبانی می شوند. هر دوی این تکنولوژی ها به سرعت در حال رشد هستند و می توان با آن ها به توسعه اپ پرداخت اما در حال حاضر اگر به بازار کار نگاهی بیندازید متوجه می شوید اکثر شرکت ها متقاضی توسعه دهنده react native هستند و فلاتر هنوز خیلی شناخته شده نیست! در انتها چند لینک برای مطالعه بیشتر در این زمینه را در پایین می آورم:https://www.simplytechnologies.net/blog/2018/4/4/lets-get-clear-about-react-nativehttps://www.codementor.io/saketkumar95/how-react-native-works-mhjo4k6f3http://www.discoversdk.com/blog/how-react-native-worksممنون می شوم اگر این مقاله کمکی به شما کرد با لایک و بازنشر، باعث بیشتر دیده شدن آن شوید.</description>
                <category>علی رادمنش</category>
                <author>علی رادمنش</author>
                <pubDate>Fri, 05 Apr 2019 10:58:00 +0430</pubDate>
            </item>
                    <item>
                <title>سیر توسعه ی اپلیکیشن های موبایل چندسکویی (Cross-Platform Apps)</title>
                <link>https://virgool.io/iran-react-community/cross-platform-apps-history-qq7j4uczgmgr</link>
                <description>یکی از بزرگ ترین مشکلاتی که تیم های توسعه دهنده موبایل اپلیکیشن با آن مواجه هستند آشنایی و استفاده از تکنولوژی های مختلف است. iOS و اندروید – دو پلتفرم اصلی مورد استفاده در موبایل ها – زبان های متفاوتی را پشتیبانی می کنند. برای iOS اپل از Swift و Objective-C پشتیبانی می کند و برای توسعه ی اپلیکیشن های اندروید، از زبان های جاوا و Kotlin استفاده می شود.اما تفاوت های این دو پلتفرم به همین جا ختم نمی شود. ابزارهای توسعه ی اپلیکیشن در این پلتفرم ها و حتی واسط هایی که برای ارتباط با عملکردهای مهم موبایل استفاده می شوند هم با یکدیگر تفاوت دارند. توسعه دهندگان اپلیکیشن برای هر کدام از این پلتفرم ها مجبورند نحوه ی دستیابی به این ماژول ها (مثل دسترسی به دوربین، دریافت اطلاعات جغرافیایی و ...) را جداگانه یاد بگیرند.دشواری یادگیری دو محیط کاملا متفاوت از یکدیگر باعث شد این ایده به ذهن توسعه دهندگان برسد که بتوانند با یادگیری یک زبان، یک تکنولوژی و یک ابزار بتوانند برای هر دو پلتفرم اندروید و iOS اپلیکیشن بنویسند.در ادامه می خواهیم نگاهی بیندازیم به تلاش هایی که برای توسعه ی اپلیکیشن های مولتی پلتفرم صورت گرفته است.اپلیکیشن های هیبریدی (Hybrid Apps) اولین تلاش ها برای دستیابی به این هدف اپلیکیشن های قدرت گرفته از WebView بودند. این برنامه ها کد native (یا مختص به پلتفرم اندروید یا iOS) خیلی کمی دارند و به این صورت هستند که شما با استفاده از HTML، CSS و (JS (JavaScript برنامه ای را روی یک مرورگر وب اجرا می کنید. از آن جایی که این وب اَپ ها با واسط native در ارتباط هستند می توانند به ویژگی های دستگاه مثل دوربین دسترسی داشته باشند.اپلیکیشن های هیبریدی  ابزارهایی مثل Cordova، PhoneGap و ionic این امکان را به توسعه دهندگان می دهند تا این برنامه های اصطلاحا هیبریدی را تولید کنند. برتری اپ های هیبریدی این است که می توان به جای یادگیری دو تکنولوژی مجزا برای توسعه اندروید و iOS، فقط با استفاده از دانش وب اپلیکیشن موبایل توسعه داد.اما نقطه ضعف این برنامه ها این است که عملکرد آنها هرگز به راحتی و روان بودن یک اپلیکشن native اندروید یا iOS نیست! و دسترسی های محدودی دارند و از طرفی عملکرد ضعیف و کند آنها اصلا تجربه ی خوبی برای کاربران رقم نمی زند! بنابراین وب اپ ها گزینه ی مناسبی برای توسعه برنامه های متوسط و سنگین نیستند.زامارین (Xamarin)یکی دیگر از تلاش های جدی برای رسیدن به هدف &quot;توسعه چندسکویی اپلیکیشن&quot; (cross-platform development) فریمورک Xamarin بود.فریمورک زامارین  زامارین در سال 2011 ایجاد شد، در سال 2012 Xamarin Mac را معرفی کرد که پلاگینی برای توسعه اپ برای سیستم عامل macOS بر پایه ی زبان C# بود. در سال 2013 نسخه ی 2 زامارین معرفی شد که در آن IDE یا محیط برنامه نویسی مخصوص خود همراه با نسخه ی سازگار با Visual Studio برای توسعه ی اپلیکیشن برای اندروید، iOS و ویندوز بود! در سال 2016 نیز اعلام شد مایکروسافت شرکت Xamarin را به مالکیت خود در آورده است.زامارین حرکت بزرگی به سمت توسعه ی اپلیکیشن برای هر دو پلتفرم بود و هم اکنون هم کم و بیش از آن برای توسعه ی اپلیکیشن استفاده می شود. شخصا تا به حال از این فریمورک و به کلی از C# استفاده نکرده ام اما با یک جستجوی ساده می توانیم پی ببریم مشکلات اصلی این فریمورک کند بودن برنامه نسبت به برنامه های native، حجم بالای اپ های خروجی و زمان بر بودن پیاده سازی رابط کاربری (UI) برای اپلیکیشن ها است.داستان شکل گیری React Nativeکم کم به قسمت جذاب داستان نزدیک می شویم!همان طور که می دانید فیسبوک یک کمپانی متشکل از تعداد زیادی توسعه دهنده وب است و از طرفی تیم های توسعه دهنده موبایل اپلیکیشن (هم برای اندروید و هم برای iOS) دارد. از آن جایی که ارتباط این دو تیم با یکدیگر، تلاش برای یکسان بودن برنامه های خروجی روی دو پلتفرم و ... مشکلات زیادی برای این کمپانی به همراه داشت، آنها به این فکر رسیدند که فریمورکی توسعه بدهند که هم بتوانند با استفاده از یک تکنولوژی برای هر دو پلتفرم اپلیکیشن تولید کنند و هم از پتانسیل توسعه دهندگان وب خود استفاده کنند.از طرفی فیسبوک در سال 2013 کتابخانه ی react را منبع باز (Open-Source) کرده بود. React یک کتابخانه ی جاوااسکریپت برای ایجاد رابط کاربری (User interface) است که همین دو هفته ی پیش (یعنی 12 نوامبر) اولین نسخه ی stable یا پایدار آن (بعد از گذشت 5 سال) معرفی شد.بنابراین مهندسان فیسبوک دست به کار شدند و از همان سال 2013 که react معرفی شد شروع به خلق فریمورکی با استفاده از این کتابخانه ی فوق العاده کردند که در سال 2015 اولین نسخه ی آن معرفی شد: React native!امکان توسعه ی هم زمان برای Android و iOS با فریمورک React Nativeفریمورک React Native در وب سایت رسمی اش به این صورت معرفی شده است:فریمورکی برای تولید اپلیکیشن های native با استفاده از جاوااسکریپت و react(و منظور از اپلیکیشن native برنامه ای است که مختص یک پلتفرم خاص تولید می شود و می تواند به طور کامل از ویژگی های آن پلتفرم استفاده کند. مثل اپلیکشن native اندروید یا iOS و یا ویندوز. دلیل بیان آن به این صورت صرفا جهت تمایز با web app ها و mobile cloud app هاست.)این دو محصول از پروژه ی فیسبوک اُپن سورس (Facebook Open Source) یعنی کتابخانه ی react و فریمورک react native از زمان معرفی تا الان (یعنی نوامبر 2018) رشد خیره کننده ای داشته اند و توسعه دهندگان بسیاری از آن ها برای توسعه وب و موبایل اپلیکیشن استفاده کرده اند.از معروف ترین شرکت های استفاده کننده از react می توان به نام های بزرگ زیر اشاره کرد: Netflix: بزرگ ترین سرویس پرداختی پخش ویدیوYahoo!: یکی از بزرگ ترین موتورهای جستجو که از react در سرویس ایمیل خود استفاده کرده است.Sberbank: بزرگ ترین بانک روسیهFacebook, WhatsApp, Instagram: کاملا واضح است که فیسبوک از کتابخانه ای که خود تولید کرده است در محصولاتش استفاده کند!Atlassian: خالق Jira، BitBucket، HipChat و ... (ابزارهای توسعه ی تیمی) هم چنین ببینید تعدادی از معروف ترین شرکت هایی را که از react native برای توسعه ی اپلیکیشن موبایل خود استفاده می کنند: Facebook: فیسبوک در بخشی از اپلیکیشن اصلی خود و تمام اپلیکیشن Facebook Ads از react native استفاده کرده است.Instagram: اینستاگرام که متعلق به فیسبوک است نیز به چالش استفاده از react native جواب مثبت داده است. البته فقط بخشی از این اپلیکیشن با استفاده از این فریمورک پیاده سازی شده است.Walmart: والمارت بزرگ ترین خرده فروشی دنیاست که قبلا تجربه ی موفقی در استفاده از Node.js داشته است و بار دیگر به جاوااسکریپت اعتماد کرده است و اپلیکیشن موبایل خود را با react native توسعه داده است.Bloomberg: یکی از بزرگ ترین سرویس های خبری دنیا که روزانه ی میزبان حجم عظیمی از محتوا است نیز از react native استفاده می کند.Uber: اوبر بزرگ ترین سرویس آنلاین درخواست تاکسی در دنیاست. اپلیکیشن UberEATS آنها قدرت گرفته از react native است. این یعنی مهندسان اوبر به قدرت React native پی برده اند و با اطمینان از آن برای توسعه ی اپلیکیشن دیگر خود استفاده کرده اند! در بالا صرفا تعداد کمی از اپلیکیشن هایی را نام بردم که قدرت گرفته از react native هستند. برای مشاهده ی لیست کامل تری از این اپلیکیشن ها به اینجا مراجعه کنید.توسعه ی موبایل اپلیکیشن با استفاده از دانش وب!اگر در فضای توسعه ی وب اپلیکیشن باشید حتما در کنار کتابخانه ی react، نام فریمورک  Angular.js و فریمورک Vue.js نیز به گوشتان خورده یا از آن استفاده کرده اید. حالا ارتباط این دو با موبایل اپلیکیشن ها چیست؟بعد از موفقیتی که Vue.js بدست آورده و محبوبیت زیادی بین توسعه دهندگان وب پیدا کرد، توسعه دهندگان فریمورک Vue Native را برای توسعه ی موبایل اپلیکیشن معرفی کرده اند. Vue Native نوپاست، اواسط 2018 معرفی شده است، توسط جامعه توسعه دهندگان به وجود آمده است و توسط یک کمپانی بزرگی حمایت نمی شود (درست مثل Vue.js) و در توضیحات آن به طور صریح آمده است که این فریمورک برگرفته از react native است و صرفا یک لایه روی آن است تا توسعه دهندگانی که با Vue.js آشنایی دارند به راحتی بتوانند موبایل اپلیکیشن هم توسعه بدهند. پس این طور می توان گفت که Vue Native نوآوری خاصی ندارد و صرفا همان react native است با زبان (Syntax) متفاوت!هم چنین به تازگی با فریمورکی آشنا شدم به نام NativeScript که از قضا خیلی هم جدید نیست (بیشتر از 3 سال است که در repository گیت هاب در حال توسعه ی آن هستند!) و مثل react native که از react استفاده می کند، در این فریمورک می توان از angular، Vue.js، TypeScript و یا خود JavaScript برای تولید موبایل اپلیکیشن استفاده کرد.شخصا با هیچ کدام از دو فریمورک VueNative و NativeScript کار نکرده ام اما با یک نگاه کلی به تعداد آموزش هایی که برای آن ها وجود دارد، تعداد ستاره هایی که در مخزن گیت هاب خود دریافت کرده اند، تعداد کتابخانه های جانبی توسعه داده شده برای آنها و ... می توان پی برد هیچ کدام به اندازه ی react native محبوب نیستند.اما در اینجا جا دارد از رقیب نوپا اما قوی react native نیز نام ببریم: Flutter!ورود گوگل به حوزه ی اپلیکیشن های چندپلتفرمی!فلاتر یک SDK برای توسعه ی اپلیکیشن برای هر دو پلتفرم محبوب بازار است!فلاتر در ماه می 2017 (حدود دو سال بعد از معرفی react native) توسط گوگل رونمایی شد. بله گوگل! کمپانی گوگل بعد از تقریبا ده سال که اندروید را معرفی کرد و انقلابی در صنعت توسعه ی موبایل به وجود آورد حالا برای اینکه از دیگر رقبا عقب نماند کیت توسعه ی نرم افزاری (SDK) فلاتر را برای توسعه چندسکویی موبایل اپلیکیشن ها معرفی و منبع باز کرده است.فلاتر برخلاف react native (که از زبان جاوااسکریپت استفاده می کند) از زبان نه چندان شناخته شده ی dart برای توسعه اپلیکیشن استفاده می کند. از طرفی این SDK اواسط سال گذشته برای اولین بار معرفی شده است، بنابراین هنوز در ابتدای راه است و نباید انتظار داشت به طور گسترده از آن استفاده بشود اما از آن جایی که گوگل که تجربه ی بسیار موفق اندروید را در کارنامه ی خود دارد پشت این قضیه است اصلا نباید این بازیگر جدید را دست کم گرفت. شنیده ها نیز حاکی از این است که فلاتر هیچ دست کمی از react native ندارد و در نوع خود از کارایی بالایی برخوردار است. فقط همان طور که اشاره کردم از آن جایی که این تکنولوژی هنوز نوپاست ممکن است در بعضی بخش ها مانند react native قوی عمل نکرده باشد و هنوز به آن بلوغ و پختگی نرسیده باشد.شاید بد نباشد به این تصویر هم نگاهی بیندازید که به طور خلاصه سه نسل مختلف توسعه ی موبایل اپلیکیشن ها را مقایسه می کند:مقایسه ی سه نسل مختلف توسعه ی موبایل اپلیکیشن در این نوشته از تلاش هایی که در حوزه ی توسعه ی چندسکویی اپلیکیشن صورت گرفته است و شرکت های بزرگی مثل فیسبوک و گوگل که انصافا کارهای بزرگی هم در این زمینه انجام داده اند صحبت کردیم. اما جالب است بدانید در این راه شرکت مایکروسافت در کنار زامارین (که خیلی موفق نبود) تلاش هایی کرده است و در حال حاضر در حال کار روی پروژه ای به نام ReactXP است. طبق توضیح وب سایت رسمی ReactXP کتابخانه ای برای ساختن اپلیکیشن های چندسکویی با استفاده از React JS و React Native است. اما این سوال پیش می آید که تفاوت آن با react native یا flutter در چیست؟ تفاوت اصلی آن در این است که شما با یک مرتبه برنامه نوشتن می توانید علاوه بر اندروید و iOS برای وب و ویندوز هم اپلیکیشن خود را توسعه دهید. (البته react native قابلیت توسعه برای ویندوز و وب را هم درنظر گرفته است.) جذاب به نظر می رسد! اما باید دید مایکروسافت تا چه اندازه قصد سرمایه گذاری روی این تکنولوژی را دارد و چقدر در این زمینه موفق عمل می کند.بالاخره کدام تکنولوژی را برای توسعه موبایل اپلیکیشن انتخاب کنیم؟در انتها می خواهم تجربه ی شخصی ام را برای افرادی که تمایل دارند وارد حیطه ی توسعه ی موبایل اپلیکیشن بشوند بیان کنم.اگر تا به حال سابقه ی استفاده از زبان های Swift یا جاوا را (به غیر از توسعه ی موبایل اپلیکیشن) داشته اید و تا حد خوبی با زیر و بم این زبان ها آشنایی دارید توصیه می کنم به سمت توسعه ی native اندروید یا iOS بروید.اما اگر هم چنان علاقه دارید وارد دنیای مولتی پلتفرم شوید می توانید به گزینه های زیر نگاهی بیندازید!از میان تکنولوژی هایی که برای توسعه ی مولتی پلتفرم در بالا به آنها اشاره کردم انتخاب من در حال حاضر (یعنی انتهای سال 2018) بی شک React Native خواهد بود! حتی اگر با فریمورک های Angular و Vue.js هم آشنایی دارید باز هم بهتر است از NativeScript استفاده نکنید، چرا که از لحاظ کتابخانه ی جانبی اصلا قابل مقایسه با React Native نیست. البته اگر با Vue.js راحت تر هستید احتمالا VueNative گزینه ی خوبی برای شما باشد، چرا که از تمامی کتابخانه های جانبی React Native پشتیبانی می کند.البته قبل تر هم اشاره کردم که فلاتر گوگل هم تکنولوژی قدرتمندی است اما به 2 دلیل فعلا گزینه ی مناسبی به نظر نمی رسد: 1 زبان دارت ناشناخته است و برای یادگیری آن زمان بیشتری باید صرف کنید. 2 کتابخانه های جانبی و جامعه ی توسعه دهندگان ضعیف تری نسبت به React Native دارد.دو رویداد جذاب!در روزهای آتی دو رویداد جذاب را پیش رو داریم:اولی وبینار یک ساعته ی &quot;One project. One language. Three apps.&quot; که درباره ی React Native و NativeScript است و در تاریخ 6 دسامبر برگزار می شود. لینک ثبت نام:   One project. One language. Three appsدومی رویداد Flutter Live 2018 است که در آن مهندسان گوگل به رونمایی از ویژگی های جدید فلاتر خواهند پرداخت و در طول سمینار با استفاده از فلاتر یک اپلیکیشن توسعه می دهند! این رویداد در 4 دسامبر برگزار می شود. لینک ثبت نام:  Flutter Live 2018 (با فیلترشکن فعال!)اگر مشتاق هستید بیشتر درباره ی این دو تکنولوژی بدانید توصیه می کنم در هر دو رویداد ثبت نام کنید. هر دو رایگان هستند و به صورت آنلاین می توانید تماشا کنید.پی نوشت: در این نوشته از اصطلاحات کتابخانه (Library)، فریمورک (Framework) و کیت توسعه ی نرم افزاری ([Software Development Kit [SDK) استفاده شده است که با هم تفاوت هایی دارند. در یک نوشته ی جداگانه به توضیح این مفاهیم خواهم پرداخت.امیدوارم مطالب این نوشته برای شما مفید واقع شده باشد. ممنون می شوم با لایک کردن  ❤  و به اشتراک گذاشتن نظرات، پیشنهادات و حتی انتقادات تان! به بهتر شدن این مطلب کمک کنید.</description>
                <category>علی رادمنش</category>
                <author>علی رادمنش</author>
                <pubDate>Thu, 29 Nov 2018 20:30:04 +0330</pubDate>
            </item>
            </channel>
</rss>