القائمة الرئيسية

الصفحات

اختبار أداء التحميل المجمع باستخدام PageSpeed ​​Insights API و Python

تقدم Google واجهة برمجة تطبيقات PageSpeed ​​Insights لمساعدة محترفي SEO والمطورين من خلال مزج بيانات العالم الحقيقي مع بيانات المحاكاة ، مما يوفر بيانات توقيت التحميل المتعلقة بصفحات الويب.

الفرق بين Google PageSpeed ​​Insights (PSI) و منارة هو أن PSI تتضمن بيانات واقعية وبيانات معملية ، بينما تقوم Lighthouse بمحاكاة تحميل الصفحة عن طريق تغيير الاتصال ووكيل المستخدم للجهاز.

هناك اختلاف آخر يتمثل في أن PSI لا تقدم أي معلومات تتعلق بإمكانية الوصول إلى الويب أو تحسين محركات البحث أو تطبيقات الويب التقدمية (PWAs) ، بينما توفر Lighthouse كل ما سبق.

لذلك عندما نستخدم PageSpeed ​​Insights API لاختبار أداء تحميل عناوين URL المجمعة ، فليس لدينا أي بيانات إمكانية الوصول.

ومع ذلك ، يوفر PSI مزيدًا من المعلومات حول أداء سرعة الصفحة ، مثل “حجم DOM” ، و “Deepest DOM Child Element” ، و “إجمالي عدد المهام” ، وتوقيت “تحميل محتوى DOM”.

ميزة أخرى لواجهة برمجة تطبيقات PageSpeed ​​Insights هي أنها تعطي أسماء مختلفة “للمقاييس المرصودة” و “المقاييس الفعلية”.

ستتعلم في هذا الدليل:

  • كيفية إنشاء نص برمجي بيثون على مستوى الإنتاج.
  • كيفية استخدام واجهات برمجة التطبيقات مع بايثون.
  • كيفية إنشاء إطارات البيانات من استجابات API.
  • كيفية تحليل ردود API.
  • كيفية تحليل عناوين URL ومعالجة الردود من طلبات URL.
  • كيفية تخزين استجابات API بالهيكل المناسب.

يظهر أدناه نموذج ناتج من استدعاء Page Speed ​​Insights API مع Python.

عينة من إخراج Page Speed ​​Insightsلقطة من قبل المؤلف ، يونيو 2022

مكتبات لاستخدام PageSpeed ​​Insights API مع Python

فيما يلي المكتبات اللازمة لاستخدام واجهة برمجة تطبيقات PSI مع Python.

  • أدوات الدعاية يسترد عناوين URL التجريبية من خريطة موقع الويب.
  • الباندا هو بناء إطار البيانات وتسطيح إخراج JSON من API.
  • تتكون الاستعلامات من تقديم طلب إلى نقطة نهاية API المحددة.
  • JSON هو أخذ الرد من API ووضعه في نقطة القاموس المرتبطة على وجه التحديد.
  • Datetime هو تعديل اسم ملف الإخراج المحدد بالتاريخ الحالي.
  • URLlib هو تحليل عنوان URL لموقع الويب الخاص بموضوع الاختبار.

كيف تستخدم PSI API مع Python؟

لاستخدام PSI API مع Python ، اتبع الخطوات أدناه.

  • احصل على مفتاح واجهة برمجة تطبيقات PageSpeed ​​Insights.
  • استيراد المكتبات اللازمة.
  • قم بتحليل عنوان URL لموقع الويب الخاص بموضوع الاختبار.
  • خذ التاريخ الحالي لاسم الملف.
  • خذ عناوين URL في قائمة من خريطة الموقع.
  • اختر المقاييس التي تريدها من PSI API.
  • قم بإنشاء حلقة For لأخذ استجابة API لجميع عناوين URL.
  • قم ببناء إطار البيانات باستخدام مقاييس PSI API المختارة.
  • إخراج النتائج كـ XLSX.

1. احصل على PageSpeed ​​Insights API Key

استخدم ال واجهة برمجة تطبيقات PageSpeed ​​Insights وثائق للحصول على مفتاح API.

انقر فوق الزر “الحصول على المفتاح” أدناه.

api key psi صورة من developer.google.com ، حزيران (يونيو) 2022

اختر مشروعًا قمت بإنشائه في Google Developer Console.

مشروع واجهة برمجة تطبيقات Google Developer Consoleصورة من developer.google.com ، حزيران (يونيو) 2022

تفعيل PageSpeed ​​Insights API في هذا المشروع المحدد.

تفعيل معلومات سرعة الصفحة apiصورة من developer.google.com ، حزيران (يونيو) 2022

ستحتاج إلى استخدام مفتاح API المحدد في طلبات API الخاصة بك.

2. استيراد المكتبات اللازمة

استخدم الأسطر أدناه لاستيراد المكتبات الأساسية.

    import advertools as adv
    import pandas as pd
    import requests
    import json
    from datetime import datetime
    from urllib.parse import urlparse

3. تحليل عنوان URL لموقع الويب الخاص بموضوع الاختبار

لتحليل عنوان URL لموقع الويب المتأثر ، استخدم بنية الشفرة أدناه.

  domain = urlparse(sitemap_url)
  domain = domain.netloc.split(".")[1]

متغير “domain” هو النسخة التي تم تحليلها من عنوان URL لخريطة الموقع.

يمثل “netloc” قسم النطاق لعنوان URL المحدد. عندما نقسمها مع “.” يأخذ “القسم الأوسط” الذي يمثل اسم المجال.

هنا ، “0” لـ “www” ، و “1” لـ “domain name” ، و “2” لـ “domain extension” ، إذا قسمناه بـ “.”

4. خذ التاريخ الحالي لاسم الملف

لأخذ تاريخ وقت استدعاء الوظيفة المحدد ، استخدم طريقة “datetime.now”.

يوفر Datetime.now الوقت المحدد للوقت المحدد. استخدم “strftime” مع القيم “٪ Y” و “٪ m” و “٪ d”. “٪ Y” هي السنة. تعد “٪ m” و “٪ d” قيمتين رقميتين لـ الشهر واليوم المحدد.

 date = datetime.now().strftime("%Y_%m_%d")

5. خذ عناوين URL في قائمة من خريطة الموقع

لأخذ عناوين URL كقائمة من ملف خريطة الموقع ، استخدم كتلة التعليمات البرمجية أدناه.

   sitemap = adv.sitemap_to_df(sitemap_url)
   sitemap_urls = sitemap["loc"].to_list()

إذا قرأت ملف التدقيق الصحي لخريطة موقع Pythonيمكنك قراءة المزيد عن خرائط المواقع.

6. اختر المقاييس التي تريدها من PSI API

لاختيار خصائص JSON لاستجابة PSI API ، يجب أن ترى ملف JSON نفسه.

إنه وثيق الصلة بقراءة عناصر JSON وتحليلها وتسويتها.

بل إنها مرتبطة بـ الدلالي SEOبفضل مفهوم “الرسم البياني الموجه” والبيانات المنظمة “JSON-LD”.

في هذه المقالة ، لن نركز على فحص تسلسلات JSON الهرمية المحددة لاستجابة PSI API.

يمكنك رؤية المقاييس التي اخترتها لتجميعها من واجهة برمجة تطبيقات PSI. إنه أكثر ثراءً من الناتج الافتراضي الأساسي لـ PSI API ، والذي يعطي فقط Core Web Vitals ، أو Speed ​​Index-Interaction to Next Paint ، و Time to First Byte ، و First Contentful Paint.

بالطبع ، فإنه يعطي أيضًا “اقتراحات” بقوله “تجنب تسلسل الطلبات الحرجة” ، ولكن ليست هناك حاجة لوضع جملة في كتلة البيانات.

في المستقبل ، يمكن أخذ هذه الاقتراحات ، أو حتى كل حدث سلسلة فردي ، وقيم KB و MS في عمود واحد باسم “psi_suggestions”.

بالنسبة للمبتدئين ، يمكنك التحقق من المقاييس التي اخترتها ، وسيكون قدرًا كبيرًا منها أولًا بالنسبة لك.

مقاييس PSI API ، القسم الأول أدناه.

    fid = []
    lcp = []
    cls_ = []
    url = []
    fcp = []
    performance_score = []
    total_tasks = []
    total_tasks_time = []
    long_tasks = []
    dom_size = []
    maximum_dom_depth = []
    maximum_child_element = []
    observed_fcp  = []
    observed_fid = []
    observed_lcp = []
    observed_cls = []
    observed_fp = []
    observed_fmp = []
    observed_dom_content_loaded = []
    observed_speed_index = []
    observed_total_blocking_time = []
    observed_first_visual_change = []
    observed_last_visual_change = []
    observed_tti = []
    observed_max_potential_fid = []

يتضمن هذا القسم جميع مقاييس سرعة الصفحة الأساسية التي تمت ملاحظتها ومحاكاتها ، بالإضافة إلى بعض المقاييس غير الأساسية ، مثل “DOM Content Loaded” أو “أول لوحة مهمة. “

يركز القسم الثاني من مقاييس PSI على توفير البايت والوقت الممكن من مقدار الكود غير المستخدم.

    render_blocking_resources_ms_save = []
    unused_javascript_ms_save = []
    unused_javascript_byte_save = []
    unused_css_rules_ms_save = []
    unused_css_rules_bytes_save = []

يركز القسم الثالث من مقاييس PSI على وقت استجابة الخادم أو الفوائد أو غير ذلك من استخدام الصور المتجاوبة باستخدام الضرر.

    possible_server_response_time_saving = []
    possible_responsive_image_ms_save = []

ملاحظة: تأتي نتيجة الأداء الإجمالية من “performance_score”.

7. قم بإنشاء حلقة For لأخذ استجابة API لجميع عناوين URL

الحلقة for هي أخذ جميع عناوين URL من ملف Sitemap واستخدام واجهة برمجة تطبيقات PSI لكل منها واحدًا تلو الآخر. تحتوي حلقة for لأتمتة PSI API على عدة أقسام.

يبدأ القسم الأول من واجهة برمجة تطبيقات PSI للتكرار بمنع عناوين URL المكررة.

في ملفات Sitemap ، قد ترى عنوان URL يظهر عدة مرات. هذا القسم يمنعه.

for i in sitemap_urls[:9]:
         # Prevent the duplicate "/" trailing slash URL requests to override the information.
         if i.endswith("/"):
               r = requests.get(f"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={i}&strategy=mobile&locale=en&key={api_key}")
         else:
               r = requests.get(f"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={i}/&strategy=mobile&locale=en&key={api_key}")

لا تنس التحقق من “api_key” في نهاية نقطة نهاية PageSpeed ​​Insights API.

تحقق من رمز الحالة. في ملفات Sitemap ، قد تكون هناك عناوين URL لرموز الحالة بخلاف 200 ؛ هذه تحتاج إلى التنظيف.

         if r.status_code == 200:
               #print(r.json())
               data_ = json.loads(r.text)
               url.append(i)

يضيف القسم التالي المقاييس المحددة إلى القاموس المحدد الذي أنشأناه قبل “_data”.

               fcp.append(data_["loadingExperience"]["metrics"]["FIRST_CONTENTFUL_PAINT_MS"]["percentile"])
               fid.append(data_["loadingExperience"]["metrics"]["FIRST_INPUT_DELAY_MS"]["percentile"])
               lcp.append(data_["loadingExperience"]["metrics"]["LARGEST_CONTENTFUL_PAINT_MS"]["percentile"])
               cls_.append(data_["loadingExperience"]["metrics"]["CUMULATIVE_LAYOUT_SHIFT_SCORE"]["percentile"])
               performance_score.append(data_["lighthouseResult"]["categories"]["performance"]["score"] * 100)

يركز القسم التالي على عدد “المهام الإجمالية” وحجم DOM.

               total_tasks.append(data_["lighthouseResult"]["audits"]["diagnostics"]["details"]["items"][0]["numTasks"])
               total_tasks_time.append(data_["lighthouseResult"]["audits"]["diagnostics"]["details"]["items"][0]["totalTaskTime"])
               long_tasks.append(data_["lighthouseResult"]["audits"]["diagnostics"]["details"]["items"][0]["numTasksOver50ms"])
               dom_size.append(data_["lighthouseResult"]["audits"]["dom-size"]["details"]["items"][0]["value"])

يأخذ القسم التالي “عمق DOM” و “أعمق عنصر DOM”.

               maximum_dom_depth.append(data_["lighthouseResult"]["audits"]["dom-size"]["details"]["items"][1]["value"])
               maximum_child_element.append(data_["lighthouseResult"]["audits"]["dom-size"]["details"]["items"][2]["value"])

يوضح القسم التالي نتائج الاختبار المحددة التي تمت ملاحظتها خلال واجهة برمجة تطبيقات Page Speed ​​Insights API.

               observed_dom_content_loaded.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedDomContentLoaded"])
               observed_fid.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedDomContentLoaded"])
               observed_lcp.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["largestContentfulPaint"])
               observed_fcp.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["firstContentfulPaint"])
               observed_cls.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["totalCumulativeLayoutShift"])
               observed_speed_index.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedSpeedIndex"])
               observed_total_blocking_time.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["totalBlockingTime"])
               observed_fp.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedFirstPaint"])
               observed_fmp.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["firstMeaningfulPaint"])
               observed_first_visual_change.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedFirstVisualChange"])
               observed_last_visual_change.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedLastVisualChange"])
               observed_tti.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["interactive"])
               observed_max_potential_fid.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["maxPotentialFID"])

يأخذ القسم التالي مقدار التعليمات البرمجية غير المستخدمة والبايتات المهدرة ، بالمللي ثانية ، بالإضافة إلى موارد حظر العرض.

               render_blocking_resources_ms_save.append(data_["lighthouseResult"]["audits"]["render-blocking-resources"]["details"]["overallSavingsMs"])
               unused_javascript_ms_save.append(data_["lighthouseResult"]["audits"]["unused-javascript"]["details"]["overallSavingsMs"])
               unused_javascript_byte_save.append(data_["lighthouseResult"]["audits"]["unused-javascript"]["details"]["overallSavingsBytes"])
               unused_css_rules_ms_save.append(data_["lighthouseResult"]["audits"]["unused-css-rules"]["details"]["overallSavingsMs"])
               unused_css_rules_bytes_save.append(data_["lighthouseResult"]["audits"]["unused-css-rules"]["details"]["overallSavingsBytes"])

القسم التالي هو تقديم فوائد الصورة سريعة الاستجابة ووقت استجابة الخادم.

               possible_server_response_time_saving.append(data_["lighthouseResult"]["audits"]["server-response-time"]["details"]["overallSavingsMs"])      
               possible_responsive_image_ms_save.append(data_["lighthouseResult"]["audits"]["uses-responsive-images"]["details"]["overallSavingsMs"])

القسم التالي هو التأكد من أن الوظيفة تستمر في العمل على الخطأ.

         else:
           continue

مثال على استخدام Page Speed ​​Insights API مع Python للاختبار الجماعي

لاستخدام كتل تعليمات برمجية محددة ، ضعها في دالة Python.

قم بتشغيل البرنامج النصي وستحصل على 29 مقياسًا متعلقًا بسرعة الصفحة في الأعمدة أدناه.

واجهة برمجة تطبيقات معلومات سرعة الصفحةلقطة من قبل المؤلف ، يونيو 2022

استنتاج

توفر PageSpeed ​​Insights API أنواعًا مختلفة من ملفات مقاييس أداء تحميل الصفحة.

يوضح كيف ينظر مهندسو Google إلى مفهوم أداء تحميل الصفحة وفي النهاية يستخدمون هذه المقاييس كمنظور للترتيب وتجربة المستخدم وفهم الجودة.

يمنحك استخدام Python لاختبار سرعة الصفحة المجمعة نظرة ثاقبة على موقع الويب بالكامل لمساعدتك في تحليل تجربة المستخدم المحتملة ، وكفاءة الزحف ، ومعدل التحويل ، وتحسينات الترتيب.

المزيد من الموارد:


الصورة المميزة: Dundanim / Shutterstock


#اختبار #أداء #التحميل #المجمع #باستخدام #PageSpeed #Insights #API #Python

المصدر

reaction:

تعليقات