كان موقعنا بطيئًا جدًا، لذا قمنا بنقله إلى خادم موقعنا مزود بـ 4 أنوية معالج، و8 جيجابايت من ذاكرة الوصول العشوائي، و8 جيجابايت من ذاكرة التبديل، ومع ذلك لا يزال موقعنا بطيئًا. لا أستطيع العثور على طريقة لتحسين موقعي.
أعتقد أن تقليل الإعلانات هو بداية جيدة. ![]()
واو
واو! لم تكن تمزح! إنه غير قابل للاستخدام تمامًا. لم أستطع حتى معرفة ما هو الموقع قبل أن أستسلم.
سرعة المعالج الواحد وسرعة القرص الصلب (SSD) عاملان كبيران. ما مدى سرعة المعالج؟ ألا تملك أقراصًا صلبة دوّارة؟ هل قمت بتشغيل إعدادات discourse أو تغيير إعدادات الذاكرة منذ أن قمت بتغيير كمية الذاكرة العشوائية؟ هل قمت بضبط إعدادات قاعدة البيانات؟ هل تستخدم تثبيت قياسي رسمي لـ Discourse؟
ولكن بما أن موقعك يخدم في الغالب الإعلانات، فمن المستحيل معرفة أداء discourse.
نحن نستخدم وحدات تخزين من نوع SSD في خادمنا.
لقد اختبرت الموقع مع تعطيل برنامج حظر الإعلانات ولا تزال السرعة بطيئة.
تم تثبيت Discourse عبر DigitalOcean.
لا، لم أفعل.
لا!
يجب عليك إما تشغيل discourse-setup مرة أخرى أو قراءة التعليقات في ملف app.yml لضبط إعدادات الذاكرة.
لا يجب أن تحتاج إلى أي مساحة تخزين مؤقتة (swap).
هل قاعدة بياناتك كبيرة جداً؟
لقد قمت بتشغيل discourse-setup بالفعل، لكنه لم يُحدث أي فرق في السرعة.
نعم، لدينا أكثر من 27000 موضوع على موقعنا.
في تجربتي، تُبطئ معاينات قائمة المواضيع (الإضافة) منصة Discourse بشكل ملحوظ. يمكنك تجربة التبديل إلى معاينات قائمة المواضيع (TC)، فهي تعمل بسرعة أكبر بكثير من الإضافة.
إذا قمت بتعطيل معاينات قائمة المواضيع تمامًا، ستسرع منصة Discourse عدة مرات. ![]()
نحن نستخدم إضافة مخصصة للسماح للمواضيع بإظهار صور CDN المشتركة في المواضيع، وفي الميتا OG إذا تم مشاركتها على وسائل التواصل الاجتماعي. تم تطوير إضافة دعم CDN هذه بواسطة @fzngagan و فايزان، هل لديك أي طريقة لنقل الإضافة التي كتبتها إلى TLP TC بحيث يمكن للموقع التحميل بشكل أسرع؟
@pfaffman هل لديك أي اقتراحات تقنية محددة حول ما يجب فعله بالضبط لتسريع قاعدة بياناتنا وموقعنا؟ أفترض أن howtodiscuss.com يحتوي على أكثر من 50 ألف موضوع وهو موقع ذو حركة مرور عالية.
أسئلتي:
-
هل توجد أي إعدادات متعددة الخيوط أو معالجات متوازية أو نوى يمكننا ضبطها في Discourse؟ يوفر NodeBB هذا للتعامل مع حركة المرور العالية.
-
هل توجد أي دعم لتخزين مؤقت على جانب الخادم في Discourse، وأين وكيف يتم إعداده؟
-
كيف يمكننا تحقيق درجة سرعة صفحة Google بنسبة 100% لـ https://howtodiscuss.com
-
ما التغييرات التي يمكننا إجراؤها في ملف app.yaml؟ نحن نستخدم 4 وحدات معالجة مركزية و8 جيجابايت من DigitalOcean Droplet.
-
نحن نستخدم Cloudflare لخدمة موقعنا. هل توجد أي تحسينات يمكننا إجراؤها هناك؟ عندما أفعّل Rocket Loader في Cloudflare، لا يعمل Discourse بشكل صحيح ويظهر أخطاء في وحدة تحكم JavaScript من جانب العميل.
-
هل توجد طريقة لتقليل حجم ملفات CSS و JS و HTML تلقائيًا، وتمكين ضغط Gzip على جانب الخادم؟
-
يرجى مشاركة رؤى حول التحسينات التي قمت بها أنتم على meta.discourse.org للتعامل مع حركة المرور الأعلى، ويمكننا تجربة نفس الشيء.
-
يرجى مشاركة رؤى حول التحسينات التي جربتها مواقع أخرى عالية الحركة على Discourse؟
بمجرد أن نتمكن من تسريع موقعنا، سنكون سعداء بنشر موقعنا أيضًا في قائمة مجتمعات Discourse الناجحة. شكرًا لك.
حسنًا، عدد المواضيع ليس هو عدد المنشورات أو حجم قاعدة البيانات، لكن هذا ليس كبيرًا جدًا.
الموقع متوقف حاليًا، لذا لا يمكنني رؤية عدد المنشورات.
أنصحك بتعديل ملف app.yml يدويًا والنظر في معلومات الضبط الموجودة فيه ثم إعادة البناء. هناك عدة مواضيع تناقش طرق ضبط قاعدة البيانات.
يمكنك أيضًا التبديل إلى أحد قطرات CPU الأسرع الجديدة من Digital Ocean.
مرحبًا، @ahmed_khan1 لا تخاطر بأي توقف، حتى بضع دقائق من التوقف ستكلفك سمعة ثمينة في عيون جوجل.
ادفع لمختص للتعامل مع هذا الأمر مرة واحدة وإلى الأبد. كما أستطيع أن أرى أن موقعك يستقبل حركة مرور كبيرة، لذا اتبع المنطق ولا تلجأ أبدًا إلى الخيارات الرخيصة.
أنا أدير موقعًا يحتوي على 20,000 موضوع على جهاز بمعالج ثنائي النواة وذاكرة 2 جيجابايت دون أي مشاكل (لكنه قد لا يكون نشطًا مثل موقعك …)
ولكن نعم، إذا كانت المشكلة تتعلق بتشغيل كمية كبيرة من JavaScript، فإن أداء الخلفية لا علاقة له بالأمر.
هل قمت بضبط هذا على الصفر؟
هذا سيساعد قليلاً.
يمكنك الانتقال إلى TC لتسريع TLP، لكن له قيود في العرض على متصفحات Chromium (ولهذا السبب لم أقوم بإلغاء تفعيل الإضافة حتى الآن، أنا أنتظر ترقية LayoutNG لـ Grid CSS).
لدينا الآن Droplet جديد من DigitalOcean. قم بشرائه ببساطة من هنا
إليك ملف app.yml
## هذا قالب حاوية Docker شاملة ومستقلة لـ Discourse
##
## بعد إجراء أي تعديلات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كن *حذرًا جدًا* عند التعديل!
## ملفات YAML حساسة للغاية للأخطاء في المسافات البيضاء أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة هذا الملف عند الحاجة
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## قم بإلغاء التعليق عن هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
## إذا كنت تريد لـ Discourse مشاركة منفذ مع خادم ويب آخر مثل Apache أو nginx،
## راجع https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
- "2045:80" # http
# - "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## قم بتعيين db_shared_buffers إلى أقصى 25% من إجمالي الذاكرة.
## سيتم تعيينها تلقائيًا بواسطة bootstrap بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوزها
db_shared_buffers: "2048MB"
## يمكن أن يحسن أداء الفرز، لكنه يزيد من استخدام الذاكرة لكل اتصال
#db_work_mem: "40MB"
## أي إصدار Git يجب أن تستخدمه هذه الحاوية؟ (الافتراضي: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## كم عدد طلبات الويب المتزامنة المدعومة؟ يعتمد على الذاكرة وأنوية المعالج.
## سيتم تعيينها تلقائيًا بواسطة bootstrap بناءً على المعالجات المكتشفة، أو يمكنك تجاوزها
UNICORN_WORKERS: 8
## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
## مطلوب. لن يعمل Discourse مع عنوان IP مجرد.
DISCOURSE_HOSTNAME: "howtodiscuss.com"
## قم بإلغاء التعليق إذا كنت تريد بدء الحاوية بنفس اسم النطاق (-h option) المحدد أعلاه (الافتراضي "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: قائمة عناوين البريد الإلكتروني المفصولة بفواصل ستُجعل مشرفين ومطورين
## عند التسجيل الأولي مثال 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: "admin@gmail.com"
## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
## مطلوب عنوان SMTP واسم مستخدم وكلمة مرور
## تحذير: قد يتسبب الحرف '#' في كلمة مرور SMTP في حدوث مشاكل!
DISCOURSE_SMTP_ADDRESS: smtp-relay.smtp.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: admin@gmail.com
DISCOURSE_SMTP_PASSWORD: smtp_password
#DISCOURSE_SMTP_DOMAIN: discourse.example.com # (مطلوب من بعض المزودين)
#DISCOURSE_NOTIFICATION_EMAIL: nobody@discourse.example.com # (العنوان المرسل منه الإشعارات)
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (اختياري، الافتراضي true)
## إذا أضفت قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
#LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## عنوان CDN http أو https لهذه النسخة من Discourse (مُهيأ للسحب)
## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## حاوية Docker لا تحتوي على حالة؛ يتم تخزين جميع البيانات في /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## تذهب الإضافات هنا
## راجع https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-sitemap.git
- git clone https://github.com/discourse/discourse-math.git # إضافة مخصصة لدعم الرياضيات JAX
- git clone https://github.com/discourse/discourse-solved.git # إضافة مخصصة للأسئلة والأجوبة واختيار أفضل إجابة
- git clone https://github.com/discourse/discourse-voting.git # إضافة مخصصة للتصويت على المواضيع فقط
- git clone https://github.com/discourse/discourse-yearly-review.git # إضافة مخصصة لنشر موضوع سنوي تلقائيًا عن نشاط المنتدى
- git clone https://github.com/discourse/discourse-user-notes.git # إضافة مخصصة للسماح للموظفين بإضافة ملاحظات حول مستخدم
- git clone https://github.com/paviliondev/discourse-question-answer.git # إضافة مخصصة غير رسمية للتصويت على الأسئلة والأجوبة بأسلوب Stack Overflow
- git clone https://github.com/discourse/discourse-adplugin.git # إضافة رسمية مخصصة للإعلانات
- git clone https://github.com/discourse/discourse-whos-online.git # إضافة مخصصة لمعرفة من متصل
- git clone https://github.com/paviliondev/discourse-topic-previews.git # إضافة مخصصة لعرض معاينات المواضيع بشكل جميل
- git clone https://github.com/paviliondev/discourse-ratings.git # إضافة مخصصة للسماح للمستخدمين بتقييم المواضيع
- git clone https://github.com/discourse/discourse-cakeday.git # إضافة رسمية للاحتفالات بأعياد الميلاد وتاريخ الانضمام
- git clone https://github.com/discourse/discourse-saved-searches.git # إضافة رسمية لإشعارات البحث المحفوظ
- git clone https://github.com/paviliondev/discourse-follow.git # إضافة مخصصة للسماح للمستخدمين بمتابعة بعضهم البعض
- git clone https://github.com/FaizanZahid/discourse-amp-htd-plugin.git # بناء مخصص لدعم AMP لـ HTD
- git clone https://github.com/discourse/discourse-assign.git # إضافة مخصصة لتعيين المواضيع للموظفين
- git clone https://github.com/paviliondev/x-discourse-tlp-thumbnail.git # إضافة مخصصة لعرض الصور المصغرة من صور CDN
## أي أوامر مخصصة للتشغيل بعد البناء
run:
- exec: echo "Beginning of custom commands"
## إذا كنت تريد تعيين عنوان البريد الإلكتروني 'من' لتسجيلك الأول، قم بإلغاء التعليق وتغييره:
## بعد الحصول على أول بريد إلكتروني للتسجيل، قم بإعادة التعليق على السطر. يحتاج إلى التشغيل مرة واحدة فقط.
- exec: rails r "SiteSetting.notification_email='noreply@howtodiscuss.com'"
- exec: echo "End of custom commands"
أعتقد أنك تشغل مواقع متعددة على هذه النسخة الواحدة. لست متأكدًا من كيفية تأثير ذلك على مشاكل الأداء.
نحن نشغل فقط هذا الموقع على هذا الخادم.
قد تحتاج إلى رفع قيمة db_work_mem إلى 100.
قد تواجه مشاكل في وكيل العكسي (reverse proxy) الذي يُبطئ الأمور.
ماذا يُظهر مُحلّل الأداء المصغّر (mini profiler)؟
يمكنك أيضًا تثبيت إضافة Prometheus للحصول على مزيد من البيانات.
هل جربت تعطيل إضافة ‘من متصل الآن’؟
لقد حاولت لكنني لا أرى تحسناً كبيراً
@pfaffman
إليك استخدام المعالج والذاكرة
لقد غيّرت عدد عمال يونيكورن إلى 24
وذاكرة المؤقتات إلى 4096 ميجابايت
هل نظرت إلى جانب المتصفح؟
مع الاعتراف بأن هذه لقطة، إلا أن استخدام المعالج لديك يبدو ضئيلاً. أعتقد أنك تبالغ في المواصفات.
استخدام الذاكرة مرتفع فقط بسبب عدد unicorns. قللها إذا بدأت تؤثر سلبًا على الذاكرة التبديلية.
يجب بالتأكيد أن تنظر في أوقات استرجاع البيانات وأوقات تأخير JavaScript في أدوات المطور في المتصفح.
قد يكون الشعور بالبطء ناتجًا عن مقدار العمل الذي يقوم به المتصفح.
من رؤوس HTTP يبدو أنك تستخدم إزويك و كلاودفلير. هل هذا صحيح؟ لست متأكدًا مما يفعله ذلك، لكن قد يكون ذلك عاملاً آخر في البطء الملحوظ.
توصيتي: ابدأ بإعداد بسيط بدون أي وكلاء أو وضع ديسكورش خلف كلاودفلير. تأكد من أنه سريع بشكل معقول، ثم فقط ابدأ في التحسين باتباع Enable a CDN for your Discourse أو، إذا كنت تريد حقًا استخدام كلاودفلير، Full site CDN acceleration for Discourse.
هذا صحيح، يتم تقديم موقع واحد فقط، وهو https://howtodiscuss.com، على هذا الخادم عبر NGINX. هل لديك أي طرق لتعزيز سرعته؟


