همهی راهنماها
راهنمایی با این جستوجو پیدا نشد.
بنچمارک
یک ریزبنچمارک کوچک از RTLY-Kit در برابر morilog/jalali، با روش کامل، نکتهها و یک دستور برای تکرار آن روی ماشین خودتان.
در این صفحه
خوب است بدانید. اینها ریزبنچمارکِ سه سناریوی کوچکاند که یک بار روی یک ماشین اجرا شدهاند. هزینهٔ نسبی را برای همین کار نشان میدهند و حکم کلی نیستند. پیش از نقل هر عدد، خودتان با دستور پایین دوباره اجرا کنید.
چه چیزی مقایسه شده
بستهٔ morilog/jalali (opens in a new tab) نسخهٔ 3.5.0 (پرکاربردترین بستهٔ جلالی) در برابر RTLY-Kit، روی سه کار:
| سناریو | RTLY-Kit | morilog/jalali |
|---|---|---|
رشتهٔ میلادی به جلالی Y/m/d | Jalali::make('2025-03-21')->format('Y/m/d') | Jalalian::fromDateTime('2025-03-21')->format('Y/m/d') |
جلالی y/m/d به میلادی Y-m-d | Jalali::create(1404, m, d)->toGregorian()->format('Y-m-d') | (new Jalalian(1404, m, d))->toCarbon()->format('Y-m-d') |
addDays و بعد قالببندی | Jalali::create(1404, 1, 1)->addDays(n)->format('Y/m/d') | (new Jalalian(1404, 1, 1))->addDays(n)->format('Y/m/d') |
سمت RTLY-Kit هر سناریو، همانطور که در برنامه مینویسید:
<?php
require __DIR__.'/vendor/autoload.php';
use RtlyKit\Calendar\Jalali;
echo Jalali::make('2025-03-21')->format('Y/m/d'), "\n"; // 1404/01/01
echo Jalali::create(1404, 1, 1)->toGregorian()->format('Y-m-d'), "\n"; // 2025-03-21
echo Jalali::create(1404, 1, 1)->addDays(100)->format('Y/m/d'), "\n"; // 1404/04/08نتیجهها
یک اجرا، میانهٔ ۵ تکرار که هر کدام ۲۰٬۰۰۰ دور حلقه دارد. محیط: PHP 8.2.30 در CLI داخل Docker روی ویندوز ۱۱، با opcache.enable_cli=1.
| سناریو | RTLY-Kit (µs/op) | morilog/jalali (µs/op) | نسبت |
|---|---|---|---|
رشتهٔ میلادی به جلالی Y/m/d | 13.33 | 153.84 | 11.5x |
جلالی y/m/d به میلادی Y-m-d | 12.80 | 58.55 | 4.6x |
addDays + قالببندی | 33.18 | 479.04 | 14.4x |
بیشترین حافظهٔ کل فرایند، با بارگذاری هر دو کتابخانه، ۴ مگابایت (MiB) بود.
یک اجرای قبلی، بدون opcache و با ترکیب دیگری از سناریوها، فاصلهٔ بیشتری نشان داد (حدود ۲۵ برابر). این تفاوت نشان میدهد نسبت به سناریو و تنظیمات PHP بستگی دارد.
مقایسهٔ درستی
برای تکتک روزها از 1900-01-01 تا 2099-12-27 (۷۳٬۰۰۰ روز پشتهم)، تاریخ جلالی RTLY-Kit با نتیجهٔ CalendarUtils::toJalali در morilog یکی است و هیچ اختلافی نیست. هر دو از قاعدهٔ حسابی کبیسهٔ ۳۳ ساله استفاده میکنند، پس این مقایسه نشان میدهد این دو با هم میخوانند. برای تطابق با تقویم رسمی، دقت و داده را ببینید.
چرا فرق دارند؟
این را پروفایل نکردهایم، پس موارد زیر محتملاند و ثابتشده نیستند. RTLY-Kit یک DateTimeImmutable ساده را میپوشاند و با حساب عدد صحیح تبدیل میکند. morilog شیءهای Carbon میسازد و تغییر میدهد که خیلی بزرگترند (کد پارس و زبان محلی). پس بخشی از فاصله از انتخاب معماری میآید، نه فقط الگوریتم تبدیل. اگر همهجا از Carbon استفاده میکنید، فاصلهای که برای شما مهم است شاید کمتر باشد.
تکرار آزمایش
بنچمارک در مخزن، در پوشهٔ tools/benchmark است. composer.json آن RTLY-Kit را از درخت کاری نصب میکند و morilog/jalali را در پوشهٔ vendor/ خودش (که جزو بسته نیست). اسکریپت نسخهٔ PHP، تنظیمات opcache و JIT و میانهٔ تکرارها را چاپ میکند.
docker compose -f tools/docker-compose.yml run --rm php sh -c 'cd tools/benchmark && composer install -n && php -d opcache.enable_cli=1 run.php 20000 5'عددهای ماشینهای مختلف با هم قابل مقایسه نیستند.
این بنچمارک چه چیزی را نمیپوشاند
- فقط سه سناریو. کار سنگین قالببندی، پارس یا آرایههای بزرگ در آن نیست.
- یک ماشین و یک ساخت PHP. Docker روی ویندوز نویز اضافه میکند.
- حافظهٔ هر شیء اندازهگیری نشده، فقط بیشترین حافظهٔ کل.
- فقط morilog/jalali سنجیده شد، نه بستههای دیگر.
این صفحه مفید بود؟