Forwarded from کدهک
در این ویدیو یک Select با جستجوی افزایشی از طریق AJAX پیاده می کنیم که اطلاعات بیش از 4 میلیون ردیف را فیلتر میکند و سپس پرفورمنس SQL و Redis را مقایسه می کنیم.
https://codehaks.com/go/rds
https://codehaks.com/go/rds
❇️ معرفی 20 کتاب برتر برای برنامه نویسان NET.
اگه اهل کتابخوندن هستین لیست زیر بهترین و محبوبترین کتابهای برنامه نویسی مناسب برای برنامه نویسان دات نت هست
🔰ASPNET Core
💎Pro ASP.NET Core MVC 2
💎ASP.NET Core in Action
💎Programming ASP.NET Core
💎C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development
🔰EF Core
💎Entity Framework Core in Action
🔰C# and .NET
💎C# in Depth 4th Edition
💎C# 7.0 in a Nutshell
💎CLR via C#, 4th Edition
🔰Testing
💎The Art of Unit Testing: with examples in C# 2nd Edition
💎Unit Testing Principles, Practices, and Patterns
🔰Software Architecture and Principles
💎Microsoft .NET - Architecting Applications for the Enterprise
💎Software Architecture with C# 8 and .NET Core 3
💎Dependency Injection Principles, Practices, and Patterns
—————
💎Patterns of Enterprise Application Architecture
💎Refactoring: Improving the Design of Existing Code
💎Head First Design Patterns
💎Soft Skills: The software developer's life manual
💎The Clean Coder
💎Clean Code
💎Clean Architecture
🔰من لینک آمازون کتاب ها رو قرار دادم و بهتره که حامی قانون کپی رایت باشیم هرچند اونایی که میخوان رایگان دانلود کنن به هرحال راهشو بلدن
____________________
@DotNetZoom
اگه اهل کتابخوندن هستین لیست زیر بهترین و محبوبترین کتابهای برنامه نویسی مناسب برای برنامه نویسان دات نت هست
🔰ASPNET Core
💎Pro ASP.NET Core MVC 2
💎ASP.NET Core in Action
💎Programming ASP.NET Core
💎C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development
🔰EF Core
💎Entity Framework Core in Action
🔰C# and .NET
💎C# in Depth 4th Edition
💎C# 7.0 in a Nutshell
💎CLR via C#, 4th Edition
🔰Testing
💎The Art of Unit Testing: with examples in C# 2nd Edition
💎Unit Testing Principles, Practices, and Patterns
🔰Software Architecture and Principles
💎Microsoft .NET - Architecting Applications for the Enterprise
💎Software Architecture with C# 8 and .NET Core 3
💎Dependency Injection Principles, Practices, and Patterns
—————
💎Patterns of Enterprise Application Architecture
💎Refactoring: Improving the Design of Existing Code
💎Head First Design Patterns
💎Soft Skills: The software developer's life manual
💎The Clean Coder
💎Clean Code
💎Clean Architecture
🔰من لینک آمازون کتاب ها رو قرار دادم و بهتره که حامی قانون کپی رایت باشیم هرچند اونایی که میخوان رایگان دانلود کنن به هرحال راهشو بلدن
____________________
@DotNetZoom
✅ چرا نوع های double و float برای محاسبات اعشاری با دقت بالا مناسب نیست
نوع های float و double بر مبنای عدد 2 عمل میکنن و برای محاسبات اعدادی که بر منبای عدد 10 نیاز داریم گزینه مناسبی نیستند
این رفتار نه تنها در سی شارپ بلکه در تمام زبان های برنامه نویسی وجود داره
اطلاعات بیشتر:
▪️Why not use Double or Float to represent currency?
▪️Float or double?
🔰 نتیجه :
🔸از نوع های double و float (معادل کلاس Single) برای محاسبه های اعشاری با دقت بالا استفاده نکنید
🔹همیشه به جای double و float از نوع decimal استفاده کنید مگر خلافش ثابت بشه!
__________________
@DotNetZoom
نوع های float و double بر مبنای عدد 2 عمل میکنن و برای محاسبات اعدادی که بر منبای عدد 10 نیاز داریم گزینه مناسبی نیستند
این رفتار نه تنها در سی شارپ بلکه در تمام زبان های برنامه نویسی وجود داره
اطلاعات بیشتر:
▪️Why not use Double or Float to represent currency?
▪️Float or double?
🔰 نتیجه :
🔸از نوع های double و float (معادل کلاس Single) برای محاسبه های اعشاری با دقت بالا استفاده نکنید
🔹همیشه به جای double و float از نوع decimal استفاده کنید مگر خلافش ثابت بشه!
__________________
@DotNetZoom
✅ آموزش معماری تمیز (Clean Architecture) + سورس کد بهترین پیاده سازی ها
اکثر مقالاتی که این معماری رو به صورت کلی و انتزاعی توضیح دادند ممکنه برنامه نویس رو به خوبی شیرفهم نکنه مخصوصا وقتی با مفاهیمی آشنا میشن که شاید تا قبل نمیشناختین یا معادلی براش توی ذهنتون ندارین مثل Interactor و Interface Adapters و Drivers!
این موضوع حتی برای منبع اصلی Clean Artchiture یعنی مقاله شخص Robert C Martin (معروف به Uncle Bob) هم صدق میکنه هرچند که خیلی جامع و کامل توضیح داده ولی برای یه برنامه نویس سی شارپی ممکنه مبهم به نظر بیاد، مادامی که پیاده سازی عملی ازش رو نبینه.
همچنین خیلی از مقاله ها با دخیل کردن بیش از حد مورادی چون DDD و CQRS و ...، فهم اصل موضوع Clean Architecture رو برای مخاطب سخت میکنن.
🔸مقاله زیر خیلی ساده و روان و البته مختصر و مفید به توضیح معماری تمیز پرداخته و در آخر هم رفرنس های خوبی رو معرفی میکنه که پیشنهاد میکنم حتما ببینیدشون
https://www.dandoescode.com/blog/clean-architecture-an-introduction/
🔹و اما بریم سر اصل مطلب یعنی پیاده سازی؛ پیاده سازی های مختلفی از این معماری وجود داره توی اینترنت و گیتهاب که هرکس معمولا بنا به فهم و سلیقه خودش اومده یه پروژه ای ساخته که بعضا اشتباه هم هستند و صرفا اسم Clean Architecture رو به دوش میکشند
1️⃣ بهترین پیاده سازی هایی که من دیدم به ترتیب اینا هستند
https://github.com/jasontaylordev/CleanArchitecture
🔰آموزش ویدئویی این مورد توی یوتیوب هم هست که برای درک بهتر خیلی بهتون کمک میکنه
https://www.youtube.com/watch?v=5OtUm1BLmG0
https://jasontaylor.dev/clean-architecture-getting-started/
2️⃣ پیاده سازی بعدی توسط ardalis تهیه شده و ویدئو اش هم توی یوتیوب قرار داده شده
https://github.com/ardalis/CleanArchitecture
3️⃣ پیاده سازی بعدی هم خوبه و توضیحات بیشترش توی wiki خود ریپازیتوری و پست های وبلاگ نویسنده (1 و 2 و 3) + پلی لیست ویدئو هاش تو یوتیوب خود نویسنده قرار داده شده
https://github.com/ivanpaulovich/clean-architecture-manga
4️⃣ و در اخر پیاده سازی زیر که به همراه پست بلاگ نویسنده قرار داده شده
https://github.com/mmacneil/CleanAspNetCoreWebApi
________________
@DotNetZoom
اکثر مقالاتی که این معماری رو به صورت کلی و انتزاعی توضیح دادند ممکنه برنامه نویس رو به خوبی شیرفهم نکنه مخصوصا وقتی با مفاهیمی آشنا میشن که شاید تا قبل نمیشناختین یا معادلی براش توی ذهنتون ندارین مثل Interactor و Interface Adapters و Drivers!
این موضوع حتی برای منبع اصلی Clean Artchiture یعنی مقاله شخص Robert C Martin (معروف به Uncle Bob) هم صدق میکنه هرچند که خیلی جامع و کامل توضیح داده ولی برای یه برنامه نویس سی شارپی ممکنه مبهم به نظر بیاد، مادامی که پیاده سازی عملی ازش رو نبینه.
همچنین خیلی از مقاله ها با دخیل کردن بیش از حد مورادی چون DDD و CQRS و ...، فهم اصل موضوع Clean Architecture رو برای مخاطب سخت میکنن.
🔸مقاله زیر خیلی ساده و روان و البته مختصر و مفید به توضیح معماری تمیز پرداخته و در آخر هم رفرنس های خوبی رو معرفی میکنه که پیشنهاد میکنم حتما ببینیدشون
https://www.dandoescode.com/blog/clean-architecture-an-introduction/
🔹و اما بریم سر اصل مطلب یعنی پیاده سازی؛ پیاده سازی های مختلفی از این معماری وجود داره توی اینترنت و گیتهاب که هرکس معمولا بنا به فهم و سلیقه خودش اومده یه پروژه ای ساخته که بعضا اشتباه هم هستند و صرفا اسم Clean Architecture رو به دوش میکشند
1️⃣ بهترین پیاده سازی هایی که من دیدم به ترتیب اینا هستند
https://github.com/jasontaylordev/CleanArchitecture
🔰آموزش ویدئویی این مورد توی یوتیوب هم هست که برای درک بهتر خیلی بهتون کمک میکنه
https://www.youtube.com/watch?v=5OtUm1BLmG0
https://jasontaylor.dev/clean-architecture-getting-started/
2️⃣ پیاده سازی بعدی توسط ardalis تهیه شده و ویدئو اش هم توی یوتیوب قرار داده شده
https://github.com/ardalis/CleanArchitecture
3️⃣ پیاده سازی بعدی هم خوبه و توضیحات بیشترش توی wiki خود ریپازیتوری و پست های وبلاگ نویسنده (1 و 2 و 3) + پلی لیست ویدئو هاش تو یوتیوب خود نویسنده قرار داده شده
https://github.com/ivanpaulovich/clean-architecture-manga
4️⃣ و در اخر پیاده سازی زیر که به همراه پست بلاگ نویسنده قرار داده شده
https://github.com/mmacneil/CleanAspNetCoreWebApi
________________
@DotNetZoom
Forwarded from کدهک
اضافه شدن GUI لینوکس به ویندوز
ابزار Windows Subsystem For Linux به کاربران ویندوز امکان میدهد برنامه های لینوکس را در ویندوز اجرا کنند اما این موضوع فقط محدود به اپلیکیشن هایی بود که رابط کاربری نداشتند و فقط در خط فرمان کار می کردند.
مایکروسافت در بیلد 2020 اعلام کرد به زودی پشتیبانی از رابط کاربری لینوکس هم به WSL اضافه میشود تا امکان استفاده از اپ هایی که رابط کاربری دارند ممکن شود. تصویر نمونه ی اجرای برنامه مدیریت فایل GNOME را در محیط ویندوز 10 نشان میدهد.
همچنین Docker Desktop در نسخه ی بعدی از WSL2 استفاده خواهد کرد که نیاز به Hyper-V را از بین میبرد و سرعت اجرای آن را افزایش میدهد. با این تغییر امکان اجرای Docker در نسخه ی Windows Home هم ممکن میشود.
نسخه ی WSL2 از آپدیت ماه جاری در ویندوز قرار میگیرد.
ابزار Windows Subsystem For Linux به کاربران ویندوز امکان میدهد برنامه های لینوکس را در ویندوز اجرا کنند اما این موضوع فقط محدود به اپلیکیشن هایی بود که رابط کاربری نداشتند و فقط در خط فرمان کار می کردند.
مایکروسافت در بیلد 2020 اعلام کرد به زودی پشتیبانی از رابط کاربری لینوکس هم به WSL اضافه میشود تا امکان استفاده از اپ هایی که رابط کاربری دارند ممکن شود. تصویر نمونه ی اجرای برنامه مدیریت فایل GNOME را در محیط ویندوز 10 نشان میدهد.
همچنین Docker Desktop در نسخه ی بعدی از WSL2 استفاده خواهد کرد که نیاز به Hyper-V را از بین میبرد و سرعت اجرای آن را افزایش میدهد. با این تغییر امکان اجرای Docker در نسخه ی Windows Home هم ممکن میشود.
نسخه ی WSL2 از آپدیت ماه جاری در ویندوز قرار میگیرد.
Forwarded from کدهک
محیط طراحی WinForm برای NET Core
در آپدیت 16.07 که امروز منتشر شد امکان استفاده از محیط طراحی فرم های ویندوز به دات نت Core اضافه شده است.
برای استفاده از این قابلیت باید ابتدا Visual Studio را به آخرین نسخه آپدیت کنید سپس در تنظیمات Tools > Options > Environment > Preview
گزینه ی Use the preview Windows Forms designer for .NET Core apps را تیک بزنید.
در آپدیت 16.07 که امروز منتشر شد امکان استفاده از محیط طراحی فرم های ویندوز به دات نت Core اضافه شده است.
برای استفاده از این قابلیت باید ابتدا Visual Studio را به آخرین نسخه آپدیت کنید سپس در تنظیمات Tools > Options > Environment > Preview
گزینه ی Use the preview Windows Forms designer for .NET Core apps را تیک بزنید.
Forwarded from کدهک
اولین نسخه ی Windows Terminal منتشر شد
ابزار Windows Terminal از سال گذشته در وضعیت پیش نمایش بود اما امروز نسخه ی 1.0 آن رسما منتشر شد.
به عنوان یک دولوپر همیشه نیاز به اجرای دستورات در خط فرمان دارید و در گذشته ابزاری مانند CMD و Powershell این امکان را فراهم می کردند. اما Windows Terminal تلاش میکند تمامی نیازمندی های شما را در یک محل جمع کند.
در Windows Terminal می توانید چند تب باز کنید و همزمان روی Ubuntu یا Powershell کار کنید یا یک تب را با استفاده از قابلیت Pane به چند بخش تقسیم کنید.
ویندوز ترمینال برای نمایش متن از GPU استفاده میکند و اینکار سرعت نمایش اطلاعات را بسیار افزایش میدهد همچنین امکان نمایش تصویر و آیکون در محیط ترمینال را فراهم میکند.
ابزار Windows Terminal از سال گذشته در وضعیت پیش نمایش بود اما امروز نسخه ی 1.0 آن رسما منتشر شد.
به عنوان یک دولوپر همیشه نیاز به اجرای دستورات در خط فرمان دارید و در گذشته ابزاری مانند CMD و Powershell این امکان را فراهم می کردند. اما Windows Terminal تلاش میکند تمامی نیازمندی های شما را در یک محل جمع کند.
در Windows Terminal می توانید چند تب باز کنید و همزمان روی Ubuntu یا Powershell کار کنید یا یک تب را با استفاده از قابلیت Pane به چند بخش تقسیم کنید.
ویندوز ترمینال برای نمایش متن از GPU استفاده میکند و اینکار سرعت نمایش اطلاعات را بسیار افزایش میدهد همچنین امکان نمایش تصویر و آیکون در محیط ترمینال را فراهم میکند.
خب رویداد Microsoft Build 2020 هم برگذار شد و شاهد کلی خبر جذاب و هیجان انگیز بودیم
جو اینجا خیلی خودمونی نیس و گرنه میگفتم فی الواقع پشمی بهم نمونده! اینقدر که فیچر جدید اومد بیرون و چیز جدید release شد
متاسفانه این چند روز خیلی درگیر بودم و فرصت نکردم براش مطلب تهیه کنم. از طرفی کانال دوست و برادر (کدهک) زحمتشو کشیده که باهاتون به اشتراک گذاشتمش
حالا اگه فرصت شد بعدا جزئیات بیشتری از این خبرای جذاب خواهم نوشت
نظراتتون رو هم زیر پست حتما میخونم. 👇
جو اینجا خیلی خودمونی نیس و گرنه میگفتم فی الواقع پشمی بهم نمونده! اینقدر که فیچر جدید اومد بیرون و چیز جدید release شد
متاسفانه این چند روز خیلی درگیر بودم و فرصت نکردم براش مطلب تهیه کنم. از طرفی کانال دوست و برادر (کدهک) زحمتشو کشیده که باهاتون به اشتراک گذاشتمش
حالا اگه فرصت شد بعدا جزئیات بیشتری از این خبرای جذاب خواهم نوشت
نظراتتون رو هم زیر پست حتما میخونم. 👇
Forwarded from کدهک
دور 19 تک امپاور
هفته آینده نتایج دور 19م بنچمارک تک امپاور رسما اعلام میشود. اما تویتر Techempower پیش نمایشی از نتایج بدست آمده را امروز منتشر کرد که نشان میدهد ASP NET Core در رتبه ی 6 سریعرین فریم ورکهای وب قرار گرفته است.
دسته بندی جدید Composite شامل وزن گیری و بررسی همه ی تست ها می شود که هدفش مقایسه همه ی عواملی است که میتواند در سریعتر اجرا شدن یک اپلیکیشن وب تاثیر گذار باشد.
فریم ورک ASP NET Core در حالی در ردیف ششم قرار گرفته که در مقایسه با ردیف های بالاتر امکانات بسیار بیشتری دارد و کد نویسی با آن به مراتب از زبانهایی مثل RUST یا C و ++C ساده تر است.
همچنین در تست Plaintext آمار خیره کننده 7 میلیون RPS بدست آمده است که برای زبانی مانند سی شارپ که دارای GC است یک دست آورد بزرگ محسوب میشود.
هفته آینده نتایج دور 19م بنچمارک تک امپاور رسما اعلام میشود. اما تویتر Techempower پیش نمایشی از نتایج بدست آمده را امروز منتشر کرد که نشان میدهد ASP NET Core در رتبه ی 6 سریعرین فریم ورکهای وب قرار گرفته است.
دسته بندی جدید Composite شامل وزن گیری و بررسی همه ی تست ها می شود که هدفش مقایسه همه ی عواملی است که میتواند در سریعتر اجرا شدن یک اپلیکیشن وب تاثیر گذار باشد.
فریم ورک ASP NET Core در حالی در ردیف ششم قرار گرفته که در مقایسه با ردیف های بالاتر امکانات بسیار بیشتری دارد و کد نویسی با آن به مراتب از زبانهایی مثل RUST یا C و ++C ساده تر است.
همچنین در تست Plaintext آمار خیره کننده 7 میلیون RPS بدست آمده است که برای زبانی مانند سی شارپ که دارای GC است یک دست آورد بزرگ محسوب میشود.
Forwarded from کدهک
تخفیف 50 درصدی ویژه عید فطر
امروز می توانید برای مدت محدود دوره جامع آموزش ASP NET Core کدهک را با تخفیف 50 درصدی تهیه کنید.
این دوره شامل بیش از 30 ساعت آموزش تخصصی از مقدماتی تا پیشرفته است و به مباحث مختلف توسعه وب با ASP NET Core می پردازد.
علاوه بر درگاه بانکی امکان خرید به صورت کارت به کارت وجود دارد. می توانید با @codehak تماس بگیرید.
کد تخفیف : fetr
http://codehaks.com/go/sale
امروز می توانید برای مدت محدود دوره جامع آموزش ASP NET Core کدهک را با تخفیف 50 درصدی تهیه کنید.
این دوره شامل بیش از 30 ساعت آموزش تخصصی از مقدماتی تا پیشرفته است و به مباحث مختلف توسعه وب با ASP NET Core می پردازد.
علاوه بر درگاه بانکی امکان خرید به صورت کارت به کارت وجود دارد. می توانید با @codehak تماس بگیرید.
کد تخفیف : fetr
http://codehaks.com/go/sale
✅ استفاده از قابلیت CI/CD گیتهاب به نام Github Actions
برای Build و توزیع خودکار پروژه های NET Core.
🔸سایت گیتهاب بخشی به نام GitHub Actions دارد که امکانات CI/CD را به صورت رایگان برای شما فراهم میکند. توسط این بخش می توانید پروژه خود را (مثلا بعد از هر Push یا Pull Request) به صورت خودکار Build کرده، Test های آن را اجرا کنید و از آن Publish بگیرید (البته امکانات بسیار زیادی دارد و این فقط یک مثال بود)
https://www.dotnettips.info/post/3103
🔻یادتون باشه حتما نظرات پایین صفحه رو هم بخونین که نکات مهمی توش هست
🔹مثلا کتابخانه EasyCompressor علاوه بر Build و Test خودکار، Nuget Package های خود را به ازای هر Commit ایی که Tag عددی با فرمت مشخص (مثلا 1.2.1) به سایت nuget.org آپلود میکند
https://github.com/mjebrahimi/EasyCompressor
🔻 فایل yaml. آن را میتوانید در این مسیر مشاهده کنید
________________
@DotNetZoom
برای Build و توزیع خودکار پروژه های NET Core.
🔸سایت گیتهاب بخشی به نام GitHub Actions دارد که امکانات CI/CD را به صورت رایگان برای شما فراهم میکند. توسط این بخش می توانید پروژه خود را (مثلا بعد از هر Push یا Pull Request) به صورت خودکار Build کرده، Test های آن را اجرا کنید و از آن Publish بگیرید (البته امکانات بسیار زیادی دارد و این فقط یک مثال بود)
https://www.dotnettips.info/post/3103
🔻یادتون باشه حتما نظرات پایین صفحه رو هم بخونین که نکات مهمی توش هست
🔹مثلا کتابخانه EasyCompressor علاوه بر Build و Test خودکار، Nuget Package های خود را به ازای هر Commit ایی که Tag عددی با فرمت مشخص (مثلا 1.2.1) به سایت nuget.org آپلود میکند
https://github.com/mjebrahimi/EasyCompressor
🔻 فایل yaml. آن را میتوانید در این مسیر مشاهده کنید
________________
@DotNetZoom
❇️ نتایج نظرسنجی StackOverflow 2020 منتشر شد
🔰 طی این نظرسنجی که بیش از 65 هزار برنامه نویس در اون شرکت کردند
فریمورک ASP.NET Core با 70.7 درصد، جایگاه اول رو در محبوب ترین فریمورک های وب کسب کرده.
https://insights.stackoverflow.com/survey/2020
____________________
@DotNetZoom
🔰 طی این نظرسنجی که بیش از 65 هزار برنامه نویس در اون شرکت کردند
فریمورک ASP.NET Core با 70.7 درصد، جایگاه اول رو در محبوب ترین فریمورک های وب کسب کرده.
https://insights.stackoverflow.com/survey/2020
____________________
@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
✅ فریمورک 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
❇️ کنترل سطح دسترسی پویا و Permission-based
چند وقت پیش یکی از دوستان سوال پرسیده بودند که چطور میتونیم سطح دسترسی کاربر رو به اکشن های دلخواه، محدود کنیم. اتفاقا چند سال پیش همین نیاز رو خودمم داشتم و به این صورت هندلش کردیم که :
هر کاربر میتونه N تا Role داشته باشه و هر Role هم N تا پرمیژن داره
پرمیژن ها در واقع Fullname اکشن هایی هستند که کاربر بهشون دسترسی داره مثلا
MyProject.HomeController.Index
مشخص میکنه کاربر به این اکشن دسترسی داره و وجود نام کامل متد باعث میشه مشکل هم نام بودن اکشن ها و کنترولر ها در پروژه های Microservice رو هم نداشته باشیم
مدیریت این قضیه هم کاملا توسط Reflection و Caching خیلی شیک انجام میشد و نیازی پرفرمنس بسیار خوبی هم داشت با توجه به اینکه تعداد کاربرانمونم زیاد بود، ضمن اینکه هیچ گونه کد نویسی ویا چک کردن سطح دسترسی لازم نبود توسط برنامه نویس انجام بشه و همگی در یک ActionFilter سراسری هندل میشد
قابلیت دیگه ای هم که نیاز بود و بهش اضافه کردیم بحث Group کردن اکشن های مرتبط بود. مثلا کاربری که دسترسی به ویرایش یک سند داره عملا به 3 اکشن Detail, Edit(Get) , Update(Post) x باید دسترسی داشته باشه، درنتیجه میتونستیم با اضافه کردن یک پرمیشن، 3 اکشن رو دسترسی داشته باشه
حتی واسه نیاز های پیچیده تر میتونین بحث Include و Exclude کردن یک یا چند پرمیژن رو از یک Role هم اضافه کنید. مثلا یک کاربر نقش Writer داره ولی... به یک اکشن از Report هم دسترسی داره (Include) و یا به یک اکشن خاص از نقش Writer نباید دسترسی داشته باشه (Exclude)
سلوشن بالا تمامی نیاز های مارو به خوبی برطرف کرد و کاملا راضی بودیم، برای پیاده سازیش هم میتونین از Identity یا هر پیاده سازی دلخواه برای احراز هویت استفاده کنید
🔸در کل ما 3 نوع کنترل سطح دسترسی داریم
سطح Api level (کنترل دسترسی به یک action/api خاص)
سطح Operation level (کنترل دسترسی به یک فرایند/بیزنس لاجیک خاص)
سطح Data level (کنترل دسترسی برای دیتای دریافتی از دیتابیس)
روش بالا برای کنترل دسترسی در سطح Action (همون Api level) هست و برای نیاز های دیگه کنترل دسترسی مثل کنترل دسترسی به یک فرایند خاص (Operation level) میتونین از مکانیزم ACL (مخفف access control list) استفاده کنید
برای کنترل دسترسی در سطح Data (همون Data level) برای کوئری گرفتن هم از Global Query Filter خود EF Core استفاده کنید
https://long2know.com/2017/05/entity-framework-multitenancy/
https://trailheadtechnology.com/entity-framework-core-2-1-automate-all-that-boring-boiler-plate/
🔹یه رویکرد دیگه که به نظر اصولی تر هم هست ولی یه کم تخصصی تره
بحث کنترل دسترسی در سطح Service ها توسط تکنیک AOP هست
مثلا این مقاله با CastleWindsor اومده قبل از اجرا شدن متد های سرویس، دسترسی کاربر رو چک کرده
https://lukemerrett.com/aop-in-castle-windsor/
از مزایای این روش میشه به این اشاره کرد که شما میتونین لایه سرویس (همون منطق تجاری پروژه) رو توی پروژه های دیگه هم به صورت مستقل استفاده کنید و نگران سطح دسترسی نباشید چون همش تو همون لایه داره چک میشه
🔸مدیریتش تو لایه Repsitory هم یک روش مرسوم هست
عملا استفاده از روش repository و Global Query Filter داره یک کار رو انجام میده
هر دو با شرط گذاشتن روی کوئری ها، دسترسی رو چک میکنن تنها تفاوت بینشون اینه که Global Query Filter این کار رو به صورت اتوماتیک انجام میده و دیگه لازم نیست موقع کوئری نوشتن حواسمون باشه که شرط فیلتر رو هم بگذاریم
و مزیتش دیگه اش هم اینه که موقع Explicit Loading (همون Include) و
حتی موقع Eager Loading (توسط LoadCollection و LoadReference) هم این موضوع به صورت خودکار چک میشه. توی EF 6 نبود این ویژگی. توی EF Core 2.0 اضافه شد
🔰این سری مقاله رو هم پیشنهاد میکنم بخونین، توضیحات خوبی در مورد روش های کنترل سطح دسترسی داده
Part 1: A better way to handle authorization in ASP.NET Core
https://bit.ly/2KaAo0q
Part 2: Handling data authorization in ASP.NET Core and Entity Framework Core
https://bit.ly/2KbA9SG
Part 3: A better way to handle ASP.NET Core authorization – six months on
https://bit.ly/2K8Z6hU
Part 4: Building a robust and secure data authorization with EF Core
https://bit.ly/2K885zH
#سطح_دسترسی #permission
___________________
@DotNetZoom
چند وقت پیش یکی از دوستان سوال پرسیده بودند که چطور میتونیم سطح دسترسی کاربر رو به اکشن های دلخواه، محدود کنیم. اتفاقا چند سال پیش همین نیاز رو خودمم داشتم و به این صورت هندلش کردیم که :
هر کاربر میتونه N تا Role داشته باشه و هر Role هم N تا پرمیژن داره
پرمیژن ها در واقع Fullname اکشن هایی هستند که کاربر بهشون دسترسی داره مثلا
MyProject.HomeController.Index
مشخص میکنه کاربر به این اکشن دسترسی داره و وجود نام کامل متد باعث میشه مشکل هم نام بودن اکشن ها و کنترولر ها در پروژه های Microservice رو هم نداشته باشیم
مدیریت این قضیه هم کاملا توسط Reflection و Caching خیلی شیک انجام میشد و نیازی پرفرمنس بسیار خوبی هم داشت با توجه به اینکه تعداد کاربرانمونم زیاد بود، ضمن اینکه هیچ گونه کد نویسی ویا چک کردن سطح دسترسی لازم نبود توسط برنامه نویس انجام بشه و همگی در یک ActionFilter سراسری هندل میشد
قابلیت دیگه ای هم که نیاز بود و بهش اضافه کردیم بحث Group کردن اکشن های مرتبط بود. مثلا کاربری که دسترسی به ویرایش یک سند داره عملا به 3 اکشن Detail, Edit(Get) , Update(Post) x باید دسترسی داشته باشه، درنتیجه میتونستیم با اضافه کردن یک پرمیشن، 3 اکشن رو دسترسی داشته باشه
حتی واسه نیاز های پیچیده تر میتونین بحث Include و Exclude کردن یک یا چند پرمیژن رو از یک Role هم اضافه کنید. مثلا یک کاربر نقش Writer داره ولی... به یک اکشن از Report هم دسترسی داره (Include) و یا به یک اکشن خاص از نقش Writer نباید دسترسی داشته باشه (Exclude)
سلوشن بالا تمامی نیاز های مارو به خوبی برطرف کرد و کاملا راضی بودیم، برای پیاده سازیش هم میتونین از Identity یا هر پیاده سازی دلخواه برای احراز هویت استفاده کنید
🔸در کل ما 3 نوع کنترل سطح دسترسی داریم
سطح Api level (کنترل دسترسی به یک action/api خاص)
سطح Operation level (کنترل دسترسی به یک فرایند/بیزنس لاجیک خاص)
سطح Data level (کنترل دسترسی برای دیتای دریافتی از دیتابیس)
روش بالا برای کنترل دسترسی در سطح Action (همون Api level) هست و برای نیاز های دیگه کنترل دسترسی مثل کنترل دسترسی به یک فرایند خاص (Operation level) میتونین از مکانیزم ACL (مخفف access control list) استفاده کنید
برای کنترل دسترسی در سطح Data (همون Data level) برای کوئری گرفتن هم از Global Query Filter خود EF Core استفاده کنید
https://long2know.com/2017/05/entity-framework-multitenancy/
https://trailheadtechnology.com/entity-framework-core-2-1-automate-all-that-boring-boiler-plate/
🔹یه رویکرد دیگه که به نظر اصولی تر هم هست ولی یه کم تخصصی تره
بحث کنترل دسترسی در سطح Service ها توسط تکنیک AOP هست
مثلا این مقاله با CastleWindsor اومده قبل از اجرا شدن متد های سرویس، دسترسی کاربر رو چک کرده
https://lukemerrett.com/aop-in-castle-windsor/
از مزایای این روش میشه به این اشاره کرد که شما میتونین لایه سرویس (همون منطق تجاری پروژه) رو توی پروژه های دیگه هم به صورت مستقل استفاده کنید و نگران سطح دسترسی نباشید چون همش تو همون لایه داره چک میشه
🔸مدیریتش تو لایه Repsitory هم یک روش مرسوم هست
عملا استفاده از روش repository و Global Query Filter داره یک کار رو انجام میده
هر دو با شرط گذاشتن روی کوئری ها، دسترسی رو چک میکنن تنها تفاوت بینشون اینه که Global Query Filter این کار رو به صورت اتوماتیک انجام میده و دیگه لازم نیست موقع کوئری نوشتن حواسمون باشه که شرط فیلتر رو هم بگذاریم
و مزیتش دیگه اش هم اینه که موقع Explicit Loading (همون Include) و
حتی موقع Eager Loading (توسط LoadCollection و LoadReference) هم این موضوع به صورت خودکار چک میشه. توی EF 6 نبود این ویژگی. توی EF Core 2.0 اضافه شد
🔰این سری مقاله رو هم پیشنهاد میکنم بخونین، توضیحات خوبی در مورد روش های کنترل سطح دسترسی داده
Part 1: A better way to handle authorization in ASP.NET Core
https://bit.ly/2KaAo0q
Part 2: Handling data authorization in ASP.NET Core and Entity Framework Core
https://bit.ly/2KbA9SG
Part 3: A better way to handle ASP.NET Core authorization – six months on
https://bit.ly/2K8Z6hU
Part 4: Building a robust and secure data authorization with EF Core
https://bit.ly/2K885zH
#سطح_دسترسی #permission
___________________
@DotNetZoom
Telegram
Attach Files
❇️ خواهشا از 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 را بررسی خواهیم کرد.
#Performance #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 را بررسی خواهیم کرد.
#Performance #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…
❇️ خواهشا از 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
#Performance #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
#Performance #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.
❇️ عیب یابی و رفع مشکلات پرفرمنسی
در یکی از شرکت هایی که مشاور هستم از من خواسته شده تا مشکلات پرفرمنسی پروژه را پیدا کرده و مناسب ترین راه حل را به آنها پیشنهاد دهم
در هر پروژه ای احتمالا قسمت های زیادی قابل بهبود هستند (چه از لحاظ پرفرمنسی و چه از لحاظ معماری و کدنویسی تمیز و...) اما برای یافتن موثر ترین راه و البته کم هزینه ترین، باید ابتدا Bottleneck (گلوگاه) های سیستم را کشف کرده و سپس بر اساس «هزینه، زمان و منفعت» آنها را الویت بندی کنیم
برای کشف گلوگاه های سیستم (جاهایی که عامل اصلی افت پرفرمنس هستند) باید از ابزار های Profiler استفاده کنیم.
در کل پروفایلر های مختلفی وجود دارند که اکثرا پولی هستند در اینجا میخواهم بهترین آنها رو معرفی کنم
بهترین ابزار های Performance Profiler
1️⃣ برنامه ANTS Performance Profiler (محصول شرکت Redgate)
2️⃣ برنامه dotTrace (محصول شرکت JetBrains)
3️⃣ برنامه PerfView (محصولی "رایگان و سورس باز" از شرکت Microsoft)
4️⃣ برنامه CodeTrack (محصولی "رایگان و سورس باز")
هر چهار برنامه قابلیت های قوی و زیادی دارند از مهمترین شون میشه به موارد زیر اشاره کرد
🔸 قابلیت ثبت سلسله مراتب فراخوانی متد ها
توسط این قابلیت که اصلاحا بهش Call tree میگن میشه فهمید که چه متدی چه متد های دیگه ای رو فراخوانی کرده یا مثلا یک متد کلا چندبار صدا زده شده و هر متد چقدر به طول انجامیده (در قالب یک Timeline کامل) و ....
🔹 قابلیت ثبت تمام کوئری های اجرا شده بر روی دیتابیس
توسط این قابلیت میشه دید چه کوئری هایی و مثلا یک کوئری چندبار روی دیتابیس اجرا شده و هرکدوم چقدر زمان بره و...
🔸 قابلیت ثبت تمام Exception های رخ داده به همراه جزئیات و stacktrace
🔹 قابلیت نمایش تمام Thread های ایجاد شده و فرایند های انجام شده داخلش هر کدومشون و یا کلیه فرایند های انجام شده داخل یک Process
🔸 قابلیت پروفایل کردن همه برنامه ها از جمله
.NET Framework, .NET Core و ASP.NET, ASP.NET Core, Webservices, WCF, Windows Forms, Windows services, WPF ,IIS Website, IIS Express Website, Attach to a running process
❇️ این قابلیت ها برای عیب یابی به شدت مفید هستند چون توی یه سیستم با تراکنش بالا که بعضی مشکلات رو نمیشه پیش بینی کرد با این به راحتی میشه متد ها و یا کوئری های سنگین و اضافه ای که باعث افت پرفرمنس میشه رو پیدا کرد
❇️ هر دو برنامه ANTS و dotTrace پولی بوده و جز بهترین و محبوبترین برنامه های Performance Profiler هستند.
برنامه dotTrace یکپارچگی خوبی با Resharper داره و Visual Studio داره ولی شخصا با توجه به تجربه کاری با جفتشون، برنامه ANTS رو بیشتر می پسندم؛ کارکردن باهاش راحته و UX خوبی داره گزارشات و خروجی کاربردی تری نشون میده
ANTS Performance Profiler overview (ویدئو دمو برنامه)
https://www.youtube.com/watch?v=8mhC-Ji6-uU
❇️ برنامه PerfView هم تقریبا همین قابلیت ها رو داره ولی کارکردن باهاش سخت تره و UX خوبی نداره ولی چون رایگانه محبوبه
برنامه CodeTrack هم قابلیت هاش (نسبت به قبلی ها) کمتره ولی کارکردن باهاش راحته و UX متوسطی داره ونیز رایگانه
❇️ یه قابلیت خوبی که فقط dotTrace داره قابلیت Remote Profiling هست که توسط اون میتونین به برنامه هاتون روی یه سرور Remote دیگه متصل بشین و پرفایلش کنین
#Performance
____________________
@DotNetZoom
در یکی از شرکت هایی که مشاور هستم از من خواسته شده تا مشکلات پرفرمنسی پروژه را پیدا کرده و مناسب ترین راه حل را به آنها پیشنهاد دهم
در هر پروژه ای احتمالا قسمت های زیادی قابل بهبود هستند (چه از لحاظ پرفرمنسی و چه از لحاظ معماری و کدنویسی تمیز و...) اما برای یافتن موثر ترین راه و البته کم هزینه ترین، باید ابتدا Bottleneck (گلوگاه) های سیستم را کشف کرده و سپس بر اساس «هزینه، زمان و منفعت» آنها را الویت بندی کنیم
برای کشف گلوگاه های سیستم (جاهایی که عامل اصلی افت پرفرمنس هستند) باید از ابزار های Profiler استفاده کنیم.
در کل پروفایلر های مختلفی وجود دارند که اکثرا پولی هستند در اینجا میخواهم بهترین آنها رو معرفی کنم
بهترین ابزار های Performance Profiler
1️⃣ برنامه ANTS Performance Profiler (محصول شرکت Redgate)
2️⃣ برنامه dotTrace (محصول شرکت JetBrains)
3️⃣ برنامه PerfView (محصولی "رایگان و سورس باز" از شرکت Microsoft)
4️⃣ برنامه CodeTrack (محصولی "رایگان و سورس باز")
هر چهار برنامه قابلیت های قوی و زیادی دارند از مهمترین شون میشه به موارد زیر اشاره کرد
🔸 قابلیت ثبت سلسله مراتب فراخوانی متد ها
توسط این قابلیت که اصلاحا بهش Call tree میگن میشه فهمید که چه متدی چه متد های دیگه ای رو فراخوانی کرده یا مثلا یک متد کلا چندبار صدا زده شده و هر متد چقدر به طول انجامیده (در قالب یک Timeline کامل) و ....
🔹 قابلیت ثبت تمام کوئری های اجرا شده بر روی دیتابیس
توسط این قابلیت میشه دید چه کوئری هایی و مثلا یک کوئری چندبار روی دیتابیس اجرا شده و هرکدوم چقدر زمان بره و...
🔸 قابلیت ثبت تمام Exception های رخ داده به همراه جزئیات و stacktrace
🔹 قابلیت نمایش تمام Thread های ایجاد شده و فرایند های انجام شده داخلش هر کدومشون و یا کلیه فرایند های انجام شده داخل یک Process
🔸 قابلیت پروفایل کردن همه برنامه ها از جمله
.NET Framework, .NET Core و ASP.NET, ASP.NET Core, Webservices, WCF, Windows Forms, Windows services, WPF ,IIS Website, IIS Express Website, Attach to a running process
❇️ این قابلیت ها برای عیب یابی به شدت مفید هستند چون توی یه سیستم با تراکنش بالا که بعضی مشکلات رو نمیشه پیش بینی کرد با این به راحتی میشه متد ها و یا کوئری های سنگین و اضافه ای که باعث افت پرفرمنس میشه رو پیدا کرد
❇️ هر دو برنامه ANTS و dotTrace پولی بوده و جز بهترین و محبوبترین برنامه های Performance Profiler هستند.
برنامه dotTrace یکپارچگی خوبی با Resharper داره و Visual Studio داره ولی شخصا با توجه به تجربه کاری با جفتشون، برنامه ANTS رو بیشتر می پسندم؛ کارکردن باهاش راحته و UX خوبی داره گزارشات و خروجی کاربردی تری نشون میده
ANTS Performance Profiler overview (ویدئو دمو برنامه)
https://www.youtube.com/watch?v=8mhC-Ji6-uU
❇️ برنامه PerfView هم تقریبا همین قابلیت ها رو داره ولی کارکردن باهاش سخت تره و UX خوبی نداره ولی چون رایگانه محبوبه
برنامه CodeTrack هم قابلیت هاش (نسبت به قبلی ها) کمتره ولی کارکردن باهاش راحته و UX متوسطی داره ونیز رایگانه
❇️ یه قابلیت خوبی که فقط dotTrace داره قابلیت Remote Profiling هست که توسط اون میتونین به برنامه هاتون روی یه سرور Remote دیگه متصل بشین و پرفایلش کنین
#Performance
____________________
@DotNetZoom
YouTube
ANTS Performance Profiler Overview | Redgate
ANTS Performance Profiler is a .NET profiler for desktop, ASP.NET, and ASP.NET MVC applications. Use ANTS Performance Profiler to profile your SQL
queries and see execution plans, find performance bottlenecks fast, get rich performance data, explore unfamiliar…
queries and see execution plans, find performance bottlenecks fast, get rich performance data, explore unfamiliar…
⁉️ خیلی ها سوال میپرسن بهترین شرکت هاستیگ توی ایران چیه
شخصا اطلاعات مستند، دقیق و کاملی ندارم توی این زمینه ولی براساس تجربه و یه سری مطالعات و نظر بعضی از دوستان، اینا نظرات شخصیم هست
🔰اینا بهترین های ایران هستند (ترتیب خاصی وجود نداره، همشون تو یه مایه اند)
▪️https://mihanwebhost.com/ (میهن وب هاست)
🔸میهن وب هاست قیمتاش نسبتا خوبه و واسه شروع گزینه خوبیه ولی سرور هاشون خیلی قوی نیست و بهتره وقتی سایتتون پر بازدید شد برین رو یه هاستینگ دیگه
▪️https://www.iranserver.com/ (ایران سرور)
🔹ایران سرور قیمتاش کمی بالاست ولی سروراش قویه
▪️https://pars.host/ (سرور پارس)
▪️https://parspack.com/ (پارس پک)
▪️https://iranhost.com/ (ایران هاست)
▪️https://hostiran.net/ (هاست ایران)
▪️https://hostdl.com/ (هاست دی ال)
🔸هاست دی ال تقریبا قوی ترین سرور ها رو داره ولی خیلی گرونه
🔰اینا هم معروفن ولی فک نکنم به پای بالایی ها برسن
▪️نتافراز
▪️آبتین وب
▪️وبرمز
▪️برتینا
▪️هاستنگار
▪️سون هاست
▪️میزبان فا
▪️رادکام
🔰خداروشکر تعداد اعضامون به قدری زیاد هست که بتونیم با یه نظر سنجی به دیتای نسبتا معتبری برسیم، پس به زودی یه نظر سنجی هم میذارم ببینیم انتخاب دوستان کدومه
____________________
@DotNetZoom
شخصا اطلاعات مستند، دقیق و کاملی ندارم توی این زمینه ولی براساس تجربه و یه سری مطالعات و نظر بعضی از دوستان، اینا نظرات شخصیم هست
🔰اینا بهترین های ایران هستند (ترتیب خاصی وجود نداره، همشون تو یه مایه اند)
▪️https://mihanwebhost.com/ (میهن وب هاست)
🔸میهن وب هاست قیمتاش نسبتا خوبه و واسه شروع گزینه خوبیه ولی سرور هاشون خیلی قوی نیست و بهتره وقتی سایتتون پر بازدید شد برین رو یه هاستینگ دیگه
▪️https://www.iranserver.com/ (ایران سرور)
🔹ایران سرور قیمتاش کمی بالاست ولی سروراش قویه
▪️https://pars.host/ (سرور پارس)
▪️https://parspack.com/ (پارس پک)
▪️https://iranhost.com/ (ایران هاست)
▪️https://hostiran.net/ (هاست ایران)
▪️https://hostdl.com/ (هاست دی ال)
🔸هاست دی ال تقریبا قوی ترین سرور ها رو داره ولی خیلی گرونه
🔰اینا هم معروفن ولی فک نکنم به پای بالایی ها برسن
▪️نتافراز
▪️آبتین وب
▪️وبرمز
▪️برتینا
▪️هاستنگار
▪️سون هاست
▪️میزبان فا
▪️رادکام
🔰خداروشکر تعداد اعضامون به قدری زیاد هست که بتونیم با یه نظر سنجی به دیتای نسبتا معتبری برسیم، پس به زودی یه نظر سنجی هم میذارم ببینیم انتخاب دوستان کدومه
____________________
@DotNetZoom
میهن وب هاست
خرید هاست ابری ,خرید دامنه,خرید سرور | میهن وب هاست
خرید هاست لینوکس, هاست ایران و خارج, خرید server ، سرور و هاست لینوکس، سرور و هاست ویندوز، هاست وردپرس، انتقال، تمدید و ثبت دامنه را با هاستینگ میهن وب هاست تجربه کنید.