اكتشف أحد المطورين أن عملية بحث مخفية لـ npx كانت تضيف حوالي 10 ثوانٍ إلى كل دورة من دورات Claude Code، وأن استبدال عملية البحث هذه بتثبيت عالمي (global install) قد وفر ست ثوانٍ من كل تفاعل.

لماذا كان زمن التأخير مهماً

يتنقل Claude Code عبر مستودع برمجيات موحد (monorepo) يحتوي على عشرات المكونات، ويقوم بفهرسة الرموز (symbols)، وحفظ النصوص في Postgres، وإرسال تقارير الأخطاء. يبدو سير العمل سلساً حتى تبدأ استجابات النموذج في التأخر. ومن ثم كشف فحص الحالة (health check) عن عدة أوجه عدم كفاءة وعن استدعاء شبكة واحد مكلف.

ما كشفه فحص الحالة

  • تثبيتات مكررة – كان هناك مشغل أصلي (native launcher) وإصدار npm-global قديم يتواجدان معاً. أدى حذف النسخة القديمة إلى التخلص من عملية بحث غير ضرورية عن المسار.
  • ملف وكيل (agent file) تالف – تسبب ملف بدون وصف في تكرار اسم ملف صالح، مما جعل Claude Code يتجاهله. أدى حذف المدخل التالف إلى إزالة هذا الارتباك.
  • إضافات غير مستخدمة – تم تعطيل إحدى الإضافات (plugin) وخادم MCP لم يتم تشغيلهما أبداً، مما قلل من استهلاك موارد وقت التشغيل (runtime footprint).
  • ملفات “CLAUDE.md” متضخمة – كانت هذه الملفات تكرر معلومات موجودة بالفعل في الكود (مثل أوامر البناء)، مما يؤدي إلى تضخم البيانات (payload) المرسلة إلى النموذج. أدى تقليصها إلى الإبقاء على السياق الضروري فقط.

ساعدت عمليات التنظيف هذه، ولكن الفوز الأكبر جاء من Stop hook الذي يعمل بعد كل استجابة للنموذج.

ضريبة npx المخفية

يقوم الـ Stop hook بتنفيذ ستة أوامر منفصلة، يبدأ كل منها بـ npx -y. تجبر علامة -y أداة npx على التحقق من سجل npm بحثاً عن إصدار أحدث قبل تشغيل الأمر، مما يؤدي إلى إرسال طلب عبر الشبكة. استغرقت كل عملية بحث في المتوسط 1.6 ثانية، لذا أضافت الاستدعاءات الستة حوالي 10 ثوانٍ إلى كل دورة. ومن الناحية العملية، بلغ زمن التأخير الإجمالي للـ hook حوالي 12 ثانية، مع حدوث ارتفاعات مفاجئة تصل أحياناً إلى 113 ثانية عند حدوث اضطراب في الشبكة.

الحل البسيط

أدى استبدال استدعاءات npx بملف ثنائي (binary) مثبت عالمياً إلى إزالة عملية البحث في السجل:

  • قبل: npx -y @invariance/gps ← 1.6 ثانية لكل استدعاء
  • بعد: gps (مثبت عالمياً) ← 0.7 ثانية لكل استدعاء

قلل هذا التغيير من وقت تشغيل الـ Stop hook بنحو 6 ثوانٍ لكل دورة، وألغى الارتفاعات المفاجئة الكبيرة الناتجة عن التحقق عن بُعد.

ما يجب مراقبته لاحقاً

  • توقيت الـ Hook – قم بقياس أي hooks مخصصة لإظهار زمن التأخير قبل أن يؤثر على المستخدمين.
  • نظافة التبعيات (Dependency hygiene) – قم بتنقية التثبيتات المكررة والإضافات غير المستخدمة بانتظام.
  • ملفات الإعدادات – حافظ على ملفات “CLAUDE.md” رشيقة؛ واعرض فقط المعلومات التي لا يستطيع النموذج استنتاجها.

الدرس بسيط: يمكن للأتمتة أن تخفي عمليات برمجية خلفية (plumbing) مكلفة. يمكن لفحص حالة سريع أن يكشف عن استدعاءات شبكة مخفية تحول مساعد الذكاء الاصطناعي السلس إلى مساعد بطيء.

الخلاصة: عندما تشعر أن Claude Code بطيء، قم بقياس توقيت الـ hooks وألغِ أي عمليات بحث لـ npx؛ فالتثبيت العالمي يمكن أن يوفر ثوانٍ من كل دورة ويحافظ على سلاسة تدفق عملك البرمجي.