بعد از خرید گیتهاب و ارائه مرورگر Edge بر پایه کرومیوم توسط مایکروسافت به نظر شما کدام مورد می تواند حرکت بعدی این شرکت باشد؟
Anonymous Poll
28%
رایگان و متن باز شدن ویندوز
28%
خرید stackOverflow
12%
خرید Unity
32%
خرید Docker
نظر سنجی Stackoverflow 2020
معروفترین فریم ورک وب ASP NET است.
طبق نظر سنجی 2020 سایت Stackoverflow در حال حاضر ASP NET و بعد از آن ASP NET Core معروف ترین (Most Popular ) فریم ورک وب است.
هر چند در این لیست jQuery و React در ردیف های بالاتر قرار گرفته اند اما این فریم ورکها در سمت فرانت اند استفاده میشوند.
تکنولوژی دات نت در Back-end با اختلاف زیادی معروف ترین ابزار مورد استفاده دولوپر های حرفه ای است که در نظر سنجی سایت Stackover flow شرکت کرده اند.
معروفترین فریم ورک وب ASP NET است.
طبق نظر سنجی 2020 سایت Stackoverflow در حال حاضر ASP NET و بعد از آن ASP NET Core معروف ترین (Most Popular ) فریم ورک وب است.
هر چند در این لیست jQuery و React در ردیف های بالاتر قرار گرفته اند اما این فریم ورکها در سمت فرانت اند استفاده میشوند.
تکنولوژی دات نت در Back-end با اختلاف زیادی معروف ترین ابزار مورد استفاده دولوپر های حرفه ای است که در نظر سنجی سایت Stackover flow شرکت کرده اند.
محبوب ترین زبانهای برنامه نویسی
برنامه نویس ها ممکن است برای کار روزانه مجبور باشند از یک زبان یا تکنولوژی خاص استفاده کنند اما شبها وقت خود را با زبانی دوست دارند سرگرم می کنند.
در نظر سنجی 2020 سایت Stackoverflow همچنان Rust محبوب ترین زبان برنامه نویسی است که البته دلایل روشنی ندارد.
سال گذشته جایگاه دوم در اختیار پایتون بود که امسال یک پله سقوط کرده است و TypeScript جای آن را گرفته است.
نکته ی جالب TypeScript است که محصولی از مایکروسافت است و برای حل مشکلات استفاده از جاوا اسکریپت ابداع شده است. این زبان به مدیریت Anders Hejlsberg توسعه داده میشود که طراحی زبانهایی مانند Delphi و #C را در کارنامه خود دارد.
در حالی که سی شارپ با دو پله سعود به رده 8م لیست رسیده است جاوا نسبت به سال قبل تغییری نکرده و به نظر میرسد محبوبیت رو به رشدی نداشته باشد.
تاکید گوگل بر جایگزین کردن Kotlin بجای جاوا در توسعه اپ های اندروید می تواند یکی از عوامل کاهش رشد جاوا باشد. همچنین استفاده از جاوا دیگر رایگان نیست و شرکتها جهت استفاده از JDK باید لایسنس خریداری کنند.
برنامه نویس ها ممکن است برای کار روزانه مجبور باشند از یک زبان یا تکنولوژی خاص استفاده کنند اما شبها وقت خود را با زبانی دوست دارند سرگرم می کنند.
در نظر سنجی 2020 سایت Stackoverflow همچنان Rust محبوب ترین زبان برنامه نویسی است که البته دلایل روشنی ندارد.
سال گذشته جایگاه دوم در اختیار پایتون بود که امسال یک پله سقوط کرده است و TypeScript جای آن را گرفته است.
نکته ی جالب TypeScript است که محصولی از مایکروسافت است و برای حل مشکلات استفاده از جاوا اسکریپت ابداع شده است. این زبان به مدیریت Anders Hejlsberg توسعه داده میشود که طراحی زبانهایی مانند Delphi و #C را در کارنامه خود دارد.
در حالی که سی شارپ با دو پله سعود به رده 8م لیست رسیده است جاوا نسبت به سال قبل تغییری نکرده و به نظر میرسد محبوبیت رو به رشدی نداشته باشد.
تاکید گوگل بر جایگزین کردن Kotlin بجای جاوا در توسعه اپ های اندروید می تواند یکی از عوامل کاهش رشد جاوا باشد. همچنین استفاده از جاوا دیگر رایگان نیست و شرکتها جهت استفاده از JDK باید لایسنس خریداری کنند.
از هر چه بگذریم سخن دوست خوشتر است.
طبق آمار Stack overflow برنامه نویسان Perl در بازار جهانی بیشترین درآمد را دارند. این زبان در بسیاری از سیستمها قدیمی مانند بانکها استفاده شده است که حفظ و نگه داری آن اهمیت بالایی دارد.
آشنایی با زبانهای فانکشنال میتواند سطح دستمزد شما را تا حد زیادی بالا ببرد. زبانهایی مثل Scala و Haskell در بالای لیست قرار دارند.
همچنین توسعه دهندگان Golang و Rust در آمد بالایی دارند. این زبانها بیشتر در معماری میکروسرویس یا برنامه نویسی سیستم استفاده میشوند که نیاز به توسعه دهندگان ارشد دارد.
در بازار جهانی آشنایی با PHP و Java نمی تواند درآمد بالایی را برای شما تضمین کند. این آمار البته در ایالات متحده فرق می کند.
طبق آمار Stack overflow برنامه نویسان Perl در بازار جهانی بیشترین درآمد را دارند. این زبان در بسیاری از سیستمها قدیمی مانند بانکها استفاده شده است که حفظ و نگه داری آن اهمیت بالایی دارد.
آشنایی با زبانهای فانکشنال میتواند سطح دستمزد شما را تا حد زیادی بالا ببرد. زبانهایی مثل Scala و Haskell در بالای لیست قرار دارند.
همچنین توسعه دهندگان Golang و Rust در آمد بالایی دارند. این زبانها بیشتر در معماری میکروسرویس یا برنامه نویسی سیستم استفاده میشوند که نیاز به توسعه دهندگان ارشد دارد.
در بازار جهانی آشنایی با PHP و Java نمی تواند درآمد بالایی را برای شما تضمین کند. این آمار البته در ایالات متحده فرق می کند.
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
✅ بلاخره پس از مدت ها انتظار، Round 19 سایت Techempower منتشر شد
🥇در این بنچمارک ASP.NET Core جایگاه اول و سریع ترین فریم ورک وب را در خصوص تست Plain Text کسب کرد. 🎉⚡️🔥
تست Plain Text صرفا یک پاسخ Hello World را در ازای درخواست بر میگرونه و عملا خیلی قابل استناد نیست چون بدیهیه که یه پروژه واقعی، فقط Hello World چاپ نمیکنه!
ولی همین نتیجه هم قدرت ASP.NET Core رو نسبت به سایر رقبا به رخ میکشه😎✌️
https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext
__________________
@DotNetZoom
🥇در این بنچمارک ASP.NET Core جایگاه اول و سریع ترین فریم ورک وب را در خصوص تست Plain Text کسب کرد. 🎉⚡️🔥
تست Plain Text صرفا یک پاسخ Hello World را در ازای درخواست بر میگرونه و عملا خیلی قابل استناد نیست چون بدیهیه که یه پروژه واقعی، فقط Hello World چاپ نمیکنه!
ولی همین نتیجه هم قدرت ASP.NET Core رو نسبت به سایر رقبا به رخ میکشه😎✌️
https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext
__________________
@DotNetZoom
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
✅ فریمورک ASP.NET Core در جایگاه 6مین سریعترین فریمورک وب دنیا !
🔸سایت TechEmpower چندین بنچمارک داره که از لحاظ مختلف (از جمله سرعت سریالایز کردن، اپدیت کردن دیتا و واکشی اطلاعات از دیتابیس و...) فریمورک های مختلف رو مقایسه میکنه ولی هیچ کدومشون خیلی قابل استناد نبودند چون یه پروژه واقعی صرفا یکی از این حالات رو انجام نمیده، بلکه شامل برآیندی از همه این موارد هست.
🔹حالا به تازگی سایت TechEmpower این مشکل رو حل کرده و یه بخشی رو به نام Composite score اضافه کرده که عملا شامل وزن گیری و بررسی همه این بنچمارک ها هست.
این وزن گیری بر اساس ضریب اهمیت هر یک از این موارد مشخص میشه، یعنی مثلا تست Multiple queries که سرعت واکشی چندین کوئری به دیتابیس رو بررسی میکنه، به مراتب ضریب بالاتری نسبت به بقیه تست ها داره چون اکثر پرفرمنس یه پروژه واقعی صرف همین واکشی ها میشه.
🔸و حالا فریمورک ASP.NET Core در جایگاه 6 ام این امتیاز دهی قرار گرفته. و این یعنی 6مین سریعترین فریمورک وب دنیا!
این سیستم امتیاز دهی سعی کرده معیار هاش رو تا حد ممکن به یک پروژه واقعی نزدیک کنه و قابل استناد ترین بنچمارکی هست که در حال حاضر وجود داره. پس از این به بعد میتونین اعتماد بسیار بیشتری به این بنچمارک اتکا کنین.
🔹بر اساس این امیتاز دهی، فریمورک ASP.NET Core امتیاز 5,659 رو کسب کرده که
نسبت به فریمورک Express (مربوط به NodeJs / JavaScript) که در جایگاه 73 و با امتیاز 821 این جدول قرار داره، 6.89 برابر سریعتر هست.
و نسبت به فریمورک Laravel (مربوط به PHP) که در جایگاه 94 و با امتیاز 348 این جدول قرار داره، 14.89 برابر سریعتر هست.
🔸نکته قابل ذکر دیگه اینه که فریمورک های در ردیف های بالاتر این جدول قرار گرفتند با Rust و ++C هستند که ASP.NET Core نسبت به اونها به مراتب امکانات بیشتری داره و کد نویسی باشون راحت تره. ضمن اینکه از نظر محبوبیت هم به مراتب بالا تره.
✅ پس بیراه نیست اگه بگیم که ASP.NET Core سریع ترین از بین فریمورک های محبوب وب دنیا هست✌️✌️✌️
https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=composite
__________________
@DotNetZoom
🔸سایت TechEmpower چندین بنچمارک داره که از لحاظ مختلف (از جمله سرعت سریالایز کردن، اپدیت کردن دیتا و واکشی اطلاعات از دیتابیس و...) فریمورک های مختلف رو مقایسه میکنه ولی هیچ کدومشون خیلی قابل استناد نبودند چون یه پروژه واقعی صرفا یکی از این حالات رو انجام نمیده، بلکه شامل برآیندی از همه این موارد هست.
🔹حالا به تازگی سایت TechEmpower این مشکل رو حل کرده و یه بخشی رو به نام Composite score اضافه کرده که عملا شامل وزن گیری و بررسی همه این بنچمارک ها هست.
این وزن گیری بر اساس ضریب اهمیت هر یک از این موارد مشخص میشه، یعنی مثلا تست Multiple queries که سرعت واکشی چندین کوئری به دیتابیس رو بررسی میکنه، به مراتب ضریب بالاتری نسبت به بقیه تست ها داره چون اکثر پرفرمنس یه پروژه واقعی صرف همین واکشی ها میشه.
🔸و حالا فریمورک ASP.NET Core در جایگاه 6 ام این امتیاز دهی قرار گرفته. و این یعنی 6مین سریعترین فریمورک وب دنیا!
این سیستم امتیاز دهی سعی کرده معیار هاش رو تا حد ممکن به یک پروژه واقعی نزدیک کنه و قابل استناد ترین بنچمارکی هست که در حال حاضر وجود داره. پس از این به بعد میتونین اعتماد بسیار بیشتری به این بنچمارک اتکا کنین.
🔹بر اساس این امیتاز دهی، فریمورک ASP.NET Core امتیاز 5,659 رو کسب کرده که
نسبت به فریمورک Express (مربوط به NodeJs / JavaScript) که در جایگاه 73 و با امتیاز 821 این جدول قرار داره، 6.89 برابر سریعتر هست.
و نسبت به فریمورک Laravel (مربوط به PHP) که در جایگاه 94 و با امتیاز 348 این جدول قرار داره، 14.89 برابر سریعتر هست.
🔸نکته قابل ذکر دیگه اینه که فریمورک های در ردیف های بالاتر این جدول قرار گرفتند با Rust و ++C هستند که ASP.NET Core نسبت به اونها به مراتب امکانات بیشتری داره و کد نویسی باشون راحت تره. ضمن اینکه از نظر محبوبیت هم به مراتب بالا تره.
✅ پس بیراه نیست اگه بگیم که ASP.NET Core سریع ترین از بین فریمورک های محبوب وب دنیا هست✌️✌️✌️
https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=composite
__________________
@DotNetZoom
Telegram
Attach Files
Forwarded from کدهک
ایرادهای زیادی از بنچمارک تک امپاور گرفته میشود. در این ویدیو به این ایرادات پاسخ میدهیم و بررسی می کنیم چرا تست هایی مثل Plaintext باعث بالارفتن پرفورمنس وب شده است. درباره اسب بخار صحبت می کنیم و میگوییم چرا زبانهایی مثل Erlang یا Nodejs در ابتدای لیست قرار ندارند.
https://codehaks.com/go/tec
https://codehaks.com/go/tec
پر درآمد ترین شغل دنیای فن آوری کدام است؟
سایت Stack overflow هر سال بر اساس یک نظر سنجی آماری از وضعیت تکنولوژی ها ، حقوق و دستمزد و ساعات کاری منتشر میکند. در این پست نگاهی به نتایج آخرین نظر سنجی که روز گذشته منتشر شد می اندازیم و به این سوال پاسخ میدهیم که پر درآمد ترین شغل دنیای فن آوری کدام است.
https://codehaks.com/go/stk
سایت Stack overflow هر سال بر اساس یک نظر سنجی آماری از وضعیت تکنولوژی ها ، حقوق و دستمزد و ساعات کاری منتشر میکند. در این پست نگاهی به نتایج آخرین نظر سنجی که روز گذشته منتشر شد می اندازیم و به این سوال پاسخ میدهیم که پر درآمد ترین شغل دنیای فن آوری کدام است.
https://codehaks.com/go/stk
دور 19 تک امپاورد
فریم ورک ASP NET Core که با زبان سی شارپ و دات نت پیاده شده است رکورد بالاترین پرفورمنس آزمایش Plaintext را کسب کرد.
هر چند آزمون Plaintext بسیار ساده است اما سبقت گرفتن از C و ++C و Rust و Java و حتی Nodejs نشان از برتری زبان سی شارپ و فریم ورک دات نت دارد.
چیزی که مشخص است همه فریم ورکها تلاش می کنند در این لیست بالاتر قرار بگیرند اما در حال حاضر این جایگاه در اختیار ASP NET Core است. نکته مهمتر اینکه در این لیست غیر از ASP NET Core هیچ فریم ورک وب که کاربری عمومی داشته باشد و بتوان با آن مثلا یک فروشگاه آنلاین را از ابتدا تا انتها پیاده کرد مشاهده نمی شود.
فریم ورک ASP NET Core که با زبان سی شارپ و دات نت پیاده شده است رکورد بالاترین پرفورمنس آزمایش Plaintext را کسب کرد.
هر چند آزمون Plaintext بسیار ساده است اما سبقت گرفتن از C و ++C و Rust و Java و حتی Nodejs نشان از برتری زبان سی شارپ و فریم ورک دات نت دارد.
چیزی که مشخص است همه فریم ورکها تلاش می کنند در این لیست بالاتر قرار بگیرند اما در حال حاضر این جایگاه در اختیار ASP NET Core است. نکته مهمتر اینکه در این لیست غیر از ASP NET Core هیچ فریم ورک وب که کاربری عمومی داشته باشد و بتوان با آن مثلا یک فروشگاه آنلاین را از ابتدا تا انتها پیاده کرد مشاهده نمی شود.
بنچمارک تک امپاور سالهاست که در زمینه مقایسه پرفورمنس فریم ورکهای تحت وب فعالیت میکند. امروز نتایج دور 19 این بنچمارک اعلام شده که در ادامه نگاهی به آن می اندازیم و به این سوال پاسخ میدهیم که سریعترین فریم ورک تحت وب کدام است.
https://codehaks.com/go/tec19
https://codehaks.com/go/tec19
Forwarded from کدهک
Forwarded from کدهک
در Identity از دو متد برای احراز هویت کاربر استفاده میشود:
متد IsSignedIn احراز هویت را فقط بر اساس کوکی ذخیره شده در مرورگر بررسی می کند.
متد IsAuthenticated همه ی روشهای احراز هویت را شامل میشود و فرقی نمیکند که کاربر از Cookie یا Token یا روش دیگری وارد حساب کاربری شده باشد.
اگر اکشنی دارید که فقط در مرورگر اجرا میشود می توانید از IsSignedIn استفاده کنید. اما اگر برنامه ی شما با Web API یا اپ گوشی کار میکند یا از Single Page App استفاده می کند بهتر است از IsAuthenticated استفاده کنید.
متد IsSignedIn احراز هویت را فقط بر اساس کوکی ذخیره شده در مرورگر بررسی می کند.
متد IsAuthenticated همه ی روشهای احراز هویت را شامل میشود و فرقی نمیکند که کاربر از Cookie یا Token یا روش دیگری وارد حساب کاربری شده باشد.
اگر اکشنی دارید که فقط در مرورگر اجرا میشود می توانید از IsSignedIn استفاده کنید. اما اگر برنامه ی شما با Web API یا اپ گوشی کار میکند یا از Single Page App استفاده می کند بهتر است از IsAuthenticated استفاده کنید.
فرد یا زوج مسئله این است!
در NPM پکیج is-odd تا به حال 59 میلیون بار دانلود شده است. این کتابخانه تنها یک متد دارد که کارش تشخیص فرد بودن یک عدد است.
اگر نیاز به تشخیص زوج بودن عدد دارید می توانید به کتابخانه is-Even مراجعه کنید. این کتابخانه که تابه حال 4 میلیون بار دانلود شده زوج بودن را از روی حالت عکس فرد بودن بدست می آورد و خودش به Is-Odd وابسته است.
دفعه بعد که نیاز شد npm install را اجرا کنید از حجم زیاد بسته ها تعجب نکنید.
در NPM پکیج is-odd تا به حال 59 میلیون بار دانلود شده است. این کتابخانه تنها یک متد دارد که کارش تشخیص فرد بودن یک عدد است.
اگر نیاز به تشخیص زوج بودن عدد دارید می توانید به کتابخانه is-Even مراجعه کنید. این کتابخانه که تابه حال 4 میلیون بار دانلود شده زوج بودن را از روی حالت عکس فرد بودن بدست می آورد و خودش به Is-Odd وابسته است.
دفعه بعد که نیاز شد npm install را اجرا کنید از حجم زیاد بسته ها تعجب نکنید.
داستان VSCode
ویرایشگر VSCode محبوبترین پروژه متن باز در گیتهاب است و تا به حال بیش از 19 هزار نفر در توسعه آن مشارکت کرده اند.
مایکروسافت این محصول را 5 سال پیش عرضه کرد و می توانید از آن برای کد نویسی انواع زبانهای برنامه نویسی در همه سیستم عامل ها استفاده کنید.
نرم افزار VSCode با تایپ اسکریپت و جاوااسکریپت پیاده شده است و برای اجرا در محیط دسکتاپ از Nodejs و Electron استفاده می کند.
فریم ورک Electron توسط گیتهاب توسعه داده میشود و اپلیکیشن های نوشته شده با HTML و CSS و JavaScript را بجای اجرا در مرورگر تبدیل به نرم افزار دسکتاپ میکند.
ویرایشگر ATOM هم از Electron استفاده میکند که محصولی از گیتهاب است.
مایکروسافت در سال 2018 گیتهاب را خرید و اکنون مالک Electron و البته ATOM حساب می شود.
یکی از انتقاداتی که به VSCode میشود مربوط به مصرف بالای رم آن است که باعث کندی عمومی سیستم میشود. با این وجود ابزار فوق العاده و افزونه های فراروان در کنار ساختار کاملا کاستوم پذیر توسعه دهندگان زیادی را به سمت آن جلب کرده است.
ویرایشگر VSCode محبوبترین پروژه متن باز در گیتهاب است و تا به حال بیش از 19 هزار نفر در توسعه آن مشارکت کرده اند.
مایکروسافت این محصول را 5 سال پیش عرضه کرد و می توانید از آن برای کد نویسی انواع زبانهای برنامه نویسی در همه سیستم عامل ها استفاده کنید.
نرم افزار VSCode با تایپ اسکریپت و جاوااسکریپت پیاده شده است و برای اجرا در محیط دسکتاپ از Nodejs و Electron استفاده می کند.
فریم ورک Electron توسط گیتهاب توسعه داده میشود و اپلیکیشن های نوشته شده با HTML و CSS و JavaScript را بجای اجرا در مرورگر تبدیل به نرم افزار دسکتاپ میکند.
ویرایشگر ATOM هم از Electron استفاده میکند که محصولی از گیتهاب است.
مایکروسافت در سال 2018 گیتهاب را خرید و اکنون مالک Electron و البته ATOM حساب می شود.
یکی از انتقاداتی که به VSCode میشود مربوط به مصرف بالای رم آن است که باعث کندی عمومی سیستم میشود. با این وجود ابزار فوق العاده و افزونه های فراروان در کنار ساختار کاملا کاستوم پذیر توسعه دهندگان زیادی را به سمت آن جلب کرده است.
Forwarded from DotNetZoom (ALI_1992)
❇️ خواهشا از HttpClient درست استفاده کنیم! (قسمت اول)
کلاس HttpClient محبوب ترین کلاس برای ارتباطات Http است ولی متاسفانه اکثرا از آن بدستی استفاده نمیکنند!
در این پست میخواهیم Best Practice های آن را بررسی کنیم.
در دات نت، 3 کلاس پایه برای ارتباطات Http داریم :
1️⃣ کلاس HttpWebRequest : اولین و low-level ترین کلاس که کنترل بیشتری به شما می دهد
2️⃣ کلاس WebClient : یک محصور کننده hight-level بر روی HttpWebRequest که کنترل کمتری به شما می دهد ولی طرز استفاده آن ساده تر است
3️⃣ کلاس HttpClient : بهینه ترین کلاس موجود برای ارتباطات Http که مزایای هر دو کلاس قبل را داشته و در دات نت 4.5 به بعد (و نیز تمامی ورژن های NETCore) اضافه شد (البته پکیج Nuget آن برای دات نت 4.0 هم وجود دارد)
کلاس HttpClient نسبت به دو کلاس قبلی پرفرمنس بیشتری داشته و متد های اصلی آن (از جمله GetAsync و PostAsync و...) thread-safe است درنتیجه میتوان یک نسخه از آن به صورت Singleton ایجاد و به صورت concurrent استفاده شود.
یک قابلیت مهم دیگر این آن، امکان Chain کردن HttpMessageHandlers ها در HttpClient است (چیزی شبیه به Pipeline میدلور ها در ASP Core) که میتوان از آن برای Logging، Caching و Error handling و ... استفاده کرد (مثال)
4️⃣ کتابخانه RestSharp نیز یک کتابخانه third-party برای ارتباطات Http و مخصوصا REST بوده ولی درون خود از HttpWebRequest استفاده میکند نه HttpClient و پرفرمنس کمتری دارد (نزدیک به نصف!)
5️⃣ کتابخانه Refit هم هست که با قابلیت های مدرن زیادی داره و کار با RESTful API ها رو خیلی راحت میکنه و البته از HttpClient هم استفاده میکنه (در حال حاضر بهترین کتابخانه third-party)
🔰 نکته بسیار مهم، استفاده بهینه و صحیح از این کلاس است که متاسفانه خیلی ها به اشتباه از آن استفاده میکنند
🔸کلاس HttpClient نباید هربار و به ازای هر درخواست، ساخته (new) شود که در این صورت پرفرمنس را به شدت کاهش میدهد!
🔹با وجود اینکه استفاده از یک شی Singleton آن نسبت به ایجاد هر باره آن بهتر است ولی باز هم صحیح نیست و باعث میشود از تغییرات DNS آگاه نشود!
🔸قبلا گفتیم که فقط متد های اصلی آن thread-safe است، پس پروپرتی های آن مانند (DefaultRequestHeaders و BaseAddress و Timeout و ...) thread-safe نیست و نباید بین ترد های مختلف به صورت مشترک استفاده شود
مثلا اگر یک شی Singleton یا static از HttpClient داشته باشید و در میان ترد های مختلف از آن استفاده کنید ممکن است در آن واحد که یک ترد در حال درخواست زدن به یک url است، ترد دیگری BaseAddress آن را تغییر دهد
🔹با وجود اینکه کلاس کلاس HttpClient یک شی Disposable است ولی نباید به صورت دستی Dispose شود درنتیجه استفاده از آن در کنار using (برای Dispose خودکار) به شدت اشتباه است و باعث مشکل حادی را به نام sockets exhaustion (اشباع سوکت های باز) میشود.
🔸نکته قبل، برای خروجی متد های آن، یعنی کلاس HttpResponseMessage صادق نیست و آن هارا باید حتما توسط using یا به صورت دستی Dispose کرد (البته در حالت دستی اگر exception ایی رخ دهد Dispose رخ نخواهد داد پس باید در بلاک try finaly نوشته شود)
🔹نکته بسیار مهم دیگر این است که به هیچ عنوان از کلاس HttpClient به صورت sync استفاده نکنید، ارتباطات network یکی از مهمترین عوامل block کننده thread بوده و دلیل اصلی اینکه کلاس HttpClient فقط و فقط دارای متد های async است همین بوده.
در نتیجه، استفاده از متد های آن به صورت sync همراه با Task.Wait و Task.Result به شدت اشتباه است و باعث بلاک شدن ترد می شود. (این مقوله برای تمامی متد های async صادق است و حتی می تواند باعث dead-lock شود)
در قسمت بعد اصولی ترین و بهینه ترین روش کار با HttpClient را بررسی خواهیم کرد.
#PerformanceTuning #HttpClient
___________
@DotNetZoom
کلاس HttpClient محبوب ترین کلاس برای ارتباطات Http است ولی متاسفانه اکثرا از آن بدستی استفاده نمیکنند!
در این پست میخواهیم Best Practice های آن را بررسی کنیم.
در دات نت، 3 کلاس پایه برای ارتباطات Http داریم :
1️⃣ کلاس HttpWebRequest : اولین و low-level ترین کلاس که کنترل بیشتری به شما می دهد
2️⃣ کلاس WebClient : یک محصور کننده hight-level بر روی HttpWebRequest که کنترل کمتری به شما می دهد ولی طرز استفاده آن ساده تر است
3️⃣ کلاس HttpClient : بهینه ترین کلاس موجود برای ارتباطات Http که مزایای هر دو کلاس قبل را داشته و در دات نت 4.5 به بعد (و نیز تمامی ورژن های NETCore) اضافه شد (البته پکیج Nuget آن برای دات نت 4.0 هم وجود دارد)
کلاس HttpClient نسبت به دو کلاس قبلی پرفرمنس بیشتری داشته و متد های اصلی آن (از جمله GetAsync و PostAsync و...) thread-safe است درنتیجه میتوان یک نسخه از آن به صورت Singleton ایجاد و به صورت concurrent استفاده شود.
یک قابلیت مهم دیگر این آن، امکان Chain کردن HttpMessageHandlers ها در HttpClient است (چیزی شبیه به Pipeline میدلور ها در ASP Core) که میتوان از آن برای Logging، Caching و Error handling و ... استفاده کرد (مثال)
4️⃣ کتابخانه RestSharp نیز یک کتابخانه third-party برای ارتباطات Http و مخصوصا REST بوده ولی درون خود از HttpWebRequest استفاده میکند نه HttpClient و پرفرمنس کمتری دارد (نزدیک به نصف!)
5️⃣ کتابخانه Refit هم هست که با قابلیت های مدرن زیادی داره و کار با RESTful API ها رو خیلی راحت میکنه و البته از HttpClient هم استفاده میکنه (در حال حاضر بهترین کتابخانه third-party)
🔰 نکته بسیار مهم، استفاده بهینه و صحیح از این کلاس است که متاسفانه خیلی ها به اشتباه از آن استفاده میکنند
🔸کلاس HttpClient نباید هربار و به ازای هر درخواست، ساخته (new) شود که در این صورت پرفرمنس را به شدت کاهش میدهد!
🔹با وجود اینکه استفاده از یک شی Singleton آن نسبت به ایجاد هر باره آن بهتر است ولی باز هم صحیح نیست و باعث میشود از تغییرات DNS آگاه نشود!
🔸قبلا گفتیم که فقط متد های اصلی آن thread-safe است، پس پروپرتی های آن مانند (DefaultRequestHeaders و BaseAddress و Timeout و ...) thread-safe نیست و نباید بین ترد های مختلف به صورت مشترک استفاده شود
مثلا اگر یک شی Singleton یا static از HttpClient داشته باشید و در میان ترد های مختلف از آن استفاده کنید ممکن است در آن واحد که یک ترد در حال درخواست زدن به یک url است، ترد دیگری BaseAddress آن را تغییر دهد
🔹با وجود اینکه کلاس کلاس HttpClient یک شی Disposable است ولی نباید به صورت دستی Dispose شود درنتیجه استفاده از آن در کنار using (برای Dispose خودکار) به شدت اشتباه است و باعث مشکل حادی را به نام sockets exhaustion (اشباع سوکت های باز) میشود.
🔸نکته قبل، برای خروجی متد های آن، یعنی کلاس HttpResponseMessage صادق نیست و آن هارا باید حتما توسط using یا به صورت دستی Dispose کرد (البته در حالت دستی اگر exception ایی رخ دهد Dispose رخ نخواهد داد پس باید در بلاک try finaly نوشته شود)
🔹نکته بسیار مهم دیگر این است که به هیچ عنوان از کلاس HttpClient به صورت sync استفاده نکنید، ارتباطات network یکی از مهمترین عوامل block کننده thread بوده و دلیل اصلی اینکه کلاس HttpClient فقط و فقط دارای متد های async است همین بوده.
در نتیجه، استفاده از متد های آن به صورت sync همراه با Task.Wait و Task.Result به شدت اشتباه است و باعث بلاک شدن ترد می شود. (این مقوله برای تمامی متد های async صادق است و حتی می تواند باعث dead-lock شود)
در قسمت بعد اصولی ترین و بهینه ترین روش کار با HttpClient را بررسی خواهیم کرد.
#PerformanceTuning #HttpClient
___________
@DotNetZoom
www.nuget.org
System.Net.Http 4.0.0
Provides modern classes for sending HTTP requests and receiving HTTP responses from a resource identified by a URI.
Commonly Used Types:
System.Net.Http.HttpResponseMessage
System.Net.Http.DelegatingHandler
System.Net.Http.HttpRequestException
System.Ne…
Commonly Used Types:
System.Net.Http.HttpResponseMessage
System.Net.Http.DelegatingHandler
System.Net.Http.HttpRequestException
System.Ne…
شمارش خودکار ارجاع یا ARC روشی است که در زبانهایی مانند Objective-C و Swift برای مدیریت حافظه استفاده میشود.
در این روش پاکسازی حافظه یک شی زمانی انجام میشود که دیگر هیچ رفرنسی به آن داده نشده باشد.
در GC که #C و Java از آن استفاده میکنند پاکسازی حافظه در بازه های زمانی اتفاق می افتد و باعث مکث در برنامه میشود. همچنین هنگامی که حافظه سیستم پر میشود باید GC در بازه های زمانی کوتاهتر اجرا شود.
در ARC رفرنس های داده شده به شی یا گرفته شده از آن شمارش میشود و زمانی که تعداد آنها به صفر میرسد حافظه شی تخلیه میشود. این روش نیاز به الگوریتم ساده تری دارد و جایی که منابع حافظه محدود است (موبایل) کارایی بیشتری دارد.
اما ARC قادر به مدیریت Reference Cycle نیست یعنی زمانی که شی A فقط به شی B وابسته باشد و برعکس تعداد رفرنس ها هیچوقت صفر نمیشود و نیاز به مکانیزم بیرونی برای تشخیص و پاکسازی بوجود می آید در غیر این صورت Memory Leak پیش می آید.
همچنین دفعات زیاد رفرنس دهی یا حذف رفرنس از شی در ARC غیر بهینه عمل میکند. در حالی که در GC تاثیر نمیگذارد.
در iOS از نسخه 5 به بعد از ARC استفاده میشود.
در این روش پاکسازی حافظه یک شی زمانی انجام میشود که دیگر هیچ رفرنسی به آن داده نشده باشد.
در GC که #C و Java از آن استفاده میکنند پاکسازی حافظه در بازه های زمانی اتفاق می افتد و باعث مکث در برنامه میشود. همچنین هنگامی که حافظه سیستم پر میشود باید GC در بازه های زمانی کوتاهتر اجرا شود.
در ARC رفرنس های داده شده به شی یا گرفته شده از آن شمارش میشود و زمانی که تعداد آنها به صفر میرسد حافظه شی تخلیه میشود. این روش نیاز به الگوریتم ساده تری دارد و جایی که منابع حافظه محدود است (موبایل) کارایی بیشتری دارد.
اما ARC قادر به مدیریت Reference Cycle نیست یعنی زمانی که شی A فقط به شی B وابسته باشد و برعکس تعداد رفرنس ها هیچوقت صفر نمیشود و نیاز به مکانیزم بیرونی برای تشخیص و پاکسازی بوجود می آید در غیر این صورت Memory Leak پیش می آید.
همچنین دفعات زیاد رفرنس دهی یا حذف رفرنس از شی در ARC غیر بهینه عمل میکند. در حالی که در GC تاثیر نمیگذارد.
در iOS از نسخه 5 به بعد از ARC استفاده میشود.
Forwarded from DotNetZoom (ALI_1992)
❇️ خواهشا از HttpClient درست استفاده کنیم! (قسمت دوم)
در قسمت قبل روش های کار با Http و مزایا و معایب هرکدام را بررسی کردیم و به نکات و Best Practice های استفاده از HttpClient پرداختیم
در این قسمت میخواهیم بهترین روش استفاده از آن را بررسی کنیم
اصولی ترین و بهینه ترین حالت استفاده از HttpClient، استفاده از کلاس HttpClientFactory موجود در NET Core 2.1. به بعد است
این کلاس وهله سازی HttpClient و Dispose کردن آن را به صورت خودکار و استاندارد به عهده میگیرد و توسط مکانیزم Pooling (استخری از HttpClient ها) وهله های ایجاد شده را مجددا برای درخواست های بعدی استفاده می کند
بدین ترتیب HttpClientFactory از HttpClient های خود، به بهینه ترین نحو استفادهی مجدد میکند و همچنین سربار ایجاد HttpClientهای جدید نیز به حداقل میرسند.
در این روش دیگر مشکل نشتی حافظه یا کمبود منابع ناشی از Dispose نشدن HttpClient ها را نخواهیم داشت زیرا Lifetime وهله ها توسط HttpClientFactory مدیریت می شود
همچنین دیگر مشکل sockets exhaustion (اشباع سوکت های باز) و آگاه نشدن از تغییرات DNS را نخواهیم داشت
برای استفاده از این کلاس 4 روش موجود است
Basic usage
Named clients
Typed clients
Generated clients
روش Basic روش ساده و معمول آن است ولی معمولا در پروژه ها لازم است یک سری کانفیگ خاص را برای هر HttpClient تنظیم کنیم
مثلا HttpClient ایی که قرار است به سایت A درخواست بزند BaseAddress و Timeout و DefaultRequestHeaders (هدرهای پیشفرض) خود را دارد
از انجایی که این پروپرتی ها thread-safe نیستند بهترین راه استفاده از روش های Named clients و Typed clients است
نکته و محدودیت ای که در ورش Typed clients وجود دارد اینست که کلاس استفاده کننده از آن HttpClient الزاما به صورت Transient رجیستر میشود که باید مد نظر داشت و در صورت نیاز از روش Named clients یا ترفند های دیگر استفاده کرد.
روش Generated clients هم مخصوص استفاده از HttpClient توسط کتابخانه های third-party مانند Refit (که در قسمت قبل بررسی کردیم) است
برای یادگرفتن روش صحیح استفاده از HttpClient پیشنهاد میکنم حتما این 3 مقاله را بخوانید
https://www.dotnettips.info/post/2801
https://www.dotnettips.info/post/3022
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2
#PerformanceTuning #HttpClient
_____________________
@DotNetZoom
در قسمت قبل روش های کار با Http و مزایا و معایب هرکدام را بررسی کردیم و به نکات و Best Practice های استفاده از HttpClient پرداختیم
در این قسمت میخواهیم بهترین روش استفاده از آن را بررسی کنیم
اصولی ترین و بهینه ترین حالت استفاده از HttpClient، استفاده از کلاس HttpClientFactory موجود در NET Core 2.1. به بعد است
این کلاس وهله سازی HttpClient و Dispose کردن آن را به صورت خودکار و استاندارد به عهده میگیرد و توسط مکانیزم Pooling (استخری از HttpClient ها) وهله های ایجاد شده را مجددا برای درخواست های بعدی استفاده می کند
بدین ترتیب HttpClientFactory از HttpClient های خود، به بهینه ترین نحو استفادهی مجدد میکند و همچنین سربار ایجاد HttpClientهای جدید نیز به حداقل میرسند.
در این روش دیگر مشکل نشتی حافظه یا کمبود منابع ناشی از Dispose نشدن HttpClient ها را نخواهیم داشت زیرا Lifetime وهله ها توسط HttpClientFactory مدیریت می شود
همچنین دیگر مشکل sockets exhaustion (اشباع سوکت های باز) و آگاه نشدن از تغییرات DNS را نخواهیم داشت
برای استفاده از این کلاس 4 روش موجود است
Basic usage
Named clients
Typed clients
Generated clients
روش Basic روش ساده و معمول آن است ولی معمولا در پروژه ها لازم است یک سری کانفیگ خاص را برای هر HttpClient تنظیم کنیم
مثلا HttpClient ایی که قرار است به سایت A درخواست بزند BaseAddress و Timeout و DefaultRequestHeaders (هدرهای پیشفرض) خود را دارد
از انجایی که این پروپرتی ها thread-safe نیستند بهترین راه استفاده از روش های Named clients و Typed clients است
نکته و محدودیت ای که در ورش Typed clients وجود دارد اینست که کلاس استفاده کننده از آن HttpClient الزاما به صورت Transient رجیستر میشود که باید مد نظر داشت و در صورت نیاز از روش Named clients یا ترفند های دیگر استفاده کرد.
روش Generated clients هم مخصوص استفاده از HttpClient توسط کتابخانه های third-party مانند Refit (که در قسمت قبل بررسی کردیم) است
برای یادگرفتن روش صحیح استفاده از HttpClient پیشنهاد میکنم حتما این 3 مقاله را بخوانید
https://www.dotnettips.info/post/2801
https://www.dotnettips.info/post/3022
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2
#PerformanceTuning #HttpClient
_____________________
@DotNetZoom
Docs
Make HTTP requests using IHttpClientFactory in ASP.NET Core
Learn about using the IHttpClientFactory interface to manage logical HttpClient instances in ASP.NET Core.
مایکروسافت در کنفرانس Build 2020 خبر از یک Windows Package Manager داد که برای نصب ساده و سریع برنامه ها در محیط ویندوز در نظر گرفته شده است.
حالا "کیوان بیگی" توسعه دهنده پروژه متن باز "AppGet" می گوید روش کار و حتی کدهای "WinGet" تا حد زیادی از روی پروژه او کپی شده است.
طبق متن وبلاگش آقای بیگی میگوید از یک سال گذشته چندبار با مدیران مایکروسافت دیدار داشته و قرار بوده پروژه AppGet را برای مایکروسافت توسعه دهد اما بعد از چند جلسه و مصاحبه تماسها ادامه پیدا نکرده و حالا بعد از شش ماه پروژه WinGet معرفی شده است.
او البته پروژه را به صورت متن باز منتشر کرده و به نظر میرسد از بابت کپی برداری از ایده اش ادعایی ندارد اما از برخورد مایکروسافت در طی این جریان هم خوشنود نیست.
برای بسیاری از مشتریان مایکروسافت هر چیزی که Third-party باشد چندان جلب توجه نمیکند. شانس موفقیت AppGet بدون مایکروسافت کم بود و این چیزی هست که خود آقای بیگی هم در وبلاگش بیان میکند اما مایکروسافت می توانست با روش بهتری این فرآیند را مدیریت کند تا انگیزه افرادی که قصد دارند پروژه های متن باز توسعه دهند حفظ شود
https://codehaks.com/go/apg
حالا "کیوان بیگی" توسعه دهنده پروژه متن باز "AppGet" می گوید روش کار و حتی کدهای "WinGet" تا حد زیادی از روی پروژه او کپی شده است.
طبق متن وبلاگش آقای بیگی میگوید از یک سال گذشته چندبار با مدیران مایکروسافت دیدار داشته و قرار بوده پروژه AppGet را برای مایکروسافت توسعه دهد اما بعد از چند جلسه و مصاحبه تماسها ادامه پیدا نکرده و حالا بعد از شش ماه پروژه WinGet معرفی شده است.
او البته پروژه را به صورت متن باز منتشر کرده و به نظر میرسد از بابت کپی برداری از ایده اش ادعایی ندارد اما از برخورد مایکروسافت در طی این جریان هم خوشنود نیست.
برای بسیاری از مشتریان مایکروسافت هر چیزی که Third-party باشد چندان جلب توجه نمیکند. شانس موفقیت AppGet بدون مایکروسافت کم بود و این چیزی هست که خود آقای بیگی هم در وبلاگش بیان میکند اما مایکروسافت می توانست با روش بهتری این فرآیند را مدیریت کند تا انگیزه افرادی که قصد دارند پروژه های متن باز توسعه دهند حفظ شود
https://codehaks.com/go/apg
شرکت TIOBE هر ماه زبانهای برنامه نویسی را از نظر محبوبیتاشن در موتورهای جستجو مورد بررسی قرار میدهد.
نتایج June 2020 از این نظر اهمیت دارد که زبان برنامه نویسی Rust برای اولین بار در بین 20 ردیف اول قرار گرفته است.
زبان سی شارپ با یک پله صعود نسبت به یک سال گذشته از جایگاه ششم به پنجم بازگشته است.
زبان R سریعترین رشد را داشته و به نظر میرسد جایگاه خودش را نسبت به MATLAB در علوم داده و محاسبات آماری تقویت کرده است.
نتایج June 2020 از این نظر اهمیت دارد که زبان برنامه نویسی Rust برای اولین بار در بین 20 ردیف اول قرار گرفته است.
زبان سی شارپ با یک پله صعود نسبت به یک سال گذشته از جایگاه ششم به پنجم بازگشته است.
زبان R سریعترین رشد را داشته و به نظر میرسد جایگاه خودش را نسبت به MATLAB در علوم داده و محاسبات آماری تقویت کرده است.