معاذ الخلف M.Alkhalaf
معاذ الخلف M.Alkhalaf

@muath2

17 تغريدة 37 قراءة Aug 16, 2020
متفاجئ انه إلى الآن ما جاء أي جواب واضح واحترافي. اما لعدم المعرفة أو التكاسل عن مشاركة المعلومة.
عموما بدلا من لعن الظلام فقط توصلت إلى الحل وسأشارككم اليوم الحل في موضوع ذهبي بكل معنى الكلمة ويتعدى ووردبريس. هو قديم ولكن فاجأني مقدار السهولة والتقدم التي حصلت فيه. فما هو؟ 👇
موضوعنا هو ما يسمى بالبروفايلنق profiling ويتلخص في محاولة فهم كيف يتم تنفيذ الكود ككل وأين تقع مكامن الخلل والبطء في التنفيذ. بعيدا عن التنظير جرب تفتح الرابط المرفق blackfire.io() وخذ لك جولة فيه وراح اشرح هنا بشكل سريع ايش اللي انت جالس تشوفه
هذي خدمة من شركة blackfire تقدم لك تحليل كامل لنتائج البروفايلنق بعد ما انك تركب بروفايلر profiler على سيرفرك وتربطه معها. اللي جالس تشوفه هو ما يسمى برسمة الاستدعاء أو call graph وهي توضح لك كيف يتم استدعاء برنامجك لما المستخدم يفتح صفحة معينة في موقعك. en.wikipedia.org
الرسمة توضح لك كل وظيفة function في كود موقعك تم تنفيذها مع المعلومات التالية:
١- كم استدعت كل وظيفة أو function من وظيفة أخرى أثناء تنفيذ كود الموقع وكم الوظيفة نفسها تم استدعاؤها من مرة
٢- كم استغرق تنفيذ الوظيفة من الوقت بما في ذلك وقت الوظائف اللي هي استدعتها
٣- ما هي أكثر وظيفة استهلكت وقت ويتم تلوينها بلون وردي في هذا الموقع
٤- لكل وظيفة يتم تحديد وقت التنفيذ ككل لهذه الوظيفة أو ما يسمى ب Wall time ومن ثم يتم تقسيمه إلى (١) الوقت المستغرق في القراء والكتابة من الهارديسك أو الشبكة IO (٢) الوقت المستغرق في المعالج (٣) الوقت (يتبع)
(يتبع) المستغرق في تنفيذ استعلامات على قاعدة البيانات.
بكل بساطة، لكل طلب أو HTTP request يأتي إلى موقعك (سيرفرك) يعطيك أشعة مقطعية توضح لك الرحلة اللي مشى فيها الطلب من بدايته إلى نهايته وكم استغرقت وايش أكثر جزء في الكود استغرق وقت ... الخ
طبعا لما تشوف وظيفة function آخذه ٧٠٪ من وقت الطلب http request ككل لازم تعرف انه مو بالضرورة الوظيفة نفسها فيها مشكلة ولكن يمكن مستدعية وظيفة أخرى هي مسببة المشكلة وهذا يعطيك اياه الموقع. بعبارة أخرى: يقول لك ترى الوظيفة X ٩٠٪ من وقتها راح في استدعاء الوظيفة Y فروح شوف وش قصة Y
المعلومات هذي ذهبية بكل معنى الكلمة (خصوصا لما تبدأ تعاني من بطء في موقعك). ليش ذهبية؟
١- لما يكون موقعك عليه زيارات كثيرة يكون تقريبا مستحيل عليك تمخمخ وتعمل ديبق debug للكود لفهم مكامن البطء
٢- لما تستخدم اطار عمل ضخم مثل ووردبريس فيه اضافات كثيرة يكون صعب عليك تعرف وين البطء
البروفايلر - أو المكتبة اللي راح تركبها في سيرفرك عشان تراقب الأداء عن قرب - راح تعطيك امكانية معرفة أسباب البطء لأنها تسمح لك انك تتصفح موقعك وتستخدمه بطريقة عادية وهي جالسة في الخلفية تراقب وتسجل الأداء بالتفصيل الممل. تقدر تضغط موقعك من خلال اختبار ضغط stress test (يتبع)
(يتبع) بحيث تخلي عدد كبير من المستخدمين الوهميين يدخلون الموقع (فيه مواقع تقدم الخدمة هذي وهذا موضوع ثاني) ثم تشوف النتايج وهل فيه بطء أو لا ومتى ما اكتشفت ان فيه بطء تروح تشوف نتايج البروفايلر عشان تفهم سبب البطء بالضبط. هل داتابيز ولا فيه كود معين (ولا اضافة معينة لو ووردبريس)
كمبرمج خذها نصيحة مني بكل صدق، مهم جدا جدا جدا تعرف حاجتين:
(١) كيفية عمل ديبق debugging للكود حقك حتى تعرف سبب الأخطاء الوظيفية أو functional bugs أو بمعنى آخر ليش برنامجي ما يشتغل صح ويعطي نتايج غلط.
(٢) كيفية قياس سرعة برنامجك ومعرفة ليش برنامجي بطيء أو non functional bugs
زي ما قلت في بداية التغريدات، يبدو عندنا ضعف في هذا الجانب ويمكن في اهمال في تدريسه وهذي فرصة لتنبيه الجميع لأهمية الموضوع. سواء معرفة سبب بطء البرنامج أو معرفة سبب ليش البرنامج ما يشتغل صح كلا الثنتين مسؤولية المبرمج قبل أي أحد آخر.
يبدو لي كثير من المبرمجين يبدأ برمي اللوم على السيرفرات وعلى مشغلي ومديري الأنظمة system administrators ويدخل الفريق ككل في معركة لمعرفة مين المسؤول والسبب هو عدم استخدام البروفايلنق. بالنسبة لمشروعي فإن السيرفر والويب سيرفر والداتابيز كان أداؤهم صاروخي والمشكلة كانت في الكود
طيب بما اننا نتكلم عن موضوع قياس الأداء بشكل عام باستخدام البروفايلنق، لازم نفهم انه جميع لغات البرمجة وبيئاتها المشهورة توفر بروفايلنق وليس الموضوع حكرا على ووردبريس أو PHP. الخدمة اللي وضعتها لكم فوق تدعم بايثون ولغة Go اضافة لل PHP.
موضوع البروفايلنق مو تقنية جديدة ولكن الجديد علي شخصيا هو توفر خدمة مثل Blackfire تجعل الموضوع بالسهولة هذي وتسهل عليك دمجه ضمن اجراءات التطوير اللي يستخدمها فريقك كجزء من الجودة أو quality control. قديما كانت تقنية البروفايلنق بحد ذاتها صعبة شوي ويتم اللجوء لها اذا بلشت فعلا
عشان كذا سألت هنا لأني متوقع اني راح استهلك وقت وجهد عشان أركب بروفايلر ل PHP ومن ثم اشغله ومن ثم اجمع النتايج وابدأ في قراءتها مع فريق التطوير والبحث عن مكامن البطء. تفاجأت بالتطور الحاصل وسهولة الاستخدام اللي توفره مثل هذه الخدمات. هذي ليست الخدمة الوحيدة خلونا نشوف ثانيات👇
هذي خدمة ثانية رائعة ل PHP tideways.com توفر بروفايلنق مفصل أيضا ولها ميزات عن السابقة وعيوب أيضا. في الحقيقة أنا أستخدم هذي لسبب واحد وهو اني تعرفت عليها قبل الثانية وهذي سكرين شوت من النتائج

جاري تحميل الاقتراحات...