دليل عملي للهجرة إلى وضع التكامل مع Vite بسبب إيقاف SolidStart
التخلص من هيكل التوجيه القديم وإعادة كتابة نقطة الدخول
مع الإصدار الرسمي لـ Solid 2.0، تم إيقاف حزمة إطار العمل الإضافي القديمة solid-start نهائياً. إذا كان فريق الواجهة الأمامية يدير تطبيقات تجارية واسعة النطاق، فيجب عليه إزالة هيكل الاعتماديات الآن. قم بإزالة solid-start ومكيفات المنصة بالكامل من المشروع، وقم بتعديل نقطة دخول الخادم لتصدير دالة عقدة واحدة handleRequest(request: Request) تعتمد على معيار Fetch API للويب. تم دمج خطاف onMount القديم في خطاف onSettled الذي يعيد دالة تنظيف عندما يتم حل شجرة التفاعل غير المتزامنة بالكامل.
لإجراء الهجرة بأمان، يجب عزل اعتماديات الحزمة واستبدال نقطة الدخول يدويًا. أولاً، قم بإزالة solid-start من package.json وتحديث إصدار @solidjs/vite-plugin إلى 2.0.0-rc.1 أو أعلى. ثانياً، قم بإنشاء ملف vite.config.ts لتكوين إعداد plugins: [solid({ start: true, ssr: true, router: { type: 'filesystem', dir: 'src/routes' } })]. ثالثاً، قم بتغيير معالج العرض في ملف نقطة دخول الخادم entry-server.tsx إلى واجهة handleRequest(request: Request) القياسية للويب. من خلال هذه العملية، يمكنك تقليل معدل فشل البناء الأولي بنسبة تزيد عن 80 بالمائة وحل مشكلات توافق مجموعة الأدوات.
إعادة هيكلة جلب البيانات باستخدام رسم بياني للتفاعل غير المتزامن
قام المحرك المتفاعل لـ Solid 2.0 بترقية عمليات الوعد (Promises) غير المتزامنة إلى قيم إشارة من الدرجة الأولى في الرسم البياني المتفاعل، وأزال تمامًا أداة جلب البيانات البدائية createResource. يمكن للمطورين الإعلان عن createMemo عادي داخل المكون وإرجاع الوظيفة غير المتزامنة مباشرة للتعامل مع القيم المحلولة دون الحاجة إلى منطق دفاعي يدوي منفصل. لمنع ظاهرة إزاحة التخطيط التراكمي (CLS)، عندما يتم تشغيل استعلام غير متزامن جديد بواسطة تغييرات الخصائص العلوية (props)، تحافظ حاوية <Loading> على حالة واجهة المستخدم السابقة وتضبط الشفافية باستخدام دالة isPending(user).
لإعادة هيكلة منطق الجلب غير المتزامن، يجب دمج بنية المذكرة العادية مع الحاويات. أولاً، اكتب createMemo(() => fetchUser(props.userId)) عادي يحتوي على منطق جلب البيانات. ثانياً، ضع حاوية <Errored> في أعلى قالب JSX لالتقاط أخطاء الشبكة 5xx أو الوعود المرفوضة وتوفير زر استرداد محلي. ثالثاً، قم بتغليف المحتوى الداخلي بـ <Loading fallback=""{<ProfileSkeleton"/>}"> وتطبيق تنسيق شرطي class={{ 'opacity-50': isPending(user) }}. يضمن هذا الإجراء سلامة البيانات في حالات تأخير الشبكة ويمنع تدهور تجربة المستخدم.
إدخال مترجم يعتمد على Rust وتنقية ملحقات البناء المخصصة
أطاحت مجموعة أدوات Solid 2.0 بمحولات JavaScript و Babel التقليدية واعتمدت بشكل متكامل محركات الترجمة Oxc و Rolldown المستندة إلى لغة Rust، مما يوفر تحسناً في سرعة الترجمة من 20 إلى ما يصل إلى 355 ضعفاً. ومع ذلك، إذا تم تضمين ملحق قديم يعتمد على وقت تشغيل Node.js V8 في منتصف خط أنابيب البناء، فس يحدث عبء تسلسل NAPI، مما يلغي مزايا أداء مترجم Rust ويسبب أخطاء تحليل. لذلك، فإن تشغيل برنامج نصي أتمتة لتنقية ملحقات البناء القديمة غير المتوافقة يعد أمرًا ضروريًا.
لحل تعارضات الملحقات القديمة، يجب إجراء عمليات الفحص والتنقية. أولاً، قم بإنشاء ملف scripts/check-legacy-plugins.js في جذر المشروع وتحديد قائمة الملحقات المتعارضة مثل babel-plugin-transform-async-to-generator و @babel/plugin-proposal-decorators. ثانياً، استخدم وحدة نظام الملفات لقراءة محتوى vite.config.ts ديناميكيًا وتشغيل دالة تشخيصية للتحقق مما إذا كان يتضمن سلاسل ملحقات غير متوافقة. ثالثاً، قم بتشغيل الأمر node scripts/check-legacy-plugins.js في الطرفية لتنقية المشكلات المكتشفة، ومسح ذاكرة التخزين المؤقت في بيئة التطوير المحلية باستخدام الأمر rm -rf node_modules/.vite .oxc_cache. من خلال هذه العملية، يمكنك منع أخطاء البناء الأولية للهجرة واستعادة سرعة HMR لخادم التطوير.
إنشاء التحديثات المتفائلة وآلية التراجع اليدوي
تأتي نواة Solid 2.0 مزودة بالإجراءات (actions) وأوليات المخزن المتفائل افتراضيًا تبسيط معالجة تغيير الحالة غير المتزامنة. على عكس نماذج التخزن التقليدية، تعمل التحديثات المتفائلة كآلية تراكب تفاعلية تفرض التغييرات المؤقتة فوق بيانات المخزن الخلفية المؤكدة. يمكن لإدارة تسلسل المعاملات داخل الإجراء (action) أو تسلسل الطلبات أن يمنع تمامًا حالات التنافس التي تحدث عندما تشترك مكونات متعددة في نفس المخزن.
بناء معاملات متفائلة وسيط تراجع يدوي يتطلب تغيير هيكل إدارة البيانات. أولاً، قم استدعاء دالة snapshot(store) لالتقاط بيانات نقطة الزمن مباشرة قبل الطلب غير المتزامن. ثانياً، استخدم رد الاتصال setStore لتسجيل الحالة المتفائلة في كائن المسودة (draft) لعكسها في واجهة المستخدم استباقيًا. ثالثاً، في حالة حدوث استثناء أثناء تنفيذ دالة الخادم غير المتزامنة، قم بتنفيذ عبارة setStore(() => previousSnapshot) داخل كتلة التقاط الأخطاء (catch) لاستعادة الحالة السابقة قسراً. من خلال ذلك، يمكنك تحقيق إدارة مستقرة للحالة دون فقدان بيانات النموذج حتى في حالات تأخير استجابة الشبكة أو المهلة الزمنية.
تكوين دليل ذاكرة التخزين المؤقت في مسار نشر الإنتاج
في بيئة بناء Solid 2.0 و Vite 8، يجب إدارة ذاكرة التخزين المؤقت لبناء مترجم Oxc وقطع أثر Rust بكفاءة لتقليل وقت بناء CI/CD وتقليل تكاليف صيانة الخادم. لمنع مقاطعة البناء بسبب خطأ نقص الذاكرة في بيئة CI أثناء المعالجة المتوازية للبيانات لمترجم Oxc، يجب تحديد حد ذاكرة كومة البيانات (heap memory) ورقم خيوط عامل Rayon كمتغات بيئية. بالإضافة إلى ذلك، في وقت تشغيل خادم SSR، يجب تتبع ما إذا كانت سياقات شجرة التفاعل غير المتزامنة المخصصة لكل طلب HTTP يتم إلغاؤها بشكل صحيح.
لتطبيق تحسين مسار العمل ومراقبة الذاكرة، يجب تعديل ملف التكوين. أولاً، قم بتكوين إجراء ذاكرة التخزين المؤقت يتضمن المسارات path: ~/.cargo/registry و path: .oxc_cache و path: node_modules/.vite داخل ملف YAML لسحب GitHub Actions. ثانياً، قم بتعريف NODE_OPTIONS="--max-old-space-size=8192" و RAYON_NUM_THREADS="4" و UV_THREADPOOL_SIZE="8" في متغيرات بيئة تنفيذ أمر البناء لتوسيع ذاكرة الكومة إلى 8 جيجابايت وإلغاء حظر خيوط المعالجة. ثالثاً، اكتب دالة غلاف مراقبة تعتمد على process.memoryUsage().heapUsed في نقطة دخول الخادم بحيث يتم طباعة سجل تحذير إذا تجاوزت زيادة الذاكرة 10 ميجابايت. عند إكمال هذا الإجراء، يمكنك تقليل الوقت المستغرق للبناء في بيئة الإنتاج ومنع تسرب الذاكرة في وقت التشغيل بشكل مستقر.