نحوه استفاده از پایتون برای نظارت و اندازه گیری عملکرد وب سایت

طی یک ماه گذشته ، گوگل پیشرفت های زیادی را در مورد چگونگی سنجش تجربه کاربر از طریق اندازه گیری های کلیدی سرعت و عملکرد ارائه داده است.

به طور هم زمان ، من سعی کرده ام یک اسکریپت پایتون را جمع آوری کنم که از API Google PageSpeed ​​Insights (PSI) برای جمع آوری معیارها برای تعدادی از صفحات به طور همزمان استفاده می کند ، بدون اینکه نیازی به اجرای آزمون برای هر URL اختصاصی باشد.

به دنبال اعلامیه های گوگل ، فکر کردم اکنون زمان مناسب برای به اشتراک گذاری آن است ، و همچنین توضیح می دهم که چگونه می توانید این اسکریپت پایتون دوستانه مبتدی را ایجاد کنید.

بهترین چیز در مورد فیلمنامه این است که به محض اینکه پایه ها را تنظیم کردید ، می توانید تعدادی از معیارهای مختلف را پیدا کنید که می توانید در تست سرعت صفحه و همچنین آنالیز لایت هاوس قرار بگیرید.

مقدمه ای بر اندازه گیری های حیاتی وب

در آغاز ماه مه ، گوگل Core Web Vitals را معرفی کرد که زیر مجموعه ای از معیارهای کلیدی Web Vitals محسوب می شود.

تبلیغات

ادامه خواندن زیر

این معیارها برای ارائه راهنمایی در مورد کیفیت تجربه کاربر در وب سایت استفاده می شود.

گوگل آنها را به عنوان روشی برای “كمك كردن به تجربه سایت شما و شناسایی فرصتها برای بهبود” توصیف كرده است ، و همچنین بر تغییر آنها به سمت تمرکز روی تجربه كاربر تأکید كرد.

Core Web Vitals معیارهای محور کاربر واقع در دنیای واقعی است که جنبه های اصلی تجربه کاربر را اندازه گیری می کند. زمان بار ، تعامل و ثبات.

من نمی توانم جزئیات بیشتری را در این پست توضیح دهم – در اینجا می توانید اطلاعات بیشتری کسب کنید – اما این معیارهای جدید عبارتند از:

  • بزرگترین رنگ محتوا.
  • تأخیر ورودی اول.
  • Shift Layout Layout.

LCP - FID - CLS

علاوه بر این ، گوگل هفته گذشته اعلام کرد که آنها سیگنال جدید رتبه بندی جستجو را معرفی می کنند که این معیارها را با سیگنال های تجربه موجود در صفحه ، مانند دوستی موبایل و امنیت HTTPS ترکیب می کند تا از ادامه خدمات وب سایت های با کیفیت بالا اطمینان حاصل کند. به کاربران

تبلیغات

ادامه خواندن زیر

نظارت بر معیارهای عملکرد

انتظار می رود این بروزرسانی در سال 2021 به پایان برسد و گوگل تأیید کرده است که نیازی به اقدام فوری نیست.

با این حال ، به منظور کمک به ما در آماده سازی برای این تغییرات ، ابزارهای مورد استفاده برای اندازه گیری سرعت صفحه از جمله PSI ، Google Lighthouse و گزارش سرعت کنسول جستجوی Google را به روز کردند.

از کجا می توان API Pagespeed Insights را وارد این کار کرد؟

PageSpeed ​​Insights Google ابزاری مفید برای مشاهده خلاصه عملکرد صفحه وب است و از داده های میدانی و آزمایشگاهی برای تولید نتایج استفاده می کند.

این یک راه عالی برای به دست آوردن یک مرور کلی از تعداد URL های اینترنتی است ، زیرا از آن به صورت پایه در هر صفحه استفاده می شود.

با این حال ، اگر شما در یک سایت بزرگ مشغول به کار هستید و می خواهید بینش را در مقیاس بدست آورید ، API می تواند به صورت همزمان تجزیه و تحلیل تعدادی از صفحات مفید باشد ، بدون اینکه نیاز به وصل کردن آدرس های اینترنتی بصورت جداگانه باشد.

اسکریپت پایتون برای اندازه گیری عملکرد

من برای اندازه گیری معیارهای عملکرد کلیدی در مقیاس ، اسکریپت زیر پایتون را ایجاد کرده ام تا بتوانم در زمان صرف شده در تست دستی هر URL ، صرفه جویی کنم.

این اسکریپت از پایتون برای ارسال درخواست به Google PSI API به منظور جمع آوری و استخراج معیارهایی که در PSI و Lighthouse نمایش داده می شوند ، استفاده می کند.

من تصمیم گرفتم این اسکریپت را در Google Colab بنویسم زیرا این یک راه عالی برای شروع نوشتن پایتون است و امکان اشتراک گذاری آسان را نیز فراهم می کند ، بنابراین این پست با استفاده از Google Colab از طریق تنظیمات اجرا می شود.

اما ، با چند ترفند در بارگذاری و بارگیری داده ها ، می توان آن را به صورت محلی نیز اجرا کرد.

توجه به این نکته ضروری است که برخی مراحل ممکن است برای تکمیل شدن ، به خصوص زمانی که هر URL از طریق API اجرا می شود ، مدتی طول بکشد ، تا این بار با درخواست ها اضافه نشود.

بنابراین ، می توانید فیلمنامه را در پس زمینه اجرا کنید و پس از اتمام مراحل ، دوباره به آن برگردید.

مقاله پیشنهادی  چه چیزی برای صفحات محصول و سئو بهتر است: محتوا یا بک لینک؟

بیایید مراحل لازم را برای راه اندازی و اجرای این اسکریپت طی کنیم.

مرحله 1: بسته های لازم را نصب کنید

قبل از شروع نوشتن هر کد ، باید برخی از بسته های پایتون را که قبل از استفاده از اسکریپت مورد نیاز است ، نصب کنیم. اینها به راحتی با استفاده از عملکرد واردات قابل نصب هستند.

تبلیغات

ادامه خواندن زیر

بسته های مورد نیاز ما عبارتند از:

  • اورلیب: برای کار با ، باز کردن ، خواندن و تجزیه URL ها.
  • json: به شما امکان می دهد تا یک فایل JSON را به پایتون یا یک فایل پایتون به JSON تبدیل کنید.
  • درخواست ها: یک کتابخانه HTTP برای ارسال انواع درخواست HTTP.
  • پاندا: عمدتا برای تجزیه و تحلیل داده ها و دستکاری استفاده می شود ، ما از آن برای ایجاد DataFrames استفاده می کنیم.
  • زمان: ماژولی برای کار با اوقات فراغت ، ما از آن استفاده می کنیم تا یک زمان بین درخواستها ایجاد کنیم.
  • فایل ها: از Google Colab ، این امکان را به شما می دهد تا پرونده ها را بارگذاری و بارگیری کنید.
  • ایو: رابط پیش فرض مورد استفاده برای دسترسی به پرونده ها.
# Import required packages 
import json
import requests
import pandas as pd
import urllib
import time
from google.colab import files
import io 

مرحله 2: درخواست API را تنظیم کنید

مرحله بعدی تنظیم درخواست API است. دستورالعمل های کامل را می توان در اینجا یافت ، اما در اصل این دستور به این شکل است:

https://www.googleapis.com/pagespeedonline/v5/runPagespeed؟url={yourURL}/&strategy=mobile/&key={yourAPIKey

این به شما امکان می دهد URL ، استراتژی (دسک تاپ یا موبایل) و کلید API خود را اضافه کنید.

برای استفاده از آن با پایتون ، از کتابخانه درخواست urllib استفاده خواهیم کرد urllib. درخواست.urlopen و آن را به متغیری بنامید نتیجه تا بتوانیم نتایج را ذخیره کنیم و دوباره از آنها استفاده کنیم.

# Define URL  
url = 'https://www.example.co.uk'

# API request url
result = urllib.request.urlopen('https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={}/&strategy=mobile'
.format(url)).read().decode('UTF-8')

print(result)

مرحله 3: تست API

برای تست صحیح API ، و همچنین درک درستی از آنچه در طول آزمایش ایجاد می شود ، یک URL را از طریق API با استفاده از روش ساده urllib.quest اجرا کردم.

تبلیغات

ادامه خواندن زیر

پس از اتمام این کار ، من نتیجه را به یک فایل json تبدیل کردم و آن را بارگیری کردم تا نتیجه را مشاهده کنم.

# Convert to json format
result_json = json.loads(result)

print(result_json)

with open('result.json', 'w') as outfile:
  json.dump(result_json, outfile)

files.download('result.json')

(توجه داشته باشید که این روش برای تبدیل و بارگیری پرونده های JSON در Google Colab است.)

مرحله 4: پرونده JSON را بخوانید

هنگامی که در ویرایشگر کد مورد نظر خود باز کنید ، پرونده JSON به طور معمول شبیه به این موارد خواهد بود.

پرونده JSON

درک آن بسیار دشوار است ، اما استفاده از یک نماینده آنلاین JSON شما را قادر می سازد تا آن را به یک نمای درخت قابل خواندن تبدیل کنید.

نمای درخت قابل خواندن

پرونده JSON Field Field را نمایش می دهد ، که تحت loadingExperience و آزمایشگاه داده ذخیره می شود که می توانید در زیر lighthouseResult پیدا کنید.

تبلیغات

ادامه خواندن زیر

برای استخراج معیارهای مورد نظر ، می توانیم از قالب پرونده JSON استفاده کنیم ، زیرا می توانیم ببینیم کدام متریک در زیر هر بخش قرار دارد.

به عنوان مثال ، First Input Delay تحت loadingExperience یافت می شود.

تأخیر ورودی اول تحت بارگیری Experience

در حالی که First Contentful Paint در زیر فانوس دریایی یافت می شود.

اولین رنگ محتوا در زیر فانوس دریایی یافت می شود Reses

تعداد زیادی از معیارهای دیگر که تحت حسابرسی فانوس دریایی نتیجه ذخیره شده اند ، مانند:

  • شاخص سرعت
  • اولین رنگ محتوا.
  • Shift Layout Layout.

مرحله 5: یک CSV & Store را به عنوان Pandas Dataframe بارگذاری کنید

مرحله بعدی بارگذاری یک فایل CSV از آدرس های اینترنتی است که می خواهیم از طریق PSI API آن را اجرا کنیم. می توانید لیستی از آدرس های اینترنتی سایت خود را از یک ابزار خزنده مانند DeepCrawl تهیه کنید.

تبلیغات

ادامه خواندن زیر

از آنجا که ما از API استفاده می کنیم ، توصیه می کنم از یک نمونه URL کوچکتر از URL ها در اینجا استفاده کنید ، به خصوص اگر سایتی بزرگ دارید.

به عنوان مثال ، می توانید از صفحاتی با بالاترین سطح ترافیک یا صفحاتی استفاده کنید که بیشترین درآمد را دارند. از طرف دیگر ، اگر سایت شما دارای الگوی هایی باشد ، برای آزمایش مجموعه های این موارد عالی خواهد بود.

شما همچنین می توانید یک اضافه کنید ستون ستون متغیر در اینجا ، که هنگام تکرار از طریق لیست ، از آنها استفاده خواهیم کرد. اطمینان حاصل کنید که این با عنوان سر ستون در پرونده CSV که آپلود می کنید مطابقت دارد:

uploaded = files.upload()
#if your column header is something other than 'url' please define it here 
column_header='url'

(لطفا توجه داشته باشید که این روش برای بارگذاری پرونده های CSV در Google Colab است.)

پس از بارگذاری این ، ما از کتابخانه Pandas برای تبدیل CSV به DataFrame استفاده می کنیم ، که می توان آن را در مراحل بعدی تکرار کرد.

# Get the filename from the upload so we can read it into a CSV.
for key in uploaded.keys():
  filename = key
# Read the selected file into a Pandas Dataframe
df = pd.read_csv(io.BytesIO(uploaded[filename]))

df.head()

DataFrame مانند این خواهد بود که با نمایه سازی صفر شروع می شود.

مقاله پیشنهادی  5 تغییر اساسی که در حال جستجو و بازاریابی دیجیتال هستند

dataframe

مرحله 6: نتایج را در یک شی پاسخگویی ذخیره کنید

مرحله بعدی شامل استفاده از برای حلقه برای تکرار DataFrame URL هایی که اخیراً از طریق PSI API ایجاد کرده ایم.

تبلیغات

ادامه خواندن زیر

A for loop به ما امکان می دهد تا از طریق لیستی که بارگذاری کرده ایم و دستور مربوط به هر مورد را تکرار کنیم. سپس می توانیم نتایج را در یک موضوع پاسخ ذخیره کنیم و آن را به یک فایل JSON تبدیل کنیم.

response_object = {}

# Iterate through the df
for x in range(0, len(df)):

        # Define request parameter
        url = df.iloc[x][column_header]

        # Make request
        pagespeed_results = urllib.request.urlopen('https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={}&strategy=mobile'.format(url)).read().decode('UTF-8')

        # Convert to json format
        pagespeed_results_json = json.loads(pagespeed_results)

        # Insert returned json response into response_object
        response_object[url] = pagespeed_results_json
        time.sleep(30)
        
        print(response_object[url])

ما استفاده خواهیم کرد x در محدوده در اینجا ، که URL هایی را که از طریق حلقه در حال اجرا هستیم ، نشان می دهد (0 ، لن) که به شما امکان می دهد حلقه تمام URL های موجود در DataFrame را اجرا کند ، مهم نیست که تعداد آنها شامل چه تعداد باشد.

هدف پاسخ مانع از غلبه بر URL های دیگر در هنگام حلقه می شود و به ما امکان می دهد داده ها را برای استفاده بعدی ذخیره کنیم.

همچنین در اینجا جایی است که ما قبل از تبدیل آن به پرونده JSON ، از متغیر سربرگ ستون برای تعریف پارامتر درخواست URL استفاده خواهیم کرد.

من همچنین زمان خوابیدن در اینجا را به 30 ثانیه تعیین کرده ام ، تا تعداد تماس های API که به صورت متوالی انجام می شود را کاهش دهم.

از طرف دیگر ، اگر می خواهید سریعتر درخواست کنید ، می توانید یک کلید API را در انتهای دستور URL اضافه کنید.

تبلیغات

ادامه خواندن زیر

تورفتگی در اینجا نیز حائز اهمیت است زیرا هر مرحله بخشی از حلقه برای حلقه است ، آنها باید درون فرمان قرار گیرند.

مرحله 7: برای ذخیره پاسخ ها یک Dataframe ایجاد کنید

ما همچنین باید DataFrame بسازیم که معیارهایی را که می خواهیم از شیء پاسخ استخراج کنیم ، ذخیره کند.

DataFrame یک ساختار داده شبیه به یک جدول است ، با ستون ها و ردیف هایی که داده را ذخیره می کنند. ما به سادگی باید ستونی را برای هر متریک اضافه کنیم و آن را به طور مناسب نامگذاری کنیم ، به این ترتیب:

# Create dataframe to store responses
df_pagespeed_results = pd.DataFrame(columns=
          ['url',
          'Overall_Category',
          'Largest_Contentful_Paint',
          'First_Input_Delay',
          'Cumulative_Layout_Shift',
          'First_Contentful_Paint',
          'Time_to_Interactive',
          'Total_Blocking_Time',
          'Speed_Index'])  

print(df_pagespeed_results)

برای اهداف این اسکریپت ، من از معیارهای Core Web Vital ، به همراه معیارهای اضافی بارگیری و تعامل استفاده شده در نسخه فعلی لایت هاوس استفاده کرده ام.

هر یک از این معیارها دارای وزن های مختلفی هستند که از آنها در امتیاز عملکرد کلی استفاده می شوند:

می توانید اطلاعات بیشتری در مورد هر متریک ، همراه با نحوه تفسیر نمرات ، در صفحات فرود شخصی آنها که در بالا به آنها پیوند دارید ، کسب کنید.

تبلیغات

ادامه خواندن زیر

من همچنین انتخاب کرده ام که شامل شاخص سرعت و دسته کلی باشد که نمره آهسته ، متوسط ​​یا سریع را ارائه می دهد.

مرحله هشتم: اندازه گیری ها را از شیء پاسخ استخراج کنید

هنگامی که شیء پاسخ را ذخیره کردیم ، اکنون می توانیم این مورد را فیلتر کرده و معیارهای مورد نظر را استخراج کنیم.

در اینجا ما یک بار دیگر از یک حلقه حلقه برای تکرار از طریق فایل شیء پاسخ استفاده می کنیم و دنباله ای از فهرست های فهرست را تنظیم می کنیم تا فقط معیارهای خاص را بازگرداند.

برای این منظور ، ما نام ستون را از DataFrame تعریف می کنیم ، و همچنین دسته خاص از شی پاسخی را که ما از هر متریک می خواهیم برای هر URL تعریف خواهیم کرد.

for (url, x) in zip(
    response_object.keys(),
    range(0, len(response_object))
):

        # URLs
        df_pagespeed_results.loc[x, 'url'] =
            response_object[url]['lighthouseResult']['finalUrl']

        # Overall Category
        df_pagespeed_results.loc[x, 'Overall_Category'] =
            response_object[url]['loadingExperience']['overall_category']   

        # Core Web Vitals     

        # Largest Contentful Paint    
        df_pagespeed_results.loc[x, 'Largest_Contentful_Paint'] =
        response_object[url]['lighthouseResult']['audits']['largest-contentful-paint']['displayValue']

        # First Input Delay 
        fid = response_object[url]['loadingExperience']['metrics']['FIRST_INPUT_DELAY_MS']
        df_pagespeed_results.loc[x, 'First_Input_Delay'] = fid['percentile']

        # Cumulative Layout Shift    
        df_pagespeed_results.loc[x, 'Cumulative_Layout_Shift'] =
        response_object[url]['lighthouseResult']['audits']['cumulative-layout-shift']['displayValue']

        # Additional Loading Metrics 

        # First Contentful Paint 
        df_pagespeed_results.loc[x, 'First_Contentful_Paint'] =
        response_object[url]['lighthouseResult']['audits']['first-contentful-paint']['displayValue']

        # Additional Interactivity Metrics 

        # Time to Interactive  
        df_pagespeed_results.loc[x, 'Time_to_Interactive'] =
        response_object[url]['lighthouseResult']['audits']['interactive']['displayValue']

        # Total Blocking Time   
        df_pagespeed_results.loc[x, 'Total_Blocking_Time'] =
        response_object[url]['lighthouseResult']['audits']['total-blocking-time']['displayValue']

        # Speed Index
        df_pagespeed_results.loc[x, 'Speed_Index'] =
        response_object[url]['lighthouseResult']['audits']['speed-index']['displayValue']

من این اسکریپت را تنظیم کرده ام تا معیارهای کلیدی را که در بالا به آنها اشاره کردم استخراج کنم ، بنابراین می توانید بلافاصله از آن برای جمع آوری این داده ها استفاده کنید.

مقاله پیشنهادی  رئیس جدید جستجوی Google - Prabhakar Rakhavan

با این وجود ، می توان تعدادی از معیارهای مفید دیگر را که در هر دو تست PSI و همچنین تحلیل لایت هاوس یافت می شود ، بیرون کشید.

تبلیغات

ادامه خواندن زیر

در اینجاست که فایل JSON برای بررسی مکان های موجود در لیست مفید است.

به عنوان مثال ، هنگام استخراج معیارها از ممیزی های Lighthouse مانند مقدار نمایش Time to Interactive ، از موارد زیر استفاده می کنید:

df_pagespeed_results.loc[x, 'Time_to_Interactive'] =
response_object[url]['lighthouseResult']['audits']['interactive']['displayValue']

یک بار دیگر ، مهم است که اطمینان حاصل کنید که هر یک از این موارد در داخل حلقه قرار می گیرند ، در غیر این صورت آنها در این تکرار قرار نمی گیرند و فقط یک نتیجه برای یک URL ایجاد می شود.

DataFrame نهایی ما اینگونه به نظر می رسد؛

dataframe نهایی

مرحله 9: DataFrame را به یک پرونده CSV تبدیل کنید

مرحله آخر ایجاد یک فایل خلاصه برای جمع آوری تمام نتایج است ، بنابراین می توانیم این امر را به فرمی تبدیل کنیم که بتوانیم به راحتی مثلاً یک فایل CSV آنالیز کنیم.

summary = df_pagespeed_results

df_pagespeed_results.head()

#Download csv file 
summary.to_csv('pagespeed_results.csv')
files.download('pagespeed_results.csv')

(توجه داشته باشید که این روش برای تبدیل و بارگیری پرونده های CSV در Google Colab است.)

تبلیغات

ادامه خواندن زیر

اطلاعات بیشتر را کاوش کنید

تمام معیارهایی که صادر کرده ایم در حال حاضر به صورت رشته هایی ذخیره می شوند که از داده های پایتون برای متن و کاراکترها است.

از آنجا که برخی از معیارهایی که ما استخراج می کنیم در واقع مقادیر عددی هستند ، ممکن است بخواهید رشته ها را به داده های عددی مانند عدد صحیح و اعداد شناور تبدیل کنید.

علاقه ها ، همچنین به عنوان int شناخته می شوند ، داده های مربوط به تعداد کامل ، مانند 1 و 10 است.

اعداد نقطه شناور ، که به عنوان float نیز شناخته می شوند ، اعداد اعشاری مانند 1.0 و 10.1 هستند.

برای تبدیل رشته های ما به اعداد ، دو مرحله وجود دارد که باید انجام دهیم ، اولین کار این است که شخصیت (که برای نمایش ثانیه ها استفاده می شود) را با یک فضای خالی جایگزین کنید.

ما این کار را با استفاده از .str.replace روش در هر ستون

#Replace the 's' with a blank space so we can turn into numbers
df_pagespeed_results['Largest_Contentful_Paint'] = df_pagespeed_results.Largest_Contentful_Paint.str.replace('s', '')
df_pagespeed_results['First_Contentful_Paint'] = df_pagespeed_results.First_Contentful_Paint.str.replace('s', '')
df_pagespeed_results['Time_to_Interactive'] = df_pagespeed_results.Time_to_Interactive.str.replace('s', '')
df_pagespeed_results['Total_Blocking_Time'] = df_pagespeed_results.Total_Blocking_Time.str.replace('ms', '')
df_pagespeed_results['Speed_Index'] = df_pagespeed_results.Speed_Index.str.replace('s', '')

سپس از آن استفاده خواهیم کرد .استيپ () روش تبدیل رشته ها به عدد صحیح یا عدد نقطه شناور:

#Turn strings into intergers or floats
df_pagespeed_results['Largest_Contentful_Paint'] = df_pagespeed_results.Largest_Contentful_Paint.astype(float)
df_pagespeed_results['Cumulative_Layout_Shift'] = df_pagespeed_results.Cumulative_Layout_Shift.astype(int)
df_pagespeed_results['First_Contentful_Paint'] = df_pagespeed_results.First_Contentful_Paint.astype(float)
df_pagespeed_results['Time_to_Interactive'] = df_pagespeed_results.Time_to_Interactive.astype(float)
df_pagespeed_results['Speed_Index'] = df_pagespeed_results.Speed_Index.astype(float)

پس از انجام این کار ، می توانید از چندین روش مختلف برای ارزیابی بیشتر داده ها استفاده کنید.

تبلیغات

ادامه خواندن زیر

به عنوان مثال ، می توانید از کتابخانه های تجسم داده مانند matplotlib یا seaborn برای تجسم معیارها استفاده کنید ، همچنین می توانید نحوه تغییر آنها به مرور زمان و نتایج گروه ها را به سطل های کند ، متوسط ​​و سریع اندازه گیری کنید.

من در این مقاله این موارد را پوشش نمی دهم ، همانطور که قبلاً مطالب زیادی را پوشش داده ایم ، اما اگر دوست دارید اطلاعات بیشتری کسب کنید ، لطفاً احساس راحتی کنید.

در نتیجه

این اسکریپت در نهایت به من کمک کرده است تا سرعت صفحه کلید و معیارهای عملکرد برای گروهی از URL ها را اندازه گیری کنم ، و همچنین تجسم نتایج را به منظور شناسایی صفحات که در آنجا نیاز به پیشرفت دارند.

همچنین به شما این امکان را می دهد تا نتایج را با گذشت زمان کنترل کنید و پیشرفت های انجام شده را کمیت کنید.

من همچنین یک اسکریپت را برای اندازه گیری صدک ها و دسته بندی ها برای سه هسته اصلی ویتامین ایجاد کردم. شما می توانید آن را اینجا پیدا کنید.

امیدوارم که این امر برای هرکسی که به دنبال اتوماسیون تست عملکرد خود است و بررسی بیشتر API PSI مفید باشد ، مفید باشد.

تبلیغات

ادامه خواندن زیر

لطفاً یک نسخه از این پرونده Colab را ذخیره کنید و از آن برای سنجش و نظارت بر سرعت صفحه خود استفاده کنید ، یا مراحل نوشتن خود را دنبال کنید. شما می توانید به همه قطعه های کد من در این پست به اشتراک بگذارید در اینجا.

منابع بیشتر:


اعتبار تصویر

تمام تصاویر گرفته شده توسط نویسنده ، ژوئن 2020