مایکروسافت و Uno پلتفرم SkiaSharp 4 را منتشر کردند

مایکروسافت و پروژه Uno اولین نسخه‌های پایدار شاخهٔ SkiaSharp 4 را منتشر کردند — نسخه‌های 4.148.0 و 4.150.0 — و شاخهٔ پیش‌انتشار 4.151.0 نیز برای نمایش الگوی جدید هماهنگ‌سازی نسخه‌ها با مایل‌استون‌های بالادست Skia در دسترس قرار گرفت.

مهم‌ترین تغییرات در هر انتشار

SkiaSharp 4.148.0 — انتقال به Skia m148

  • موتور همراه به Skia m148 ارتقا یافت.
  • پشتیبانی از کنترل محورهای فونت متغیر (OpenType)، انتخاب پالت فونت‌های رنگی و کدگذاری WebP متحرک از طریق SKWebpEncoder اضافه شد.
  • APIهای بدون‌کپی برای جریان‌ها و شکل‌دهی متن معرفی شدند و چرخهٔ عمر اشیاء بومی مشترک بازطراحی شد تا خطاهای use-after-free کاهش یابد.

SkiaSharp 4.150.0 — به‌روزرسانی به Skia m150 و ابزارهای تشخیصی

  • موتور به Skia m150 ارتقا یافت و APIهای تشخیصی و فیلترینگ جدید افزوده شد.
  • SKPaint.GetFastBounds() برای تعیین مرز محافظه‌کارانه در حذف دیدپذیری (visibility culling) اضافه شد.
  • SKImageFilter.CreateCrop() و CreateEmpty() برای برش و درج مراحل شفاف no-op در زنجیرهٔ فیلترها فراهم شدند.
  • SKColorFilter.CreateOverdraw() برای نمایش نقاط داغ رندر معرفی شد و wrapper مربوط به SKSurface.Canvas کش شد تا تخصیص‌های مدیریتی مکرر در حلقه‌های رندر کاهش یابد.
نمونه رندر SkiaSharp و ابزارهای تشخیصی

SkiaSharp 4.151.0 (پیش‌انتشار) — تمرکز بر عملکرد کد مدیریت‌شده

  • انتقال به Skia m151 و بهینه‌سازی مسیرهای پرتکرار: تبدیل رنگ، پیش‌ضرب، پارس تگ‌ها و مسیرهای پرکار با جایگزینی فراخوانی‌های مکرر P/Invoke به عملیات مدیریت‌شده بهتر شده‌اند.
  • هارف‌بز (HarfBuzz) رمزگذاری UTF-8 را با بافرهای استخرشده انجام می‌دهد و SKShaper گلیف‌ها را از طریق spanهای بدون‌کپی عرضه می‌کند.
  • بارگذاری‌های بدون تخصیص با استفاده از ReadOnlySpan برای پارس رنگ‌های هگزادسیمال اضافه شده‌اند.
  • کتابخانه‌های Emscripten 5.0.6 برای پشتیبانی از مدل مدیریت استثنای exnref در WebAssembly/.NET 11 گنجانده شدند و چند اشکال بومی و رگرسیون CPU رفع شده‌اند.

نتایج اولیه عملکرد و محدودیت‌ها

در آزمایش‌های اولیهٔ مایکروسافت روی رندرهای مبتنی بر GPU که سایه‌ها و لایه‌ها غالب بودند، تا 24% بهبود مشاهده شد. در یک سناریوی آزمایشی، شیدرهای نویز Perlin مبتنی بر CPU حدود 6 برابر سریع‌تر اجرا شدند. این بهبودها وابسته به سخت‌افزار و درایورها هستند؛ صحنه‌هایی که محورشان متن، نمودار یا نقشه‌های وکتوری است تغییر قابل‌توجهی نشان ندادند.

تغییرات ناسازگار و نکات مهاجرت

  • SkiaSharp 4 ارتقای شکستن‌ساز نسبت به شاخهٔ 3 است: اعضای منسوخ‌شدهٔ متن و فونت در SKPaint اکنون خطای زمان کامپایل تولید می‌کنند و باید به SKFont منتقل شوند.
  • یک SKFont بدون پارامتر اکنون از SKTypeface.Empty استفاده می‌کند؛ تا زمانی که تایپ‌فیس صریحاً تخصیص نیابد، اندازه‌گیری یا رندر متن انجام نمی‌شود.
  • نسخهٔ 4.150.0 بستهٔ ادغام با .NET Interactive و Polyglot Notebooks را حذف کرد؛ نمونه‌ها و گردش‌های کاری متکی بر این بسته‌ها باید بازبینی شوند.

راهنمای سریع مهاجرت

  • لیست توابع منسوخ را بررسی و استفاده از SKPaint برای تنظیمات فونت را به SKFont منتقل کنید.
  • در مسیرهای بحرانی رندر، تست‌های عملکردی روی سخت‌افزار هدف اجرا کنید تا رفتار درایورها مشخص شود.
  • در پروژه‌هایی که به .NET Interactive یا Polyglot Notebooks وابسته‌اند، نمونه‌ها را بازنویسی یا جایگزین کنید.

چرخه انتشار هم‌زمان با مایل‌استون‌های Skia

این حرکت از m148 به m150 و m151 نشان می‌دهد که هماهنگ‌سازی با مایل‌استون‌های Skia در دستور کار قرار دارد. هدف تیم این است که بسته‌های پایدار با نسخه‌هایی هماهنگ شوند که در کانال‌های Chrome Stable و Extended Stable استفاده می‌شوند، در حالی که پیش‌انتشارها نزدیک به مسیر Chrome Beta نگه داشته شوند؛ الگوی منظم‌تر انتشار باعث افزایش پیش‌بینی‌پذیری و همگرایی با اکوسیستم مرورگر می‌شود.

منابع و دانلود

پکیج‌های SkiaSharp در NuGet قابل دسترسی هستند و کد منبع و یادداشت‌های رسمی انتشار در مخزن SkiaSharp در GitHub منتشر شده‌اند. برای نمونه‌ها و راهنمای مهاجرت می‌توان از گالری تعاملی و مستندات رسمی استفاده کرد.

نکات عملی برای توسعه‌دهندگان

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