تصغير كود HTML وقياس نسبة تقليل الحجم
تزيل أداة تصغير HTML هذه التعليقات والنصوص المكوّنة من مسافات فقط بين الوسوم المتجاورة، مع الحفاظ على النص الظاهر والسمات والقيم بين علامتي اقتباس والنصوص البرمجية والأنماط.
شغّل الأداة مجانًا
كما تتحقق من إغلاق العناصر العادية بالترتيب الصحيح، وتستثني العناصر الفارغة القياسية في HTML والصيغة الصريحة ذاتية الإغلاق. تتضمن كل نتيجة ناجحة كود HTML المصغر، وعدد بايتات UTF-8 قبل المعالجة وبعدها، ونسبة التوفير، وعدد التعليقات المحذوفة. العملية حتمية ولا تحتاج إلى اتصال بالشبكة، وهي بديل محافظ لإعادة كتابة العلامات بصورة مكثفة.
أزيلوا التنسيق من دون حذف محتوى الصفحة
يحتوي كود HTML المقروء عادة على مسافات بادئة وأسطر فارغة وتعليقات توضيحية تساعد على صيانة المستند، لكنها تضيف بايتات إلى المورد المنشور. تزيل هذه الإمكانية تعليقات HTML العادية وتحذف عقد النص المكوّنة من مسافات فقط عندما تقع بين وسمين. وتحافظ عمدا على أي نص يتضمن حرفا واحدا غير فارغ على الأقل، لأن المسافة داخل النص الظاهر قد تفصل الكلمات وقد تكون مهمة للتخطيط أو إمكانية الوصول. تبقى قيم السمات من دون تغيير، بما في ذلك القيم المحاطة بعلامتي اقتباس التي تحتوي على أقواس زاوية أو مسافات أو تسلسلات تشبه التعليقات أو بيانات مضمنة. يقرأ الماسح كل وسم كاملا مع مراعاة علامتي الاقتباس، بدلا من التوقف عند أول علامة أكبر من. وتعامل محتويات script وstyle معاملة خاصة، إذ تنسخ كما هي حتى وسم الإغلاق المقابل. لذلك لا تختلط معاملات المقارنة أو السلاسل أو محددات CSS أو صيغة التعليقات الداخلية بعلامات HTML. يمكنكم حفظ حقل html المعاد بوصفه ملف نشر مع إبقاء المصدر المقروء في نظام التحكم بالإصدارات. ويتجنب هذا النطاق المحافظ إعادة ترتيب السمات أو تسوية النص أو فك الكيانات أو حذف الوسوم أو إجراء تحويلات أخرى قد تغير سلوك المتصفح.
اكتشفوا العلامات الناقصة أو المتداخلة بطريقة خاطئة
يجب ألا يخفي التصغير قالبا مبتورا ويقدمه على أنه ملف جاهز للإنتاج. تسجل الإمكانية أثناء فحص المستند كل عنصر افتتاح عادي، وتشترط إغلاق العناصر بعكس ترتيب فتحها. فإذا فتح عنصر div ثم عنصر span، وجب إغلاق span قبل div. يؤدي وجود وسم إغلاق غير متوقع أو وسم غير مكتمل أو تعليق غير مغلق أو عنصر ما زال مفتوحا عند النهاية إلى خطأ إدخال غير صالح، بدلا من إخراج نتيجة جزئية. ولا تحتاج العناصر الفارغة القياسية مثل img وinput وmeta وlink وbr وhr وsource وwbr إلى وسوم إغلاق. كما تقبل الصيغة الصريحة ذاتية الإغلاق لأي عنصر مسمى، وهذا يدعم المقاطع الشبيهة بـ XML ومخرجات المكونات التي تستخدم شرطة مائلة أخيرة. هذا فحص بنيوي مقصود، وليس اختبار امتثال شاملا لمواصفات HTML. فالخوارزمية لا تستنتج وسوم النهاية الاختيارية ولا تصلح العلامات التي قد يتسامح معها المتصفح. إذا كان المصدر يعتمد على حذف إغلاق عناصر مثل الفقرات أو عناصر القوائم، فأغلقوها صراحة قبل الإرسال. تسهّل القاعدة الصارمة كشف مخرجات القوالب المعيبة وتحافظ على نتائج متوقعة في مختلف بيئات الأتمتة.
قيسوا التوفير ضمن سير نشر قابل للتكرار
تقيس الاستجابة المصدر المرسل والنتيجة المصغرة ببايتات UTF-8، وهو قياس أدق لحجم تخزين موارد HTML المعتادة ونقلها من عدد أحرف JavaScript. ويهم هذا الفرق عندما تحتوي العلامات على نصوص مشكولة أو أبجديات غير لاتينية أو رموز تعبيرية أو أحرف أخرى تشفر في عدة بايتات. تحسب reduction_percent من إجمالي البايتات الدقيق قبل المعالجة وبعدها، وتقرب إلى منزلتين عشريتين، بينما تعرض comments_removed عدد تعليقات HTML الكاملة التي حذفت. يستطيع مولد المواقع الثابتة تمرير كل صفحة معروضة عبر هذه الإمكانية، وحفظ قيمة html المعادة، وتسجيل القياسات في تقرير البناء. ويمكن لخط معالجة القوالب استخدام الأخطاء البنيوية لإيقاف النشر عندما تكون العلامات المنشأة مبتورة أو متداخلة على نحو خاطئ. ولأن المعالجة نقية وحتمية، تنتج المدخلات المتطابقة دائما المخرجات والمقاييس نفسها، من دون اتصالات شبكة أو تبعيات خارجية أو عشوائية أو سلوك مرتبط بالوقت. تكلفة كل طلب API مؤتمت هي $0.002. لا تضغط هذه العملية بيانات النقل، ولا تجمع الموارد المرتبطة، ولا تحسن JavaScript أو CSS المضمنين، ولا تعيد كتابة دلالة المستند. ويمكنكم بعد ذلك تطبيق ضغط الخادم مثل Brotli لتحقيق وفر إضافي في النقل.
حالات الاستخدام
جهزوا الصفحات الثابتة للنشر
أزيلوا تعليقات التأليف والمسافات البادئة من HTML المنشأ قبل نشر الملف المصغر.
تحققوا من مخرجات القوالب
أوقفوا البناء عندما تتضمن العلامات المنشأة عنصرا عاديا غير مغلق أو متداخلا على نحو خاطئ.
تابعوا تقليل حجم العلامات
سجلوا البايتات الأصلية والمصغرة وعدد التعليقات ونسبة التوفير في تقرير الإصدار.
الأسئلة الشائعة
ما الذي تزيله أداة التصغير؟
تزيل تعليقات HTML الكاملة والنصوص المكوّنة من مسافات فقط بين الوسوم المتجاورة.
هل تزيل المسافات من النص الظاهر؟
لا. يحفظ النص الذي يحتوي على أي حرف غير فارغ كما هو تماما، بما في ذلك المسافات المحيطة به.
ما العناصر التي يمكن أن تبقى بلا وسم إغلاق؟
تستثنى العناصر الفارغة القياسية في HTML، ويقبل أيضا كل عنصر مكتوب بصيغة صريحة ذاتية الإغلاق.
كيف تعالج النصوص البرمجية والأنماط؟
تنسخ محتوياتها من دون تعديل حتى وسم الإغلاق المقابل، كي لا يحلل الكود المضمن بوصفه HTML.
كيف تحسب نسبة التخفيض؟
تقارن الإمكانية عدد بايتات UTF-8 الأصلية والمصغرة، ثم تقرب نسبة التخفيض إلى منزلتين عشريتين.
ما تكلفة طلب API؟
تكلفة كل طلب API هي $0.002.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev2/minify-html \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"}'const res = await fetch("https://api.kit.forhosting.com/dev2/minify-html", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"html": "<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/minify-html",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"html": "<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/minify-html", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"html":"<!doctype html>\\n<html>\\n <body>\\n <!-- Greeting -->\\n <h1>Hello</h1>\\n </body>\\n</html>"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"html":"<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/minify-html", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"html": "<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.minify_html",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |