4 تکنیک بهینه سازی عملکرد برای برنامه های React
راههای زیادی برای بهینهسازی اپلیکیشن React وجود دارد. همه برای هر برنامه کار نمیکنند و هر کاری که انجام میدهید باعث افزایش عملکرد قابل توجهی نمیشود.
سفارش ساخت سایت در فریلنس پروژه
اخیراً وظیفهای به من محول شده است که میگوید: "بهبود عملکرد برنامه". این من هستم که آن سفر را مستند می کنم.
مرحله 1 - سناریوهایی را پیدا کنید که پس از آن عملکرد شروع به کاهش می کند
من خوش شانس بودم که از سناریویی مطلع شدم که عملکرد آنقدر کاهش می یابد که تجربه کاربر کاملاً غیرقابل تحمل است. برای پیدا کردن همه این سناریوها، باید به شدت به انجام اقدامات مختلف روی برنامه ادامه داد و زمانی که عملکرد شروع به تنزل کرد، نظارت داشت. هیچ راه ساده ای برای انجام این کار وجود ندارد، تنها روش این است که افراد بیشتر و بیشتری از برنامه استفاده کنند و تجربیات خود را گزارش کنند. راه دیگر نیز میتواند این باشد که دادههای ساختگی زیادی تولید کنید و سعی کنید همه آنها را روی رابط کاربری بارگذاری کنید و ببینید که چگونه کار میکند. همچنین، انتظار نداشته باشید که همه سناریوها را به یکباره کشف کنید، هر از گاهی آنها را کشف خواهید کرد و سپس می توانید مراحل زیر را برای بهبود عملکرد هر یک از آنها انجام دهید.
مرحله 2 - اشکال زدایی کنید و سعی کنید مقصر واقعی را پیدا کنید
انجام پروژه با متخصصان پروژه
گام بعدی این است که اشکال زدایی کنید و ببینید چه چیزی واقعاً باعث تمام تاخیر یا افت عملکرد شده است. برای این کار میتوانید از نمایهساز در ابزارهای توسعهدهنده استفاده کنید، همچنین راهی برای برجسته کردن تمام مؤلفههایی که در یک عمل خاص دوباره رندر میشوند وجود دارد. برای من، این دو بهترین کار را دارند زیرا به من کمک میکنند بفهمم چه چیزی دوباره رندر میشود و نمایهگر نیز دلیل آن را توضیح میدهد. نمایهساز همچنین به شما میگوید که کدام مؤلفهها چقدر زمان برای رندر گرفتن و تعداد چرخه برنامه شما برای رسیدن به حالت آماده نیاز دارد. علاوه بر این، اگر حلقههای تودرتو را ببینم و ببینم تکمیل آنها زمان زیادی میبرد، از متد console.time() از جاوا اسکریپت نیز استفاده میکنم. در سناریوی من، به من اطلاعات دقیقی داده شد مبنی بر اینکه زمینههای React که استفاده کردهایم باعث مشکلات اصلی میشوند.
طراحی لوگو حرفه ای با بهترین طراحان لوگو
برای خواندن همه چیز در مورد React Profiler اینجا را کلیک کنید.
مرحله 3 - استفاده از تکنیک های زیر برای بهبود عملکرد
من در این بخش لیستی از کارهایی که انجام دادم و به من کمک کرد عملکرد برنامه ام را بهبود بخشد را فهرست می کنم.
متغیرهایی را از حالت حذف کرد که واقعاً نیازی به رندر مجدد مؤلفه نداشتند:
ما دو زمینه و در همه حدود 10-15 متغیر حالت در آنجا داشتیم. مشکل این بود که هر بار که متن به دلیل setState دوباره رندر میشد، پیش میرفت و باعث میشد همه کودکانی که از متن استفاده میشد دوباره رندر شوند. همه متغیرهای حالت را که دلیلی برای ادامه دادن و رندر مجدد مؤلفه نداشتند، حذف کردم، همچنین همه متغیرهایی را که به عنوان مقادیر به ارائهدهنده زمینه ارسال میشد و میتوانستند مشتق شوند یا در هیچ کجای برنامه استفاده نمیشدند، حذف کردم. این یادگیری مهم بود، ما تمایل داریم همه چیز را در چارچوب قرار دهیم، در حالی که شما فقط باید آنچه را که واقعاً نیاز دارید اضافه کنید.
از Context در مکان های مناسب استفاده کرد:
من دیدم که در چند مؤلفه ما متن را فراخوانی میکردیم، اما واقعاً از هیچ یک از ویژگیهای متن در آنجا استفاده نمیکردیم. بلکه ما آن را به عنوان پشتوانه به اجزای کودک منتقل می کردیم. این باعث رندرهای زیادی شد زیرا رندر مجدد در زمینه باعث می شود مولفه A دوباره رندر شود، که باعث می شود مولفه های B، C و D همه فرزندانشان دوباره رندر شوند. متن فقط در جزء D مورد نیاز بود، بنابراین من مستقیماً متن را به مؤلفه فرزند منتقل کردم. این کار را برای هر مکانی که دیدم یک متغیر زمینه به عنوان پایه به مولفه فرزند ارسال میشود، انجام دادم.
اضافه شدن چک های خالی و خالی:
من دیدهام که ما یک مؤلفه فرزند را ارائه میکنیم که به برخی دادهها از والد نیاز دارد و در داخل فرزند، مؤلفه بررسیهایی را برای وجود دادهها اضافه میکند. هیچ مشکلی در این رویکرد وجود ندارد، اما اگر مؤلفه فرزند بهعنوان چند useEffects یا در حال فراخوانی APIهای دیگر باشد، منطقی است که بررسی خالی/تهی بودن داده را به والدین منتقل کنید. شما اصلاً نیازی به رندر کردن مؤلفه فرزند در DOM ندارید زیرا ارزشی ندارد. با این کار تمام عملکردهایی که ممکن است برنامه برای رندر کردن کودک و فراخوانی همه هوکها و APIهای داخل آن گرفته باشد ذخیره میکند.
انجام پروژه متلب با بهترین برنامه نویسان
بازسازی مجدد کد:
یک مرحله کلی که من انجام دادم، تلاش برای درک کد نوشته شده بود، به خصوص در جایی که داده ها دستکاری شده بودند، یا به یک آرایه اضافه می شدند، یا از حلقه های تودرتو استفاده کرده بودیم، و غیره. آرایه وابستگی که در آن هیچ ارزشی اضافه نمیکردند، و در آخر نیز بررسیهایی را که روی دادههایی که چندان منطقی نبودند حذف کردند. این مرحله میتواند برای برنامههای مختلف متفاوت باشد و باید با دقت انجام شود، زیرا نمیخواهید آنچه را که قبلاً کار میکند، خراب کنید. بنابراین در حالت ایدهآل سعی کنید تا آنجا که میتوانید عمیق شیرجه بزنید تا ابتدا منطق را درک کنید و سپس اگر احساس اطمینان کردید، ادامه دهید و آن را اصلاح کنید.
با روش های بالا، من توانستم حدود 25 تا 30 رندر مجدد را برای برنامه خود کاهش دهم. بارگذاری صفحه اولیه را چند ثانیه بهبود می بخشد و همچنین زمان پاسخگویی را یک یا دو ثانیه بهبود می بخشد، در سناریوهایی که عملکرد به اندازه کافی طول می کشد.
ضربه بزرگ این یک سفر است و من هنوز برای بهتر کردن آن کار می کنم :D
در نهایت، راههای زیادی برای بهینهسازی اپلیکیشن React وجود دارد. همه برای هر برنامه کار نمیکنند و هر کاری که انجام میدهید باعث افزایش عملکرد قابل توجهی نمیشود. گاهی اوقات مشکلات واضح هستند و حل آنها باعث می شود برنامه عملکرد بالایی داشته باشد، در سناریوهای دیگر مشکلات پیچیده هستند و اضافه کردن هر گونه بهبودی در عملکرد دشوار است. اما در مجموع، بهینه سازی کد شما یک سفر سرگرم کننده است، شما می توانید چیزهای زیادی یاد بگیرید و بیشتر اوقات، ترفندی را یاد می گیرید که احساس می کنید چرا من قبلاً این را نمی دانستم؟
اغلب وقت خود را صرف بازسازی کد خود می کنید و اغلب وقت خود را صرف ارزیابی عملکرد می کنید، زیرا اگر این کار را نکنید، ناگهان ممکن است خیلی دیر شود.
از اینکه وقت خود را برای خواندن این مطلب اختصاص دادید متشکرم، و اگر می خواهید در مورد چیزی زیر آسمان صحبت کنید یا پیشنهاداتی در مورد مقاله من دارید، در زیر نظر خود را بنویسید. همچنین می توانید از طریق تلگرام، لینکدین یا اینستاگرام با من در ارتباط باشید.
مجری ذیصلاح لیست مجریان نظام مهندسی اراک مجری
در نهایت، اگر می خواهید من به نوشتن ادامه دهم و می خواهید از من حمایت کنید، می توانید از اینجا برای من یک قهوه بخرید. از باویا حمایت کنید
برنامه های کاربردی اینترنت غنی در دسترس
مقدمه - ARIA چیست؟
آریا
به طور کلی، ARIA مجموعه ای از ویژگی ها است که وب سایت شما را به ویژه برای افراد دارای معلولیت در دسترس تر می کند.
سفارش ساخت سایت با بهترین متخصصان
قبل از ورود به موضوع اصلی خود،
یک سوال از همه شما
آیا می توانید تفاوت بین این دو عنصر HTML را پیدا کنید؟
توجه: لازم نیست نگران جستجو باشید، هر دو یکسان به نظر می رسند
بهعنوان توسعهدهنده، میتوانیم به راحتی بفهمیم که عنصر 2 مناسبتر از اولی است.
اما برای کاربران، چگونه تحویل داده می شود؟
به خصوص برای افرادی که از نظر بصری دچار مشکل هستند و اغلب به صفحه خوان ها وابسته هستند.
برای بررسی اینکه می توانیم به هر یک از صفحه خوان ها گوش دهیم و عناصر بالا را اجرا کنیم. من از ChromeVox برای گوش دادن به وب سایتم استفاده کردم.
انجام پروژه با پروژه دان ها
عنصر 1
متأسفانه نتوانستم صوت
زمان استفاده از «useImperativeHandle» و «forwardRefs» در React 18
گاهی اوقات باید ایده های بزرگ را بیرون بیاورید
این مقاله در ادامه ref ها چیست و چگونه کار می کنند. با دانش بهدستآمده از مقاله قبلی، بیایید به درک کمی پیچیدهتر بپردازیم، که میتواند در پروژههای دنیای واقعی با تعداد زیادی تودرتوی اجزا و کمی نیازهای واقعی مبتنی بر DOM مفید باشد.
Ref Forward
انجام پروژه در فریلنس پروژه
راه حل بدون مشکل چیست، درست است؟ بنابراین، بیایید وضعیتی را تعریف کنیم که داوران معمولی نتوانند کار را انجام دهند. اگر یک مؤلفه والد داشته باشیم که بخواهد به یکی از عناصر تعریف شده در مؤلفه فرزند ارجاع دهد و حالت فوکوس را تغییر دهد، چه؟ بیایید چنین مثالی ایجاد کنیم.
مؤلفه والد فوکوس دکمه تعریف شده در مؤلفه فرزند را کنترل می کند.
همانطور که در بالا می بینید، مؤلفه والد تمرکز روی دکمه مؤلفه فرزند را کنترل می کند. این به این سادگی نیست که رف تعریف شده در والدین را به عنوان یک تکیه گاه به کودک منتقل کنید. در مورد ما، ref یک ویژگی خاص است که روی عنصر دقیق HTML تعریف شده است که تمرکز آن باید تغییر کند، نه بسته بندی مولفه فرزند، زیرا فقط یک تابع است.
ما میتوانیم با قرار دادن مولفه فرزند خود در یک تابع forwardRef که توسط React ارائه شده است، به رفتار دلخواه برسیم. این تابع باید پروپوزالهای ارسالی را منتقل کند و اجازه میدهد یک پایه اضافی روی کامپوننت، که «رجف» ما باشد. این کد است:
چگونه از forwardRef در React استفاده کنیم؟
استفاده از ImperativeHandle
خب، ظاهراً آنچه در بخش قبل به دست آوردیم حتی برای موقعیت های پیچیده نیز کافی است. با این حال، گاهی اوقات ممکن است وسوسه شوید که یک عملکرد ref سفارشی را در داخل کامپوننت خود تعریف کنید، که در معرض اجزای با استفاده از آن قرار می گیرد. بیایید سعی کنیم شرایطی ایجاد کنیم که به چنین کنترل دقیقی نیاز داشته باشیم.
سفارش ساخت سایت با بهترین متخصصان
بهطور پیشفرض، رنگ فوکوس روی ورودی آبی است، اما بیایید بگوییم اگر قرار است نینجا ما مأموریت سطح جونین فوقبحرانی را دریافت کند، فیلد ورودی باید به جای آن روی قرمز تمرکز کند.
مؤلفه والد می تواند کنترل کند که ورودی کودک روی کدام رنگ تمرکز می کند.
برای نشان دادن استفاده از useImperativeHandle در این مورد، اجازه دهید از عقل سلیم منحرف شویم و دو روش سفارشی مرتبط با مؤلفه ورودی را از طریق ref بسازیم. به جای روش فوکوس پیشفرض، این بار، دو روش سفارشی ()focusRed و focusBlue() خواهیم داشت.
ما همچنان باید از ForwardRef استفاده کنیم تا ref را به مؤلفه فرزند منتقل کنیم، اما در داخل مؤلفه فرزند، این توابع جدید را با کمک قلاب useImperativeHandle ایجاد خواهیم کرد. در اینجا کد به نظر می رسد:
ما با استفاده از useImperativeHandle متدهای سفارشی را به ref اضافه می کنیم.
انجام پروژه متلب با بهترین برنامه نویسان و متخصصان
نکته مهمی که باید به آن توجه کنید این است که در کد بالا روشهای موجود را بهطور پیشفرض مانند مورد قبلی گسترش نمیدهیم، بلکه مجموعهای کاملاً جدید از روشها را ایجاد میکنیم. بنابراین، متد ()focus پیش فرض دیگر در دسترس ما نیست و فراخوانی آن خطاهای شیرینی را برای ما به همراه خواهد داشت.
روش فوکوس هنگام استفاده از دسته امری در دسترس نیست.
نتیجه
به طور خلاصه، آنچه را در مقاله قبلی گفتم تکرار می کنم: خود Refs به DOM نباید هنگام انجام توسعه مبتنی بر dom مجازی استفاده شود زیرا تغییراتی که در DOM واقعی ایجاد می کنید به درستی به vDOM منتقل نمی شود. راه اندازی، و این منجر به واکنش غیرمنتظره می شود.
طراحی لوگو با بهترین طراحان لوگو
من تمرکز را به عنوان موضوع اصلی این مقاله انتخاب کردم، فقط به این دلیل که یکی از نیازهای اصلی زمانی است که داوران باید احضار شوند. React به مجموعه محدودی از موارد استفاده برای ref ها اشاره می کند
5 vs کد افزودنی برای بهره وری
توسعه را با پسوندهای کد VS عالی تقویت کنید
شماره 1 ESLint
آیا به دلیل نداشتن استاندارد کدنویسی با سبک های مختلف کدها در یک مخزن مواجه هستید؟ به این معنی است که شما به یک لنگر نیاز دارید. ESLint توسط مایکروسافت می تواند به شما در دستیابی به آن به عنوان یک لنگر کمک کند، می توانید شروع به استانداردسازی مخزن با پیکربندی غنی برای جاوا اسکریپت و تایپ اسکریپت از این افزونه کنید که کد را زیباتر و خواناتر می کند.
انجام پروژه در فریلنس پروژه
ESLint
#2 شوخی
بدون آزمایش، نمی توانید مطمئن باشید که کد شما مانند آنچه می خواهید مورد نیاز است یا خیر. اگر احساس می کنید آنچه من می گویم به این معنی است که به این افزونه قدرتمند به نام Jest نیاز دارید، کارهای زیادی وجود دارد که می توانید با آن انجام دهید. شروع به آزمایش کنید که آیا منطق شما درست است و بلوک کد شما مورد نیاز است و چه تعداد از قبل پوشش داده شده است. برنامه افزودنی Jest را می توان به صورت خودکار تنظیم کرد که هر بار که پایه کد را در تست خود ذخیره می کنید.
شوخی
شماره 3 Git Blame
فقط در صورتی که کسی کدی را با پیچیدگی بالا بنویسد و نیاز به اصلاح مجدد آن داشته باشد، این پسوند وجود دارد تا به شما کمک کند تا نویسنده را پیدا کنید تا در مورد منطق صحبت کند قبل از اینکه دوباره آن را اصلاح کنید. مزیت این افزونه این است که میتوانید آخرین تغییر کد را پیدا کنید و در صورت عدم وجود مستندات یا درک درست از منطق کمک بخواهید. مزیت دیگر این است که در صورت دریافت می توانید درخواست حل تعارض کنید.
Git Blame
شماره 4 Thunder Client
سفارش ساخت سایت در فریلنس پروژه
Postman ممکن است مشتری API باشد که شما در حال حاضر برای آزمایش پاسخ API، اسناد و سایر تعاملات مرتبط استفاده می کنید. یک جایگزین دیگر باید سعی کنید در حال حاضر از Thnder Client استفاده کنید. دیگر نیازی به استفاده از برنامه های شخص ثالث نیست، تنها کاری که می توانید با این افزونه VS Code انجام دهید شبیه سازی تماس های API، مجموعه ای از API، یک متغیر محیطی و همچنین شبیه سازی جریان یکپارچه سازی است.
مشتری تندر
شماره 5 SonarLint
برنامه افزودنی ارائه شده توسط SonarSource می تواند تکرار کد، بوی کد و آسیب پذیری های امنیتی را به عنوان کد شما ردیابی کند. برای حل آن موارد برجسته و توصیه هایی ارائه خواهد شد، نه تنها اینکه می توانید SonarLint را با اتصال پوشه فضای کاری VSCode خود به پروژه(های SonarQube/SonarCloud) به SonarQube/SonarCloud متصل کنید و از همان قوانین و تنظیماتی که استفاده می شود بهره مند شوید. برای بررسی پروژه خود در سرور سپس SonarLint در VSCode، مسائل Won’t Fix و False Positive را در هر فایلی از پوشه محدود پنهان می کند.
SonarLint
سرانجام
انجام پروژه متلب با بهترین برنامه نویسان
آن افزونه هایی که من توصیه می کنم برای استفاده روزانه ضروری هستند. بدون برنامههای افزودنی، شاید هنوز بتوانید مولد باشید، اما آنها میتوانند به راحتی به شما کمک کنند تا استانداردی را تنظیم کنید، مطمئن شوید که هیچ تغییر منطقی پس از بازآفرینی، حل یک تضاد، API مستند در یک فضای کاری، و حفظ کدها آسان است.
معرفی: بسته نرم افزاری برای مطالعه دینامیک اتلاف سخت افزار کوانتومی
نوشته شده
توسط هاگای لاندا
شبیه سازی سیستم های کوانتومی بزرگ برای کامپیوترهای کلاسیک دشوار است - به همین دلیل است که مردم در وهله اول کامپیوترهای کوانتومی می سازند. با این حال، شبیهسازی کلاسیک دینامیک کوانتومی، نه تنها برای محک زدن، بلکه برای پیشبینی رفتارهای بالقوه سختافزار کوانتومی، هنوز حیاتی است. به عبارت دیگر، مهم است که بتوانیم سیستم های کوانتومی را با استفاده از کامپیوترهای کلاسیک و کوانتومی شبیه سازی کنیم.
سفارش ساخت سایت در فریلنس پروژه
شبیهسازی سیستمهای کوانتومی در رایانههای کلاسیک بیشتر متکی به روشهای عددی است، از جمله راهحلهای دقیق در موارد نادری که در دسترس هستند، روشهای brute-force، و تقریبهای مختلف. مقدار فضای محاسباتی کلاسیک مورد نیاز برای روشهای brute-force به صورت نمایی با تعداد کیوبیتها مقیاس میشود. برای مقابله با این افزایش تصاعدی، میتوانیم از تقریبها برای فشردهسازی اطلاعات لازم برای نمایش سیستمهای کوانتومی استفاده کنیم - تا حدودی شبیه به نحوه فشردهسازی تصاویر و فیلمها در رایانهمان. یک رویکرد بسیار قدرتمند از ابزارهای جبر خطی مانند تانسورها و ماتریس ها برای انجام این فشرده سازی تقریبی استفاده می کند.
در مقاله اخیر (در دسترس به عنوان پیش چاپ)، ما یک حل کننده را معرفی کردیم که قادر به شبیه سازی دینامیک زمان پیوسته سیستم های کوانتومی پر سر و صدا است. در حالی که ما وضعیت یک سیستم کوانتومی کاملاً ایزوله را با استفاده از تابع موج چند کیوبیتی توصیف میکنیم، سیستمهای کوانتومی پر سر و صدا را با استفاده از ماتریس چگالی توصیف میکنیم و معادلهای که معمولاً برای حل تکامل ماتریس چگالی استفاده میشود معادله اصلی لیندبلاد نامیده میشود. نرمافزار ما، حلکننده این معادله، به کاربران امکان میدهد دینامیک کیوبیتها و نحوه تعامل و ناهماهنگی آنها در حضور نویز را شبیهسازی کنند. با استفاده از این حل کننده، ما قادر به مطالعه رفتار تحریکات منتشر شده از طریق سیستم هایی با کیوبیت های زیاد، مشابه دستگاه های کوانتومی موجود بودیم. ما یک پردازنده کوانتومی خاص را با جزئیات شبیه سازی نکردیم. این بیشتر اولین گام در آن جهت است که قبلاً برخی از اثرات جالب را نشان داده است.
پس فشرده سازی حافظه حالت های کوانتومی چگونه کار می کند؟ الگوریتمهای تثبیتشدهای که به عنوان حالتهای محصول ماتریسی (MPS) شناخته میشوند، حالت چند کیوبیتی کامل را با آرایهای از ماتریسهایی با ابعاد بسیار پایینتر جایگزین میکنند. عملگرهای محصول ماتریسی (MPO) تعمیم MPS برای نمایش عملگرهای کوانتومی، از جمله ماتریس های چگالی است. ما با کمک بسته منبع باز ITensor از این نمایش ها در کد خود استفاده می کنیم. ساختار MPS بهویژه برای توصیف سیستمی از کیوبیتها که در یک زنجیره تکبعدی چیده شدهاند و حالتهایی که در آن کیوبیتهای دور از یکدیگر به شدت همبسته یا درهمتنیده نیستند، مناسب است. با این وجود، حلکننده ما، به نام lindbladmpo، از هرگونه اتصال کیوبیتها پشتیبانی میکند و ما از آن برای شبیهسازی زنجیرههای کیوبیتها و همچنین پیکربندیهایی که از نظر محاسباتی بسیار گرانتر هستند، استفاده کردهایم.
انجام پروژه با بهترین متخصصان
به طور خلاصه، lindbladmpo به کاربران اجازه میدهد تا دینامیک کیوبیتهای دو سطحی را در یک قاب چرخشی یکنواخت (یعنی با ضرایب مستقل از زمان در معادله اصلی) شبیهسازی کنند. پارامترهای همیلتونی تک کیوبیتی عمومی، همراه با برهمکنشهای دو کیوبیتی از نوع «فلیپ فلاپ» یا تبادل (XY) و شکل جفتکننده Ising (ZZ) با اتصال دلخواه، و سه عملگر پرش اتلافی، آنهایی که انرژی را توصیف میکنند، پشتیبانی میشوند. تبادل با حمام حرارتی و جداسازی. بسته حل شامل یک هسته ++C با کارایی بالا و یک رابط Python غنی از ویژگی ها است.
با استفاده از این حلکننده، کیوبیتهایی را با فعل و انفعالات XY مورد مطالعه قرار دادیم که در آن یک کیوبیت لبه به طور مداوم بر روی تشدید هدایت میشود. چنین حرکت رزونانسی کیوبیتهای منفرد، نیروی کار اساسی پردازش اطلاعات کوانتومی در دستگاههای چند کیوبیتی است که برای تحقق چرخشهای تک کیوبیتی و همچنین ایجاد درهمتنیدگی در برخی تنظیمات به کار میرود. دینامیک گیت اغلب با تمرکز بر روی سیستمهایی با کیوبیتهای بسیار کم مطالعه میشود، با این حال، تمرکز کار فعلی بر روی همبستگیهای چند بدنه و غیرمحلی ناشی از درایو پیوسته است. ما یک پیکربندی پلاک را مطالعه میکنیم - یعنی در اصل، حلقهای از کیوبیتها با دو کیوبیت لبه اضافی - که در آن فرکانسهای کیوبیتهای همسایه متناوب میشوند به طوری که آنها به طور رزونانسی در تعامل نیستند. این راهاندازی با انگیزه دستگاههای کوانتومی IBM مستقر در حال حاضر است که از طریق ابر با استفاده از Qiskit قابل دسترسی هستند. در این دستگاهها، اتصال کیوبیت شبکهای «هگزاگونال سنگین» است که از پلاکهای کیوبیت متصل تشکیل شده است و کیوبیتهای فرکانس ثابت به منظور کاهش فعل و انفعالات ناخواسته، فرکانسهای متفاوتی برای دستگاههای همسایه دارند (شکل را ببینید). . 1).
شکل 1. تنظیمات اصلی که ما در کار فعلی خود مطالعه کردیم در سمت چپ نشان داده شده است و شامل یک پلاک با کیوبیت های تک لبه است، جایی که کیوبیت های همسایه از نظر فرکانس متناوب هستند همانطور که به صورت شماتیک با رنگشان نشان داده شده است (کیوبیت های آبی فرکانس صفر دارند، در حالی که قرمزها فرکانس دارند. ارزش بالاتری دارند). بن ds نشان میدهد که کیوبیتها با نزدیکترین همسایههای خود با یک عبارت تعاملی «فلیپ فلاپ» (XY) در تعامل هستند. کیوبیت 0 به صورت دوره ای هدایت می شود. در سمت راست نقشه اتصال یکی از دستگاههای فالکون ۲۷ کیوبیتی IBM Quantum است که کیوبیتها در پیکربندی به نام شبکه ششضلعی سنگین چیده شدهاند. کد رنگ فرکانس های کیوبیت را نشان می دهد که می تواند ناهمگن یا نامنظم در نظر گرفته شود.
طراحی لوگو حرفه ای با بهترین طراحان لوگو
نتیجه اصلی ما این است که حتی با کیوبیتهای خارج از تشدید که به نظر میرسد برهمکنش ضعیفی دارند، همبستگیهای بزرگ دو کیوبیتی میتواند بین کیوبیتهای دور ایجاد شود. علاوه بر این، مواردی را مییابیم که در آن برخی از توابع همبستگی با فاصله در سیستم افزایش مییابند و در کیوبیت رانده شده و دورترین فاصله از آن را مشاهده میکنیم (شکل 2 را ببینید). کیوبیتهای دور از یک کیوبیت رانده معمولاً فرض میشود که با آن ارتباطی ندارند و از این رو مکانیسمهایی که منجر به همبستگیهای غیرمحلی میشوند، مهم هستند که شناسایی شوند. همبستگیهای غیرمحلی کنترلنشده کیوبیتها در دستگاههای بزرگ میتواند برای استفاده از آنها برای کارهای محاسباتی مضر باشد و شبیهسازی و کاوش تئوری مهم است. یا به طور خلاصه، اگر ما کاری را به یک کیوبیت در یک طرف دستگاه انجام دهیم، نمی خواهیم رفتار یک کیوبیت در طرف دیگر دستگاه را تغییر دهیم.
شکل 2. تابع همبستگی دو کیوبیتی XY همه جفت های کیوبیت در یکی از تنظیمات شبیه سازی شده در کار ما (همانطور که در شکل 1 نشان داده شده است). این تابع همبستگی نشان می دهد که هر جفت چقدر از نظر آماری همبستگی دارد - برای مثال، تابع همبستگی برای هر حالت محصول کیوبیت ها صفر خواهد بود. به طور معمول، توابع همبستگی به عنوان تابعی از فاصله بین دو کیوبیت اندازه گیری شده کاهش می یابند، در حالی که در اینجا بلافاصله مشخص می شود که کیوبیت رانده شده (کیوبیت 0) با کیوبیت هایی که با آنها تشدید می شود همبستگی نسبتاً قوی پیدا می کند (به رنگ آبی در شکل 1 رنگ شده است). ) به گونه ای که تابع همبستگی حداکثر قدر را در کیوبیت لبه دورتر از آن به دست می آورد.
تحقیق در مقاله ما همچنین استفاده از حل کننده را در مطالعه یک مسئله دینامیکی با سیستم های بزرگ و تجزیه و تحلیل یک وابستگی پیچیده به پارامترهای متعدد نشان می دهد. ما جنبههای مهم را هنگام انجام چنین تحلیل سیستماتیکی مورد بحث قرار میدهیم، که بخشی از آن مبتنی بر مقایسه نتایج ما برای سیستمهای کوچک (در اینجا با حداکثر ده کیوبیت) با شبیهسازیهای اساساً دقیق با استفاده از بسته qiskit-dynamics پایتون است. حلکننده ما با مستندات جامع و برخی آموزشها همراه است و کد منبع مورد استفاده برای تولید تحقیق مورد بحث در اینجا به عنوان نمونه در مخزن حلکننده موجود است. این کد منبع می تواند به عنوان نقطه شروع برای یک پروژه تحقیقاتی که صدها شبیه سازی را با استفاده از یک دیتافریم محلی در انجام پروژه پایتون مدیریت می کند، استفاده شود.
مطالعه ما را می توان به عنوان اولین گام به سمت شبیه سازی دینامیک با اتصال واقعی دستگاه و پارامترهای کیوبیت در نظر گرفت. به منظور گسترش قابلیت حلکننده برای شبیهسازی دستگاههای کوانتومی، میتوانیم در آینده پشتیبانی از دینامیک کیوبیت سطح d را اضافه کنیم (کیوبیتهایی که میتوانند به حالتهای فراتر از 0 و 1 دسترسی داشته باشند، برای مثال برای کیوبیتهای ترانسمون مناسب هستند)، با همیلتونی و کلیتر پارامترهای لیندبلادین و وابستگی به زمان در پارامترها اجازه می دهد تا به طور مستقیم پروتکل های رانندگی پیچیده تر را ادغام کنید. و از آنجایی که این یک بسته منبع باز است، ما شما را تشویق می کنیم که lindbladmpo را نیز امتحان کنید و در آن مشارکت کنید. این یک سوال باز باقی می ماند که ببینیم چه اثرات جدید چند جسمی را می توان در آزمایشات با سخت افزار کوانتومی واقعی شبیه سازی کرد و احتمالاً مشاهده کرد. به طور خاص، همبستگیهای غیرمحلی که در نتیجه رانندگی کیوبیت شکل میگیرند، مانند آنچه در نتایج ما ارائه شدهاند، میتوانند هنگام در نظر گرفتن کدهای تصحیح خطای کوانتومی در دستگاههای چند کیوبیتی از اهمیت اساسی برخوردار باشند.
انجام پروژه متلب با بزرگان علم متلب