استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
i18next مقابل Intlayer | اختبار أداء تدويل (i18n) تطبيقات React و Next.js
يُعد i18next إطار عمل التدويل (i18n) الأكثر استخداما في بيئة عمل JavaScript. فمن خلال react-i18next و next-i18next، يدعم شريحة ضخمة من تطبيقات React و Next.js. في المقابل، يمثل Intlayer بديلا حديثا قائما على المترجم (Compiler) ونطاق المكونات (Component-scoped).
تقارن هذه المقالة بينهما بناء على قياسات واقعية بدلا من مجرد سرد الميزات. الأرقام مأخوذة من Benchmark Bloom، وهي حزمة اختبارات مفتوحة المصدر تبني نفس التطبيق باستخدام كل مكتبة وتسجل ما يقوم المتصفح بتنزيله بالفعل.
ملخص سريع (tl;dr): يُعدi18nextأثقل بيئة تشغيل (runtime) في اختبار الأداء: يضيف +77 كيلوبايت gzip لكل صفحة في Next.js في الإعداد الأولي البسيط، و +22 كيلوبايت حتى بعد التحسين الكامل لنطاقات الأسماء والتحميل الكسول (Lazy-loading). بينما يضيف Intlayer ما مقداره +0.3 كيلوبايت فقط. جميع إعداداتi18nextباستثناء الإعداد المعزول تماما (scoped) تقوم بإرسال نحو 90% من نصوص الصفحات غير المعروضة؛ بينما يرسل Intlayer نسبة 0% بشكل افتراضي. استغرق تبديل اللغة مع خلفية محملة كسولا 123-185 مللي ثانية معreact-i18nextمقابل 3-4 مللي ثانية مع Intlayer. محول التوافق@intlayer/next-i18nextيحتفظ بنفس واجهة برمجة تطبيقاتi18nextوخفض الحجم إلى 150.7 كيلوبايت لكل صفحة مقارنة بـ 218.5 كيلوبايت للأصل.
باختصار
- i18next / react-i18next / next-i18next - ناضج، غني بالإضافات، ومستقل عن أطر العمل. يوفر مساحات الأسماء (Namespaces)، مكتشفات اللغة، الخلفيات، دعم ICU عبر الإضافات، ومكون
<Trans>للمحتوى المنسق. يتم تجميع المحتوى مركزيا فيlocales/{lng}/{ns}.json. إنه قوي للغاية، لكن كل تحسين (تقسيم مساحات الأسماء، التحميل لكل صفحة، أمان الأنواع) هو إعداد يقع عبء كتابته وصيانته عليك. - Intlayer - نموذج محتوى يتمحور حول المكونات. توضع قواميس
.content.tsبجوار المكون الذي تخدمه مباشرة، ويقوم المترجم في وقت البناء بتطبيق تقنية Tree-shaking والتحميل الكسول لكل مكون ولكل لغة، مع توليد أنواع TypeScript صارمة تلقائيا من محتواك، وفشل عملية البناء عند وجود ترجمات مفقودة. يوفر وسائط برمجية (middleware)، ومساعدات SEO، ومحررا مرئيا / CMS، وترجمة مدعومة بالذكاء الاصطناعي.
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
يتم تحديث الشارات تلقائيا. قد تختلف الأرقام بمرور الوقت.
مقارنة الميزات جنبا إلى جنب
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| الميزة | Intlayer (react-intlayer / next-intlayer) | i18next (react-i18next / next-i18next) |
|---|---|---|
| وضع الترجمات بجوار المكونات | ✅ نعم، ملف .content.ts مجاور لكل مكون | ❌ لا، تجميع مركزي في locales/{lng}/{ns}.json |
| التكامل مع TypeScript | ✅ توليد تلقائي لأنواع صارمة استنادا إلى المحتوى | ⚠️ أساسي؛ تتطلب المفاتيح الصارمة توسيع CustomTypeOptions وتحديد الأنواع يدويا |
| اكتشاف الترجمات المفقودة | ✅ خطأ TypeScript + خطأ/تحذير أثناء البناء | ⚠️ احتياطي وقت التشغيل (saveMissing، إرجاع المفتاح نفسه) |
| المحتوى المنسق (JSX / Markdown / مكونات) | ✅ دعم مباشر أصيل | ⚠️ عبر مكون <Trans> مع عناصر نائبة مفهرسة |
| دعم صيغ ICU | ⚠️ قيد التطوير | ⚠️ عبر إضافة (i18next-icu) |
| الجموع (Pluralization) | ✅ أنماط معتمدة على التعداد (Enumeration) | ✅ لواحق _one / _other (باستخدام Intl.PluralRules) |
| التنسيق (التواريخ، الأرقام، العملات) | ✅ useNumber، useDate، إلخ (تعتمد على Intl داخليا) | ⚠️ منسقات الاستيفاء (Interpolation) أو استدعاء Intl.* يدويا |
| التوجيه المترجم والوسائط البرمجية | ✅ وكيل ووسيط برمجي مدمج، مع دالة getMultilingualUrls | ⚠️ غير مدمج؛ يتطلب وسيطا برمجيا مخصصا أو حزما خارجية |
| مساعدات SEO (hreflang، sitemap، robots) | ✅ مساعدات مدمجة وجاهزة | ❌ إعداد يدوي بالكامل |
| مكونات الخادم المتزامنة (Server Components) | ✅ تعمل useIntlayer من next-intlayer/server في أي مكون خادم فرعي مباشرة | ⚠️ استدعاء getFixedT في الصفحة ثم تمرير t عبر Props |
| Tree-shaking (شحن المحتوى المستخدم فقط) | ✅ لكل مكون ولكل لغة تلقائيا بواسطة المترجم | ⚠️ يدوي: مساحات أسماء + قائمة ns لكل صفحة + خلفية برمجية |
| التحميل الكسول (Lazy loading) | ✅ importMode: 'dynamic' (سطر إعداد واحد) | ✅ عبر إضافات الخلفيات البرمجية (i18next-resources-to-backend وغيرها) |
| تنظيف المحتوى غير المستخدم (Purge) | ✅ حذف القواميس المهملة تلقائيا أثناء البناء | ❌ غير مدعوم افتراضيا |
| اختبار الترجمات المفقودة (CLI / CI) | ✅ npx intlayer content test | ⚠️ عبر أداة i18next-parser أو أدوات خارجية |
| الترجمة بالذكاء الاصطناعي | ✅ مدمجة، وتستخدم مفاتيح مزود الخدمة الخاصة بك | ❌ لا (Locize هي خدمة مدفوعة منفصلة) |
| محرر مرئي / CMS | ✅ محرر مرئي مجاني + نظام إدارة محتوى (CMS) اختياري | ❌ لا (تتطلب Locize أو منصات خارجية) |
| خادم MCP ومهارات الوكلاء (Agent Skills) | ✅ متوفر | ❌ غير متوفر |
| النظام البيئي والمجتمع | ⚠️ أحدث ولكنه ينمو بسرعة فائقة | ✅ الأكبر والأكثر نضجا وتجربة |
اختبار الأداء (Benchmark)
ما تم قياسه
تقوم حزمة Benchmark Bloom ببناء نفس التطبيق تماما باستخدام كل مكتبة: 10 صفحات (الرئيسية، عن الموقع، المدونة، الوظائف، التواصل، الأسئلة الشائعة، الأسعار، المنتجات، الإعدادات، الفريق)، 10 لغات (en, fr, es, de, it, pt, zh, ja, ko, ru)، ومكونات ومحتوى متطابق تماما. يتم قياس الصفحات باللغتين الإنجليزية والفرنسية. تم اختبار كل مكتبة عبر أربع استراتيجيات تحميل:
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| الاستراتيجية | الوصف | من يستخدمها عادة |
|---|---|---|
| static | تجميع كل اللغات والصفحات معا في حزمة واحدة (تضمين resources مباشرة في init()) | النماذج الأولية السريعة، الأكواد المولدة بالـ AI |
| dynamic | تحميل اللغة النشطة فقط عبر خلفية برمجية، مع تحميل جميع مساحات الأسماء دفعة واحدة | أغلب المشاريع العامة |
| scoped-static | مساحة أسماء واحدة لكل مسار، مع تضمين الكل مسبقا في الحزمة | حالات نادرة |
| scoped-dynamic | مساحة أسماء لكل مسار + تحميل كسول عبر خلفية برمجية. الصفحة الحالية واللغة الحالية فقط | التطبيقات ذات الميزانيات الصارمة في الأداء |
لا يمتلك Intlayer خيارا باسم "scoped": لأن المترجم يحدد نطاق المحتوى لكل مكون على حدة تلقائيا، وبالتالي فإن سطري static و dynamic معزولان ومحسنان بالفعل.
تسجل حزمة الاختبارات لكل عملية بناء المقاييس التالية:
- Lib size: حجم gzip لمكون فارغ يستورد مكتبة التدويل فقط، وهو ما يمثل التكلفة الثابتة لبيئة التشغيل.
- Page JS: حجم JavaScript بصيغة gzip الذي يتم تنزيله لكل صفحة، كمتوسط عبر جميع الصفحات واللغات.
- Locale leak %: نسبة النصوص المترجمة في كود JS التي تنتمي إلى لغة لا يعرضها المستخدم حاليا.
- Page leak %: نسبة النصوص المترجمة في كود JS التي تنتمي إلى صفحة لا يتواجد فيها المستخدم.
- Component avg: متوسط حجم gzip لكل مكون عند تجميعه بشكل معزول.
- E2E reactivity: الوقت الفعلي المستغرق بين اختيار لغة جديدة وتحديث
html[lang]في DOM (باستخدام Playwright عبر 5 تكرارات). - Hydration: مدة مرحلة إماهة (Hydration) مكونات React.
الأرقام الواردة أدناه تعود لتشغيل الاختبار بتاريخ 2026-09-12 باستخدامnext-i18next16.3.0،react-i18next17.0.13، وintlayer9.5.1. التطبيق التجريبي صغير عمدا، لذا فإن نسب التسرب تعبر عن نمط هيكلي: فهي تكبر طرديا مع تزايد المحتوى بينما تظل تكلفة بيئة التشغيل ثابتة.
النتائج على Next.js (next-i18next)
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| المكتبة | الاستراتيجية | حجم المكتبة (gz) | متوسط JS للصفحة (gz) | تسرب اللغات | تسرب الصفحات | متوسط حجم المكون (gz) | سرعة الاستجابة E2E | مدة الإماهة (Hydration) |
|---|---|---|---|---|---|---|---|---|
| base (بدون i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
next-i18next | static | 19.7 KB | 218.5 KB | 0.0% | 89.8% | 78.5 KB | 16.4 ms | 15.6 ms |
next-i18next | dynamic | 19.7 KB | 169.5 KB | 50.0% | 89.8% | 26.1 KB | 15.4 ms | 27.7 ms |
next-i18next | scoped-static | 19.7 KB | 220.1 KB | 0.0% | 89.8% | 78.9 KB | 16.4 ms | 14.7 ms |
next-i18next | scoped-dynamic | 19.7 KB | 163.4 KB | 0.0% | 0.0% | 27.1 KB | 15.9 ms | 15.1 ms |
next-intlayer | static | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 8.5 KB | 15.5 ms | 16.9 ms |
next-intlayer | dynamic | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 6.9 KB | 15.3 ms | 15.9 ms |
@intlayer/next-i18next (توافقي) | static | 9.4 KB | 150.7 KB | 0.0% | 0.0% | 9.7 KB | 10.7 ms | 11.3 ms |
@intlayer/next-i18next (توافقي) | dynamic | 9.4 KB | 150.7 KB | 0.0% | 0.0% | 9.7 KB | 11.9 ms | 10.6 ms |
قراءة النتائج وتحليلها
- تكلفة بيئة التشغيل: يُعد نواة
i18nextمعreact-i18nextأثقل بيئة تشغيل تم قياسها: 19.7 كيلوبايت gzip لمكون فارغ، مقارنة بـ 5.5 كيلوبايت لـnext-intlayer. - الإعداد البسيط عالي التكلفة: تضمين
resourcesمباشرة داخلinit()يولد 218.5 كيلوبايت لكل صفحة، أي زيادة قدرها +77.5 كيلوبايت مقارنة بالتطبيق الأساسي. حيث تحمل كل صفحة كل مساحات الأسماء بلا استثناء. - التحسين اليدوي عملية معقدة: التحول إلى خلفية برمجية (
dynamic) يوفر 49 كيلوبايت لكنه لا يزال يسرب 90% من نصوص الصفحات الأخرى، ونصف النصوص المحملة تخص لغة أخرى. بينما يؤدي تقسيم مساحات الأسماء لكل مسار (scoped-dynamic) إلى إيقاف التسرب والوصول إلى 163.4 كيلوبايت، لكنه يظل أكبر بمقدار +22.4 كيلوبايت لكل صفحة مقارنة بـ Intlayer الذي سجل 141.3 كيلوبايت دون الحاجة لأي إعدادات يدوية معقدة. - حجم المكون الفردي: المكون الذي يستدعي
useTranslation()يتراوح حجمه بين 26 و 79 كيلوبايت؛ بينما يبلغ حجم نفس المكون معuseIntlayer()ما يعادل 6.9 كيلوبايت فقط. - تباطؤ الإماهة: يقفز زمن الإماهة إلى 27.7 مللي ثانية في إعداد
dynamic، نظرا لأن نسخة i18next تبدأ العمل وتعالج طلبات الخلفية على العميل قبل أن يتمكن React من إتمام عملية الإماهة.
النتائج على TanStack Start (react-i18next)
نفس التطبيق التجريبي على TanStack Start مع استخدام react-i18next الصافي لإبعاد التأثيرات الخاصة بـ Next.js.
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| المكتبة | الاستراتيجية | حجم المكتبة (gz) | متوسط JS للصفحة (gz) | تسرب اللغات | تسرب الصفحات | متوسط حجم المكون (gz) | سرعة الاستجابة E2E | مدة الإماهة (Hydration) |
|---|---|---|---|---|---|---|---|---|
| base (بدون i18n) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms | 21.6 ms |
react-i18next | static | 18.4 KB | 180.3 KB | 50.0% | 89.8% | 24.3 KB | 12.9 ms | 85.1 ms |
react-i18next | dynamic | 18.4 KB | 136.4 KB | 23.1% | 89.8% | 24.8 KB | 123.1 ms | 32.9 ms |
react-i18next | scoped-static | 18.4 KB | 184.2 KB | 50.7% | 89.8% | 25.3 KB | 185.1 ms | 25.2 ms |
react-i18next | scoped-dynamic | 18.4 KB | 127.2 KB | 0.0% | 0.0% | 26.7 KB | 17.6 ms | 11.3 ms |
intlayer | static | 5.0 KB | 125.8 KB | 50.0% | 0.0% | 8.1 KB | 3.2 ms | 11.5 ms |
intlayer | dynamic | 5.0 KB | 118.6 KB | 0.0% | 0.0% | 6.3 KB | 3.6 ms | 14.1 ms |
قراءة النتائج وتحليلها
- يشحن تطبيق
react-i18nextغير المحسن زيادة قدرها +69 كيلوبايت لكل صفحة مقارنة بالتطبيق الأساسي، وتستغرق الإماهة 85 مللي ثانية (أربعة أضعاف الأساس) لأن شجرة الموارد الكاملة يتم فحصها وتسجيلها على العميل قبل العرض الأولي. - تأخر التحميل الكسول عند تبديل اللغة: عند تحميل الموارد عند الطلب عبر خلفية برمجية، يتطلب تبديل اللغة رحلة شبكة كاملة قبل أن يتم تحديث
html[lang]: 123 مللي ثانية فيdynamic، و 185 مللي ثانية فيscoped-static. في المقابل، يقوم Intlayer بتحديث شجرة DOM في غضون 3-4 مللي ثانية في كلا الوضعين وبشكل فوري دون التعطل في انتظار استجابة الشبكة. - التكوين عالي التحسين
scoped-dynamicيصل إلى 0% تسرب عند 127.2 كيلوبايت، ولكنه لا يزال أكبر بمقدار +8.6 كيلوبايت مقارنة بـ Intlayer في وضعdynamic، وتطلب لتحقيق ذلك خريطة مسارات وخلفيات موارد وحدود Suspense خاصة. - يسجل وضع
staticفي Intlayer نسبة 0% تسرب للصفحات افتراضيا لأن القواميس التي تستوردها مكونات الصفحة فقط هي التي تُحزم في الكود. وتفعيلimportMode: 'dynamic'يزيل تسرب اللغات أيضا. - حجم المكونات: 24-27 كيلوبايت مع
react-i18nextمقابل 6-8 كيلوبايت مع Intlayer. حيث يربطuseTranslation()كل مكون بالنسخة العالمية لـ i18next.
ما سبب هذا الفارق؟ النسخة العالمية مقابل القواميس المترجمة
صُمم i18next في عام 2012 كبيئة تشغيل (runtime): تحتفظ نسخة عالمية واحدة بمخزن الموارد، وتتولى الإضافات توسيعها، بينما تبحث دالة t() عن المفاتيح أثناء العرض. هذه البنية تمنحه مرونة واسعة ولكنها تفرض تكلفة باهظة في الحجم:
نسخ الكود إلى الحافظة
لا يمكن للنسخة العالمية التنبؤ بالمفاتيح التي سيطلبها المكون، لذا تضطر لتحميل جميع مساحات الأسماء التي تحددها لها. والتحسين يفرض عليك أنت تقسيم الملفات، وأنت تحديد مساحات الأسماء لكل صفحة، وأنت الحفاظ على دقة هذه القائمة كلما تم نقل المكونات. وكما توضح ملاحظات الاختبار: "الحفاظ على أمان الأنواع ومعرفة أي مساحة أسماء يجب تضمينها في كل صفحة يعد كابوسا حقيقيا".
يتخلص Intlayer من النسخة العالمية تماما. يُعلن المحتوى بجوار المكون مباشرة، ويقوم المترجم بحل مخطط الاعتماديات في وقت البناء:
نسخ الكود إلى الحافظة
يتعرف @intlayer/swc / @intlayer/babel على المكون والقاموس الذي يستورده، فيحزم هذين فقط، وللغة النشطة فقط، ويتخلص من أي محتوى لا تتم الإشارة إليه. يصبح نمط "scoped-dynamic" نتاجا تلقائيا لعملية البناء بدلا من كونه عبئا تنظيميا يديره الفريق يدويا.
للحصول على أرقام سطرdynamic، اضبطdictionary.importMode: 'dynamic'فيintlayer.config.ts. راجع دليل تحسين الحزمة.
تجربة المطور (DX)
الإعداد
next-i18next (App Router)
نسخ الكود إلى الحافظة
بالإضافة إلى كتابة I18nProvider لجانب العميل يعيد بناء نفس النسخة، مع إعداد generateStaticParams وتحديد مصفوفة namespaces في كل صفحة.
Intlayer
نسخ الكود إلى الحافظة
نسخ الكود إلى الحافظة
مكون العميل
react-i18next
نسخ الكود إلى الحافظة
نسخ الكود إلى الحافظة
الصفحة التي تعرض هذا المكون ملزمة بتحميل مساحة أسماءabout، ودالةt("counter.label")تبقى نصا عاديا مجردا من أنواع التحقق ما لم تقم بتوسيعCustomTypeOptions.
Intlayer
نسخ الكود إلى الحافظة
نسخ الكود إلى الحافظة
يتمتع كل من label و increment بأنواع TypeScript صارمة ودقيقة؛ أي خطأ كتابي يظهر فورا كخطأ برمجي، والترجمة المفقودة تتسبب في إيقاف عملية البناء وتنبيهك فوريا.
مكون الخادم المتزامن
next-i18next
نسخ الكود إلى الحافظة
يجب أن تستدعي الصفحة دالة i18n.getFixedT(locale, "about") وتقوم بتمرير t و locale عبر الخصائص (Props).
Intlayer
نسخ الكود إلى الحافظة
احتفظ بواجهة i18next، واحصل على أداء Intlayer العالي
لست بحاجة إلى إعادة كتابة مكوناتك للحصول على نتائج الأداء المذكورة أعلاه. محولات التوافق @intlayer/i18next، @intlayer/react-i18next، و @intlayer/next-i18next جاهزة للعمل كبديل فوري: useTranslation، t()، <Trans>، صيغ الجمع، ولواحق السياق تواصل العمل بسلاسة، بينما يقدم المترجم قواميس Intlayer المحسنة في الخلفية.
نسخ الكود إلى الحافظة
نسخ الكود إلى الحافظة
في اختبار الأداء، انخفض بناء التوافق لنفس تطبيق Next.js من 218.5 كيلوبايت إلى 150.7 كيلوبايت لكل صفحة، ومن 78.5 كيلوبايت إلى 9.7 كيلوبايت لكل مكون، ومن ~90% تسرب للصفحات إلى 0%، مع تحسن وقت الإماهة من 15.6 مللي ثانية إلى 11.3 مللي ثانية، دون أي تعديل في كود المكونات. ويمكن لملفات locales/{lng}/{ns}.json الحالية أن تظل المصدر الرئيسي للبيانات عبر إضافة مزامنة JSON.
راجع أدلة الترحيل: i18next، react-i18next، next-i18next.
متى تختار كل منهما؟
- اختر i18next: إذا كنت بحاجة حتمية إلى نظامه البيئي من الإضافات (مكتشفات محددة، خلفيات خاصة، ICU، Locize)، أو تقوم بالتدويل خارج بيئة React أيضا (خدمات Node، جافاسكريبت نقية، أطر عمل أخرى)، أو كان فريقك يتقنه بالفعل، أو كانت منصة الترجمة تتطلب ملفات
locales/{lng}/{ns}.json. ولكن خصص وقتا كافيا لإدارة مساحات الأسماء والخلفيات البرمجية ومطابقة المسارات إذا كان الأداء يهمك. - اختر Intlayer: إذا كنت تريد محتوى مرتبطا بالمكونات، وأنواع TypeScript صارمة، واكتشاف الأخطاء والترجمات الناقصة وقت البناء، وتحسينا تلقائيا للحزم والتحميل الكسول دون تعقيدات، مع تبديل لغات فوري، ومكونات خادم متزامنة، وأدوات تحرير مدمجة (محرر مرئي، CMS، ترجمة بالذكاء الاصطناعي، خادم MCP). وهو ملائم بامتياز لقواعد الأكواد المعيارية وأنظمة التصميم (Design Systems).
- اختر محولات
@intlayer/*-i18next: إذا كان لديك تطبيق يعمل بالفعل على i18next وتريد جني فوائد تقليص الحجم وسرعة الاستجابة دون إعادة كتابة الأكواد.
مقارنات ذات صلة
- next-intl مقابل Intlayer (نفس اختبار الأداء)
- Lingui مقابل Intlayer (نفس اختبار الأداء)
- اختبار أداء vue-i18n مقابل Intlayer (نفس اختبار الأداء)
- next-i18next مقابل next-intl مقابل Intlayer
- react-i18next مقابل react-intl مقابل Intlayer
- هل عفا عليه الزمن i18next؟
نجوم GitHub
تعد نجوم GitHub مؤشرا بارزا على شعبية المشروع، وثقة المطورين به، واستمراريته على المدى الطويل. ورغم أنها لا تقيس الجودة التقنية وحدها، إلا أنها توضح اهتمام المجتمع ورغبته في الاعتماد عليه في الإنتاج.
الخاتمة
اكتسب i18next مكانته الريادية بفضل تشغيله في كل مكان، وتوفيره إضافات لكل استخدام، ودعمه المستمر لأكثر من عقد. ولكن اختبار الأداء يوضح تكلفة هذا التصميم القائم على وقت التشغيل. الإعداد الشائع يضيف +70-77 كيلوبايت gzip لكل صفحة، ويسرب ~90% من محتوى الصفحات الأخرى، ويستغرق تبديل اللغة عبر التحميل الكسول أكثر من 100 مللي ثانية. والوصول إلى 0% تسرب ممكن لكنه يتطلب خلفيات ومساحات أسماء يدوية، ومع ذلك يظل أكبر بمقدار +9-22 كيلوبايت من Intlayer.
ينقل Intlayer هذا العبء بالكامل إلى المترجم. فالقواميس لكل مكون، والتحميل الكسول لكل لغة، وحذف النصوص المهملة هي نواتج بناء تلقائية وليست قيودا يدوية. على نفس التطبيق: +0.3 كيلوبايت لكل صفحة، 0% تسرب، مكونات أصغر بـ 3 إلى 10 مرات، وتبديل لغة خلال 3-4 مللي ثانية.
جميع البيانات الخام، والتطبيقات التجريبية، ونصوص الاختبار متاحة في مستودع Benchmark Bloom. يمكنك تشغيلها والتحقق منها بنفسك.
راجع توثيق 'لماذا Intlayer؟' لمزيد من التفاصيل.
التعليقات
لا توجد تعليقات بعد. كن أول من يشارك أفكاره.
