لینک کوتاه مطلب : https://hsgar.com/?p=3559

محدب در مقابل Firebase | مرکز توسعه دهنده محدب

Convex و Google’s Cloud Firestore هر دو پلتفرم هایی برای مدیریت وضعیت جهانی در برنامه های مدرن بدون سرور هستند. هر دو پلتفرم اسناد را ذخیره می‌کنند و برنامه‌های کاربردی را از تغییرات سند در زمان واقعی بدون نیاز به مدیریت زیرساخت‌های خود توسط توسعه‌دهندگان برنامه مطلع می‌کنند.

در Convex ما برای Firebase احترام زیادی قائل هستیم. ما در حال ساخت این محصول هستیم زیرا همچنین معتقدیم که توسعه دهندگان سزاوار یک پلت فرم جامع برای مدیریت دولتی جهانی هستند. Firebase یکی از اولین تیم هایی بود که روی این مشکل کار کرد و نوآوری های زیادی در این فضا انجام داد.

همانطور که گفته شد، چند تفاوت مهم بین این دو پلتفرم وجود دارد:

  • Backend API
  • React Integration
  • فلسفه صحت انتها به انتها

“Firebase” در واقع به دو محصول مجزا اشاره دارد: پایگاه داده Realtime Firebase و Cloud Firestore. این بحث بر روی Cloud Firestore متمرکز است، زیرا این پیشنهاد جدیدتر و مقیاس پذیرتر Firebase است.

Backend API: اسناد یا توابع؟را

بزرگترین تفاوت معماری بین Convex و Cloud Firestore است چگونه برنامه شما با داده های خود تعامل دارد.

با Cloud Firestore، مشتری با بارگیری اسناد مستقیماً از پایگاه داده با داده های خود تعامل دارد. اگر در حال ساختن یک برنامه چت هستید و کاربران و پیام‌ها را در Cloud Firestore ذخیره می‌کنید، کد برنامه شما نیز با همان اسناد کاربر و پیام ارتباط برقرار می‌کند.

در Convex، تمام دسترسی به اسناد از طریق توابع Convex انجام می شود. این توابع می توانند اسناد را مستقیماً از پایگاه داده برگردانند، اما همچنین می توانند داده های مشتق شده از این اسناد را برگردانند.

وجود این لایه اضافی روی سرور به دو دلیل مهم است:

  1. اجتناب از آبشارهای درخواستی سریال
  2. محصور کردن منطق کسب و کار

اجتناب از درخواست سریال آبشاررا

درخواست سریال آبشار زمانی اتفاق می افتد که یک برنامه از چندین درخواست سریال برای بارگذاری داده های خود استفاده می کند. این به عملکرد بارگذاری صفحه آسیب می زند زیرا رندر کردن سایت شما اکنون به چندین سفر رفت و برگشت شبکه به پشتیبان، یکی پس از دیگری، برای ارائه محتوای اصلی نیاز دارد.

با Cloud Firestore، یک برنامه چت ممکن است یک پرس و جو از مشتری برای بارگیری پیام ها در برنامه انجام دهد و سپس یک پرس و جوی بعدی برای هر پیام برای بارگیری کاربری که آن را نوشته است انجام دهد:



const querySnapshot = await getDocs(collection(db, "messages"));
const userSnapshots = await Promise.all(
querySnapshot.docs().map(async messageSnapshot => {
return await getDoc(docSnapshot.data().creator);
})
);

نکته کلیدی که در اینجا باید به آن توجه کرد این است این در سمت مشتری اتفاق می افتد. این کد در حال انجام پرس و جوهای سریالی برای بارگیری داده ها از طریق اتصال شبکه کند کاربر است. در یک برنامه پیچیده، در نهایت با سفرهای رفت و برگشت و تجربه بارگیری آهسته و چند مرحله ای مواجه خواهید شد.

حتی اگر داده‌های Cloud Firestore خود را با استفاده از مجموعه‌های فرعی (که نیاز به داده‌های شما سلسله مراتبی دارند) مدل‌سازی کنید، باز هم نمی‌توانید برای بارگیری یک سند و اسناد زیرمجموعه آن یک جستجوی عمیق انجام دهید.

در Convex شما کنترل کاملی بر روی داده‌هایی دارید که به مشتری ارسال می‌کنید، زیرا فقط نتیجه توابع JavaScript/TypeScript هستند. به راحتی می توان پیام ها را در یک برنامه چت به همراه نویسنده ای که هر کدام را نوشته است، دسته بندی کرد. آموزش کاربران و تأیید اعتبار ما دقیقاً این کار را انجام می دهد!



const messages = useQuery("listMessages");

در اینجا پیام ها و کاربران همه بر روی سرور داخل سرور بارگذاری می شوند
listMessages.js تابع query بنابراین فقط یک رفت و برگشت از مشتری وجود دارد.

در Cloud Firestore تنها گزینه برای جلوگیری از درخواست آبشار این است که داده های خود را در یک Cloud Function بارگیری کنید، اما این شامل قربانی کردن واکنش پذیری و به روز رسانی های خوش بینانه است.

کپسوله کردن منطق کسب و کاررا

یکی دیگر از ویژگی های مهم توابع Convex این است که می توانند به عنوان یک لایه منطق تجاری عمل کنند. در حالی که ارسال اسناد خام به مشتری می تواند راهی عالی برای شروع کار در یک برنامه باشد، با افزایش پیچیدگی برنامه شما می خواهید منطق را روی سرور قرار دهید. در اینجا چند مثال رایج از جایی که منطق سمت سرور ضروری است آورده شده است:

  • تلفن همراه، برنامه‌های وب و API عمومی شما باید منطق مشترکی مانند رندر کردن اعلان‌ها را در یک رشته قابل خواندن توسط انسان به اشتراک بگذارند.
  • برخی از جهش‌ها به اعتبارسنجی سفارشی نیاز دارند، مانند بررسی اینکه آیا آدرس ایمیل به درستی قالب‌بندی شده است.
  • شما می خواهید طرح پایگاه داده خود را برای پشتیبانی از پرس و جوهای پیچیده تر تغییر دهید، اما می خواهید همان API را به برنامه های خود ارائه دهید تا از انتقال کد برنامه نیز جلوگیری کنید.

توابع محدب به عنوان مکانی طبیعی برای قرار دادن همه این منطق عمل می کنند. به عنوان یک توسعه دهنده، می توانید منطق را بین تمام پلتفرم های خود به اشتراک بگذارید و اطمینان حاصل کنید که حتی کاربران مخرب نیز تنها از طریق این لایه با داده های شما تعامل دارند.

بار دیگر، با Cloud Firestore شما میتوانست این کد را در توابع ابری قرار دهید و از آنها به عنوان یک لایه منطق تجاری استفاده کنید، اما این کد بهم ریخته است و نیاز به کنار گذاشتن برخی از ویژگی های دیگر پلتفرم مانند واکنش پذیری و به روز رسانی های خوش بینانه دارد.

React Integrationرا

Convex برای استفاده با React طراحی شده است.

همه آموزش های ما برنامه های React هستند. React Hook های ما بارگذاری و ویرایش داده ها را در اجزای React ساده می کند.

Cloud Firestore با در نظر گرفتن React طراحی نشده است.

Cloud Firestore یک JavaScript SDK دارد، اما انتقال داده‌های شما به اجزای React را به توسعه‌دهنده واگذار می‌کند. به طور خاص، Cloud Firestore از گوش دادن به‌روزرسانی‌های بی‌درنگ با پشتیبانی می‌کند onSnapshot اما اتصال صحیح آن عکس‌های فوری به مؤلفه‌های React به اندازه‌ای پیچیده است که بسیاری از توسعه‌دهندگان از واکنش‌پذیری انتها به انتها منصرف می‌شوند.

فلسفه صحت انتها به انتهارا

محدب یک وسواس تقریباً متعصبانه نسبت به صحت دارد.

ما نه تنها می‌خواهیم که ساختن یک برنامه صحیح امکان‌پذیر باشد، بلکه می‌خواهیم ساختن صحیح برنامه شما غیرممکن باشد. توسعه دهندگان باید
در گودال موفقیت بیفتند.

صحت در API پشتیبان متوقف نمی شود. در Convex، ما معتقدیم که صحت باید تمام راه را به کاربران برنامه گسترش دهد. کاربران باید همیشه وضعیت ثابت و به‌روز را ببینند. وقتی کاربران حالت را تغییر می دهند، تغییرات آنها باید همیشه به صورت تراکنشی و دقیقاً یک بار اتفاق بیفتد.

در اینجا چند مکان وجود دارد که فلسفه ما در مورد درستی با Cloud Firestore متفاوت است:

واکنش پذیریرا

در ConvexReactClient، همه پرس و جوها کاملاً واکنشی هستند و به روز رسانی های بلادرنگ را دریافت می کنند.

در Cloud Firestore، شما می توان به‌روزرسانی‌های بیدرنگ را دریافت کنید، اما مدیریت آن کار اضافی است onUpdate callbacks (به ویژه در React) بنابراین توسعه دهندگان معمولاً انتخاب می کنند که آیا می خواهند داده های واکنشی یا غیر واکنشی را به صورت موردی بارگیری کنند. این منجر به برنامه‌هایی می‌شود که ترکیبی از داده‌های تازه و قدیمی را به کاربران نشان می‌دهند.

معاملاترا

در Convex، هر جهش یک تراکنش است که بر روی یک عکس فوری پایگاه داده ثابت اجرا می شود.

در Cloud Firestore، شما می توان تراکنش ها را اجرا می کنند اما الزامات پیچیده ای دارند. همه خواندن های یک تراکنش باید تمام نوشتن ها را ادامه دهند و همیشه باید به یاد داشته باشید که وضعیت برنامه را در تراکنش ویرایش نکنید. اغلب توسعه‌دهندگان در عوض استفاده از APIهای ساده‌تر را برای به‌روزرسانی اسناد انتخاب می‌کنند و زمانی که یک اقدام منطقی کاربر فقط تا حدی در پایگاه داده ذخیره می‌شود، شگفت‌زده می‌شوند.

دیدگاه های ثابترا

در محدب، تمام داده ها بارگیری می شوند useQuery از یک عکس فوری پایگاه داده سازگار هستند.

در Cloud Firestore، داده های روی کلاینت از پایگاه داده در مقاطع مختلف زمانی بارگذاری می شوند. حتی اگر به به‌روزرسانی‌های بیدرنگ گوش دهید، نتایج جستجوهای جداگانه همگام نمی‌مانند. این باعث ایجاد ناهنجاری های سازگاری و اشکال در برنامه شما می شود.

خط پایینرا

Convex به گونه ای طراحی شده است که هم شروع به کار در پلتفرم را آسان کند و هم در حین رشد برنامه از شما پشتیبانی کند.

ادغام React ما شروع به تعامل با وضعیت مشترک جهانی شما و بارگیری داده های کاملاً واکنشی را آسان می کند. همانطور که برنامه شما رشد می کند، از توانایی فشار دادن منطق به عملکردهای جستجو و جهش و سریع نگه داشتن برنامه خود با اجتناب از آبشارهای درخواست سریال قدردانی خواهید کرد.

در Cloud Firestore، برای ادغام با React و گوش دادن به به‌روزرسانی‌های بیدرنگ، باید حرکات آکروباتیک انجام دهید. در پایین جاده، برنامه خود را پر از تجربیات بارگیری آهسته از آبشارهای درخواستی و پایگاه داده خود پر از جهش های نیمه متعهد خواهید دید.

Convex طراحی شده است تا به شما کمک کند برنامه خود را با رشد آن تکامل دهید، نه اینکه شما را به پلتفرم دیگری سوق دهد. به زودی ما پشتیبانی برای اجرای طرحواره های پایگاه داده و اجرای انتقال پایگاه داده را اضافه خواهیم کرد تا بتوانید برنامه خود را به طور یکپارچه در Convex رشد دهید.

منتظر چی هستی؟ با Convex شروع کنید!

لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.