Blog
تقليل بيانات autoload في ووردبريس لتسريع الطلبات غير المخزنة

تقليل بيانات autoload في ووردبريس يمكن أن يخفض استهلاك الذاكرة وزمن معالجة PHP عندما تكون خيارات كبيرة أو قديمة محملة في كل طلب. لكن تغيير قيمة autoload أو حذف option دون معرفة مالكها قد يعطل القالب أو الإضافة أو تسجيل الدخول، لذلك يبدأ العمل بالتدقيق والنسخ الاحتياطي ثم معالجة العناصر المؤكدة فقط.
منذ WordPress 6.6 أصبح Site Health يعرض تحذيرًا عندما تتجاوز البيانات المحملة تلقائيًا حدًا افتراضيًا يقارب 800 كيلوبايت، كما يستطيع WordPress منع autoload تلقائيًا لبعض الخيارات الكبيرة الجديدة. لا يعني التحذير أن كل موقع فوق الحد بطيء، لكنه مؤشر قوي يستحق القياس.
ما معنى autoload داخل wp_options؟
يخزن جدول wp_options إعدادات WordPress والإضافات والقالب. بعض هذه القيم يحتاجها النظام في معظم الصفحات، فيحملها مبكرًا ضمن استعلام واحد بدل تنفيذ استعلام مستقل لكل option. هذه الآلية فعالة عندما تكون البيانات صغيرة ومستخدمة باستمرار، لكنها تصبح عبئًا عندما تضيف الإضافات قيمًا ضخمة أو تترك إعدادات لم تعد مستخدمة.
هدف تقليل بيانات autoload في ووردبريس ليس الوصول إلى أصغر رقم ممكن. الهدف هو إبقاء الخيارات الضرورية محملة، ومنع الخيارات الكبيرة أو النادرة من استهلاك الذاكرة في كل طلب. تعطيل autoload لقيمة يحتاجها كل طلب قد يزيد عدد استعلامات قاعدة البيانات بدل تحسينها.

| نوع الخيار | هل يناسب autoload؟ | السبب |
|---|---|---|
| إعداد صغير يستخدم في كل صفحة | غالبًا نعم | يوفر استعلامات متكررة |
| Cache أو transient كبير | غالبًا لا | يتغير ويستهلك ذاكرة دون حاجة دائمة |
| إعداد صفحة إدارة نادرة | غالبًا لا | لا يحتاجه زوار الواجهة |
| خيارات Core معروفة | لا تغيرها عشوائيًا | قد تكون جزءًا من bootstrap |
| بيانات إضافة محذوفة | تحتاج تحققًا | قد تكون orphaned أو لازمة لترحيل لاحق |
علامات تدل على مشكلة autoload
- ظهور Critical issue في أدوات ← صحة الموقع حول Autoloaded options.
- ارتفاع memory usage في طلبات بسيطة لا تحتاج بيانات كثيرة.
- وجود خيارات فردية بحجم مئات الكيلوبايت أو أكثر.
- تضخم
wp_optionsبسبب caches أو sessions أو سجلات محفوظة خطأ. - عودة البطء بعد مسح Page Cache لأن تكلفة PHP الأصلية ما زالت مرتفعة.
لا تعتمد على Site Health وحده. قس TTFB في صفحة غير مخزنة، وزمن استعلام الخيارات، والذاكرة، وراقب الفرق بعد كل تغيير. يمكن أن تكون المشكلة الأساسية استعلامًا آخر أو PHP worker مزدحمًا. راجع دليل تشخيص بطء ووردبريس ضمن الصورة الكاملة، ثم استخدم تحسين قاعدة بيانات ووردبريس إذا أظهر القياس أن العبء يأتي من طبقة البيانات نفسها.
قبل البدء: متطلبات الأمان
- نسخة احتياطية حديثة لقاعدة البيانات قابلة للاستعادة.
- بيئة Staging تحمل الإضافات والقالب نفسيهما.
- وصول إلى phpMyAdmin أو MySQL وWP-CLI.
- تسجيل قياسات قبل التعديل.
- قائمة بالإضافات المحذوفة أو المعطلة حديثًا.
لا تنفذ DELETE جماعيًا على اسم option متشابه، ولا تغير خيارات Core وأنت غير متأكد. تقليل بيانات autoload في ووردبريس عملية صيانة دقيقة، وأفضل نتيجة تأتي من معالجة عدد قليل من العناصر الكبيرة المؤكدة بدل تنظيف آلاف الصفوف الصغيرة.
الخطوة الأولى: اعرف الحجم الإجمالي

ابدأ من Site Health. إذا ظهر التحذير، سجّل العدد والحجم. ثم استخدم WP-CLI أو استعلامًا للقراءة فقط لعرض أكبر الخيارات. أسماء قيم التحميل التلقائي تطورت بين نسخ WordPress، لذلك لا تفترض أنها دائمًا yes فقط. يمكن أن ترى قيمًا مثل on أو auto-on حسب النسخة.
SELECT option_name,
LENGTH(option_value) AS size_bytes,
autoload
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto', 'auto-on')
ORDER BY size_bytes DESC
LIMIT 50;استبدل wp_ ببادئة موقعك. هذا الاستعلام للقراءة ولا يحذف شيئًا. سجّل أعلى العناصر وحجمها واسم الإضافة المحتمل. عند استخدام Multisite تحقق من الجدول الصحيح لكل موقع.
الخطوة الثانية: اربط كل option بمالكها
اسم option غالبًا يحمل prefix الإضافة، لكن ليس دائمًا. ابحث في ملفات الإضافة باستخدام get_option() وupdate_option() أو راجع وثائقها. افحص هل الإضافة نشطة، وهل القيمة إعداد دائم أم cache قابل لإعادة البناء، وهل تستخدم في الواجهة الأمامية أم لوحة التحكم فقط.
قسّم النتائج إلى أربع مجموعات: ضرورية، مرشح لتعطيل autoload، orphaned بعد حذف إضافة، وغير معروفة. لا تلمس المجموعة الأخيرة. ينجح تقليل بيانات autoload في ووردبريس عندما يكون لديك دليل على وظيفة الخيار وطريقة استعادته.
الخطوة الثالثة: افحص Transients والجلسات
الـtransients المنتهية قد تتراكم عندما لا تعمل مهام التنظيف أو عندما تخزن إضافة بيانات كبيرة. كذلك قد تخزن إضافات أخرى cache داخل option واحد serialized. قبل الحذف افحص expiration وسلوك الإضافة. استخدم أدوات WordPress أو WP-CLI بدل DELETE SQL عام كلما أمكن.
إذا عاد الحجم سريعًا بعد التنظيف، فالمشكلة ليست قديمة فقط؛ هناك عملية تكتب البيانات باستمرار. راقب Action Scheduler وWP-Cron والإضافة المالكة. وقد يفيد Object Cache في ووردبريس، لكنه لا يعوض سوء تخزين options.
الخطوة الرابعة: غيّر سلوك التحميل عبر API
إذا أكد مطور الإضافة أن الخيار لا يحتاج إلى التحميل في كل طلب، استخدم Options API أو أداة الإضافة. في كودك الجديد مرر قيمة واضحة إلى add_option() أو update_option(). توصي تغييرات WordPress الحديثة باستخدام Boolean واضح عند الحاجة، أو ترك null ليقرر Core في الحالات المناسبة.
<?php
// An infrequently used admin-only setting should not autoload.
update_option( 'mustafa_wp_report_cache', $report_data, false );ضع الكود داخل إضافة مخصصة وليس القالب الأب. إذا كانت الإضافة الخارجية تعيد حفظ الخيار بقيمة autoload مختلفة، سيعود التغيير. في هذه الحالة استخدم hook رسميًا إن توفر أو اطلب إصلاحًا من المطور.
هل يمكن تعديل القيمة مباشرة في SQL؟
التعديل المباشر ممكن تقنيًا لكنه ليس الخيار الأول. قد تتغير قيم autoload التي يستخدمها Core، وقد تكون القيمة مخزنة في Object Cache. إذا اضطررت إلى SQL بعد نسخة احتياطية وتحقق كامل، عدّل خيارًا واحدًا محددًا ثم امسح Object Cache واختبر. لا تنفذ تحديثًا جماعيًا لكل القيم الكبيرة.
في مواقع الإنتاج، يفضل استخدام wp option أو كود صيانة مؤقت يستدعي API. هذا يقلل خطر تجاهل hooks أو التعامل الخاطئ مع serialization. راجع أعطال قاعدة بيانات ووردبريس إذا كانت الاستعلامات نفسها تتوقف أو تُرجع أخطاء.
الخطوة الخامسة: احذف orphaned options بحذر
وجود اسم إضافة غير نشطة لا يثبت أن الخيار غير مطلوب؛ قد تكون معطلة مؤقتًا أو ستستخدم عند إعادة التفعيل. تحقق من سياسة uninstall ووثائق الإضافة والنسخ الاحتياطية. صدّر القيم المرشحة إلى ملف منفصل قبل الحذف، ثم احذف مجموعة صغيرة واختبر لوحة التحكم والواجهة وREST API والمهام المجدولة.
لا تحذف خيارات الترخيص أو migration flags أو قواعد rewrite دون فهم أثرها. وقد تعتمد إضافة جديدة على بيانات نسخة قديمة لترحيل الإعدادات. لهذا يكون الحذف آخر مرحلة في تقليل بيانات autoload في ووردبريس، وليس الأولى.
قياس النتيجة بعد كل تغيير
| المقياس | طريقة الاختبار | النتيجة المقبولة |
|---|---|---|
| حجم autoload | Site Health والاستعلام نفسه | انخفاض متوقع دون عودة سريعة |
| TTFB غير مخزن | عدة طلبات للصفحة نفسها | تحسن الوسيط لا أفضل محاولة |
| ذاكرة PHP | Profiler أو APM | انخفاض دون أخطاء جديدة |
| عدد الاستعلامات | Query Monitor | لا زيادة كبيرة بسبب تعطيل autoload الضروري |
| سلامة الوظائف | Login، محرر، طلب تجريبي، cron | لا فقد إعدادات أو بيانات |
امسح Object Cache قبل القياس حتى لا تقارن بيانات قديمة. وإذا انخفض الحجم ولم يتحسن الأداء، توقف عن حذف المزيد وارجع إلى profiler؛ قد تكون عنق الزجاجة في API خارجي أو postmeta أو PHP-FPM.
إرشادات للمطورين لمنع المشكلة
- لا تخزن سجلات أو arrays ضخمة في option محمل تلقائيًا.
- مرر autoload مناسبًا عند إنشاء الخيار.
- استخدم جداول مخصصة للبيانات التشغيلية الكبيرة عند الحاجة.
- نظف بيانات الإضافة عبر uninstall routine موثوق وبعد موافقة المستخدم.
- لا تحدث option كبيرًا في كل page view.
- اختبر حجم البيانات مع مرور الوقت لا عند التثبيت فقط.
WordPress يستطيع تعطيل autoload تلقائيًا لبعض القيم الكبيرة الجديدة عندما لا يفرض المطور القيمة، لكن هذا ليس بديلًا عن تصميم بيانات جيد. كما أن خفض الحد الافتراضي عبر فلتر يجب أن يكون قرارًا مقاسًا لا وصفة عامة.
سيناريو تدقيق عملي لموقع بطيء
افترض أن Site Health يعرض 1.8 ميجابايت من الخيارات المحملة تلقائيًا. لا تبدأ بحذف كل شيء فوق 100 كيلوبايت. اعرض أكبر 50 خيارًا، ثم صنفها حسب المالك والوظيفة. قد تجد إعداد قالب بحجم 250 كيلوبايت يستخدم فعلًا في كل صفحة، وذاكرة cache لإضافة محذوفة بحجم 600 كيلوبايت، وتقارير لوحة إدارة بحجم 400 كيلوبايت.
المرشح الأول يكون عادة البيانات الكبيرة غير المستخدمة أو القابلة لإعادة البناء. صدّر قيمتها، ثم عطل تحميلها التلقائي على Staging وامسح Object Cache واختبر. إذا لم يظهر خطأ وانخفضت الذاكرة، انتقل إلى المرشح التالي. لا تغير العناصر الثلاثة في دفعة واحدة لأنك لن تعرف أيها سبب النتيجة.
بعد كل تعديل اختبر الصفحة الرئيسية، وصفحة منتج، وLogin، والمحرر، وREST API، وcron. بعض الخيارات لا تظهر أهميتها إلا في لوحة الإدارة أو مهمة مجدولة. اترك المراقبة يومًا كاملًا إذا كانت الوظيفة دورية.
استخدام WP-CLI في المراجعة
يساعد WP-CLI على عرض الخيارات وقيمتها دون فتح phpMyAdmin. ابدأ بأوامر القراءة، ولا تعرض secrets داخل سجل مشترك. يمكن قراءة خيار محدد ومعرفة حجمه بعد تصديره إلى بيئة آمنة، لكن تجنب طباعة tokens ومفاتيح API في Terminal history.
wp option get option_name --format=json
wp option list --autoload=on --fields=option_name,size_bytes --format=tableقد تختلف خيارات الأمر حسب إصدار WP-CLI وWordPress. اعرض wp help option list قبل الاعتماد على المثال. ولتغيير إعداد تملكه أنت، استخدم كود ترحيل داخل الإضافة بحيث يكون التغيير قابلًا للتكرار والرجوع.
التعامل مع المواقع التي تستخدم Object Cache
عند وجود Redis أو Memcached قد تبقى مجموعة الخيارات في الذاكرة بعد تعديل قاعدة البيانات مباشرة. امسح cache بالطريقة المناسبة ثم نفذ طلبًا غير مخزن. لا تستخدم FLUSHALL على Redis مشترك لأنه قد يمس مواقع أو تطبيقات أخرى؛ استخدم أداة WordPress أو namespace الموقع.
قد يخفي الكاش أثر تضخم البيانات في بعض الطلبات، لكنه لا يلغي تكلفة نقل مجموعة كبيرة إلى PHP واستهلاك الذاكرة. كما أن cache miss بعد restart يعيد تحميل المجموعة من قاعدة البيانات. لذلك يجب تحسين المصدر مع الحفاظ على طبقة الكاش.
كيف تمنع عودة التضخم؟
- سجّل الحجم الإجمالي أسبوعيًا أو شهريًا.
- أطلق تنبيهًا عند زيادة مفاجئة بعد تحديث إضافة.
- راجع أكبر الخيارات بعد كل ترحيل أو تغيير قالب.
- اجعل بيانات التقارير المؤقتة لها expiration واضح.
- استخدم uninstall routine يطلب قرار المستخدم قبل إزالة البيانات.
- اكتب اختبارات تمنع حفظ payload ضخم في إعداد محمل دائمًا.
المراقبة أهم من التنظيف الموسمي. إذا زاد الحجم 50 كيلوبايت يوميًا، ابحث عن الكاتب فورًا. أما إذا بقي ثابتًا وكان الأداء جيدًا، فلا تحذف بيانات لازمة فقط للوصول إلى رقم شكلي.
قائمة تحقق قبل اعتماد النتيجة
- انخفض الحجم الإجمالي بالقيمة المتوقعة.
- لم تزد استعلامات الخيارات بصورة مؤثرة.
- لم تختف إعدادات القالب أو الإضافات.
- تعمل صفحات الإدارة والواجهة والـcron.
- لم تعد البيانات المحذوفة بعد ساعات.
- تحسن TTFB أو الذاكرة وفق قياسات متعددة.
- توجد نسخة من القيم التي أزيلت وخطة استعادة.
إذا فشل أحد البنود، أعد القيمة أو سلوك التحميل السابق ثم أعد التشخيص. لا تواصل الحذف لتعويض نتيجة غير واضحة. التحسين الجيد يقلل التكلفة مع بقاء الوظائف مستقرة.
أخطاء شائعة
| الخطأ | الخطر | التصرف الصحيح |
|---|---|---|
| حذف أكبر options مباشرة | تعطل القالب أو الإضافة | حدد المالك والوظيفة أولًا |
| تعطيل autoload لكل شيء | زيادة استعلامات قاعدة البيانات | أبقِ الإعدادات المستخدمة دائمًا |
| قياس صفحة مخزنة | لا يظهر أثر PHP | اختبر طلبًا غير مخزن |
| نسيان Object Cache | قراءة قيمة قديمة | امسحه بعد التعديل |
| تنظيف دون مراقبة العودة | عودة التضخم سريعًا | راقب الكاتب ومعدل النمو |
أسئلة شائعة
هل تجاوز 800 كيلوبايت يعني أن الموقع بطيء؟
هو حد تحذير افتراضي، وليس حكمًا نهائيًا. قس TTFB والذاكرة والاستعلامات قبل القرار.
هل يمكن حذف كل transients؟
قد يعاد بناؤها، لكن الحذف الجماعي قد يسبب ضغطًا مؤقتًا أو يعطل وظائف تعتمد على cache. افهم الإضافة وابدأ بالمنتهي.
هل autoload هو نفسه Object Cache؟
لا. autoload يحدد خيارات تُحمّل مبكرًا، بينما Object Cache يخزن نتائج بين الطلبات. يتفاعلان لكنهما ليسا الشيء نفسه.
هل تغيير yes إلى no آمن؟
ليس كقاعدة عامة. يجب التأكد أن الخيار لا يُستخدم في معظم الطلبات وأن الإضافة لن تعيد القيمة.
ما أفضل بداية؟
اعرض أكبر 50 خيارًا للقراءة فقط، وحدد ثلاثة عناصر كبيرة معروفة، واختبر أثر كل عنصر منفردًا.
ولمن يدير موقعًا إنتاجيًا حساسًا، تساعد خطة صيانة ووردبريس على مراجعة نمو البيانات دوريًا بدل انتظار عودة البطء.
مصادر موثوقة
الخلاصة: أفضل طريقة لـتقليل بيانات autoload في ووردبريس هي القياس، وتحديد مالك كل option، ثم تغيير أو حذف العناصر المؤكدة فقط عبر API مع اختبار بعد كل خطوة. الهدف أداء أفضل مع بقاء الإعدادات والوظائف سليمة.