CrUX History API מספק גישה עם זמן אחזור קצר לנתונים היסטוריים של חוויית משתמש אמיתית מ-6 חודשים, ברמת פירוט של דף ומקור.
תרחיש לדוגמה נפוץ
ה-CrUX History API מאפשר לשלוח שאילתות על מדדים היסטוריים של חוויית משתמש עבור URI ספציפי, כמו "קבלו את המגמות ההיסטוריות של חוויית המשתמש במקור https://example.com
".
ה-History API פועל לפי אותו מבנה כמו CrUX API היומי, חוץ מהעובדה שהערכים מוצגים במערך והמפתחות מסומנים בשמות רבים (לדוגמה, histogramTimeseries
במקום histogram
או p75s
במקום p75
).
מפתח API של CrUX
בדומה ל-API היומי, שימוש ב-CrUX History API מחייב מפתח Google Cloud API מוקצה לשימוש ב-Chrome UX Report API
. ניתן להשתמש באותו מפתח גם עבור ה-API היומי וגם עבור ה-API להיסטוריה.
קבלת מפתח API ושימוש בו
לקבלת מפתחאפשר גם ליצור כרטיס בדף פרטי כניסה.
אחרי שיש לכם מפתח API, האפליקציה יכולה לצרף את פרמטר השאילתה
key=yourAPIKey
בכל כתובות ה-URL של הבקשות.
מפתח ה-API בטוח להטמעה בכתובות URL. ללא צורך בקידוד.
ראו שאילתות לדוגמה.
מודל נתונים
בקטע הזה מפורט מבנה הנתונים בבקשות ובתגובות.
הקלטה
פיסת מידע נפרדת לגבי דף או אתר. רשומה יכולה לכלול נתונים ספציפיים למזהה ולשילוב ספציפי של מאפיינים. רשומה יכולה להכיל נתונים לגבי מדד אחד או יותר.
מזהים
המזהים מציינים אילו רשומות צריך לחפש. ב-CrUX, המזהים האלה הם דפי אינטרנט ואתרים.
מקור
כשהמזהה הוא מקור, כל הנתונים שקיימים בכל הדפים באותו מקור נצברים יחד. לדוגמה, נניח שבמקור http://www.example.com
היו דפים כפי שהוגדרו על ידי ה-sitemap הזה:
http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html
כלומר, כשמבצעים שאילתה בדוח חוויית המשתמש ב-Chrome כשהמקור מוגדר ל-http://www.example.com
, הנתונים של http://www.example.com/
, http://www.example.com/foo.html
ו-http://www.example.com/bar.html
מוחזרים באופן מצטבר, כי כל אלה הם דפים מהמקור הזה.
כתובות URL
כאשר המזהה הוא כתובת URL, יוחזרו רק הנתונים לגבי כתובת ה-URL הספציפית הזו. מחפשים שוב את sitemap המקור של http://www.example.com
:
http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html
אם המזהה מוגדר כ-URL עם הערך http://www.example.com/foo.html
, יוחזרו רק הנתונים לגבי הדף הזה.
מידות
המאפיינים מזהים קבוצה ספציפית של נתונים שמהם נאספים נתונים. לדוגמה, גורם צורה של PHONE
מציין שהרשומה מכילה מידע על טעינות שבוצעו במכשיר נייד.
ה-CrUX History API זמין רק במצטבר לפי מאפיין של גורם צורה. זהו סיווג כללי של מכשירים שמפוצלים ל-PHONE
, ל-TABLET
ול-DESKTOP
.
מדד
אנחנו מדווחים על מדדים בצבירת נתונים סטטיסטיים, כמו היסטוגרמות, אחוזונים ושברים.
היסטוגרמות
כאשר מדדים מבוטאים במערך היסטוגרמה, כל ערך של Timeeries מייצג את האחוז טעינה של דפים שבהם המדד נכנס למרווח זמן באופן יחסי לכולם. הנקודות על הגרף מוצגות לפי סדר התאריכים של תקופת האיסוף שהוחזר גם על ידי ה-API. הנקודה הראשונה היא התקופה המוקדמת ביותר והנקודה הסופית היא תקופת האיסוף האחרונה.
היסטוגרמה של שלוש bin עבור מדד לדוגמה נראית כך:
{
"histogramTimeseries": [
{
"start": 0,
"end": 2500,
"densities": [0.9190, 0.9203, 0.9194, 0.9195, 0.9183, 0.9187]
},
{
"start": 2500,
"end": 4000,
"densities": [0.0521, 0.0513, 0.0518, 0.0518, 0.0526, 0.0527]
},
{
"start": 4000,
"densities": [0.0288, 0.0282, 0.0286, 0.0285, 0.0290, 0.0285]
}
],
}
הנתונים האלה מצביעים על כך שב-91.90% מטעינות הדפים נמצא ערך המדד לדוגמה בין 0 אלפיות השנייה ל-2,500 אלפיות שנייה, בתקופת האיסוף הראשונה בהיסטוריה, ואחריה 92.03%, 91.94%... יחידות המדד לא נכללות בהיסטוגרמה הזו. במקרה הזה נניח אלפיות השנייה.
בנוסף, ב-5.21% מטעינות הדפים נעשה שימוש בערך של המדד לדוגמה בין 2,500 אלפיות השנייה ל-4,000 אלפיות השנייה בתקופת האיסוף הראשונה בהיסטוריה, וב-2.88% מטעינות הדפים היה ערך של יותר מ-4,000 אלפיות השנייה בתקופת האיסוף הראשונה בהיסטוריה.
אחוזונים
המדדים עשויים לכלול גם סדרות זמן של אחוזונים שיכולות להיות שימושיות לניתוח נוסף.
הנקודות על הגרף מוצגות לפי סדר התאריכים של תקופת האיסוף שהוחזר גם על ידי ה-API. הנקודה הראשונה היא התקופה המוקדמת ביותר והנקודה הסופית היא תקופת האיסוף האחרונה.
{
"percentilesTimeseries": {
"p75s": [1362, 1352, 1344, 1356, 1366, 1377]
},
}
האחוזונים האלה יכולים להציג ערכים ספציפיים של מדד מסוים באחוזון הנתון של אותו מדד. הם מבוססים על הקבוצה המלאה של הנתונים הזמינים ולא על הנתונים המסופים הסופיים, לכן הם לא בהכרח תואמים לאחוזון אינטרפולטיבי שמבוסס על ההיסטוגרמה המקובצת הסופית.
שברים
אפשר לבטא את המדדים כזמנים של שברים מתויגים. כל תווית מתארת טעינת דף באופן ספציפי בדרך הזו. הנקודות על הגרף מוצגות לפי סדר התאריכים של תקופת האיסוף שהוחזר גם על ידי ה-API. הנקודה הראשונה היא התקופה המוקדמת ביותר והנקודה הסופית היא תקופת האיסוף האחרונה.
דוגמה:
{
"fractionTimeseries": {
"desktop": {"fractions": [0.3195, 0.2115, 0.1421]},
"phone": {"fractions": [0.6295, 0.7544, 0.8288]},
"tablet": {"fractions": [0.051, 0.0341, 0.029]}
}
}
בדוגמה הזו, הנקודה האחרונה על הגרף מציינת ש-14.21% מטעינות הדפים הגיעו ממחשבים ו-82.88% הגיעו מטלפונים.
סוגים של ערכי מדדים
ב-CrUX History API נעשה שימוש באותם סוגים של ערכים של מדדים, לכן אתם יכולים לעיין בתיעוד היומי של סוגי הערכים של מדדי CrUX API לקבלת פרטים נוספים.
עמידה של מדדים בדרישות
בהתאם לקריטריונים לזכאות, יכול להיות שמקור או כתובת URL יעמדו בדרישות רק בחלק מתקופות האיסוף שכלולות ב-CrUX History API. במקרים כאלה, CrUX History API יחזיר את הערך "NaN"
עבור הצפיפויות histogramTimeseries
ואת הערך null
עבור percentilesTimeseries
בתקופות האיסוף שבהן אין נתונים שעומדים בדרישות. הסיבה להבדל היא שצפיפות ההיסטוגרמה תמיד מספרים, בעוד שפרמטרים של אחוזונים יכולים להיות מספרים או מחרוזות (CLS משתמש במחרוזות, גם אם הן נראות כמו מספרים).
לדוגמה, אם בתקופה השנייה לא היו נתונים כשירים, הנתונים יוצגו כך:
{
"histogramTimeseries": [
{
"start": 0,
"end": 2500,
"densities": [0.9190, "NaN", 0.9194, 0.9195, 0.9183, 0.9187]
},
{
"start": 2500,
"end": 4000,
"densities": [0.0521, "NaN", 0.0518, 0.0518, 0.0526, 0.0527]
},
{
"start": 4000,
"densities": [0.0288, "NaN", 0.0286, 0.0285, 0.0290, 0.0285]
}
],
"percentilesTimeseries": {
"p75s": [1362, null, 1344, 1356, 1366, 1377]
},
}
לגבי כתובות URL או מקורות שלא עומדים בדרישות עם הזמן, יכול להיות שיהיו הרבה ערכים חסרים.
תקופות איסוף
ה-CrUX History API מכיל אובייקט collectionPeriods
עם מערך של שדות firstDate
ו-endDate
שמייצגים את תאריכי ההתחלה והסיום של כל חלון צבירה. לדוגמה:
"collectionPeriods": [{
"firstDate": { "year": 2022, "month": 7, "day": 10 },
"lastDate": { "year": 2022, "month": 8, "day": 6 }
}, {
"firstDate": { "year": 2022, "month": 7, "day": 17 },
"lastDate": { "year": 2022, "month": 8, "day": 13 }
}, {
"firstDate": { "year": 2022, "month": 7, "day": 24 },
"lastDate": { "year": 2022, "month": 8, "day": 20 }
}, {
"firstDate": { "year": 2022, "month": 7, "day": 31 },
"lastDate": { "year": 2022, "month": 8, "day": 27 }
}, {
"firstDate": { "year": 2022, "month": 8, "day": 7 },
"lastDate": { "year": 2022, "month": 9, "day": 3 }
}, {
"firstDate": { "year": 2022, "month": 8, "day": 14 },
"lastDate": { "year": 2022, "month": 9, "day": 10 }
}
]
תקופות האיסוף האלה מסודרות בסדר עולה ומייצגות את טווח התאריכים של כל אחת מנקודות הנתונים בקטעים האחרים של התשובה.
ה-History API מתעדכן מדי יום שני ומכיל נתונים עד יום שבת הקודם (בהתאם להפרש הרגיל של יומיים). הוא מכיל נתונים מ-25 השבועות האחרונים – תקופת איסוף אחת בשבוע.
מאחר שכל תקופת איסוף מכילה את הנתונים המצטברים מ-28 הימים האחרונים, ותקופות האיסוף הן שבועיות, המשמעות היא שתקופות האיסוף חופפות. הם דומים לממוצע נע של נתונים, שבו נתונים בשווי שלושה שבועות נכללים בכל תקופה עוקבת, ושבוע אחד הוא שונה.
שאילתות לדוגמה
שאילתות נשלחות כאובייקטים של JSON באמצעות בקשת POST אל https://chromeuxreport.googleapis.com/v1/records:queryHistoryRecord?key=[YOUR_API_KEY]"
, עם נתוני השאילתה כאובייקט JSON בגוף ה-POST.
חשוב לשים לב שהשימוש ב-queryHistoryRecord
מחליף את queryRecord
של ממשק ה-API היומי של CrUX.
גוף לדוגמה הוא:
{
"origin": "https://example.com",
"formFactor": "PHONE",
"metrics": [
"largest_contentful_paint",
"experimental_time_to_first_byte"
]
}
לדוגמה, אפשר לקרוא לזה מ-curl
באמצעות שורת הפקודה הבאה (מחליפה את API_KEY
במפתח שלכם):
curl -s --request POST 'https://chromeuxreport.googleapis.com/v1/records:queryHistoryRecord?key=API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"formFactor":"PHONE","origin":"https://www.example.com","metrics":["largest_contentful_paint", "experimental_time_to_first_byte"]}'
כדי לקבל נתונים ברמת הדף דרך ה-API, מעבירים את הנכס url
בשאילתה במקום את origin
:
{
"url": "https://example.com/page",
"formFactor": "PHONE",
"metrics": [
"largest_contentful_paint",
"experimental_time_to_first_byte"
]
}
אם המאפיין metrics
לא מוגדר, יוחזרו כל המדדים הזמינים:
cumulative_layout_shift
first_contentful_paint
interaction_to_next_paint
largest_contentful_paint
experimental_time_to_first_byte
navigation_types
round_trip_time
form_factors
(המערכת מדווחת על הערך הזה רק אם לא צויןformFactor
בבקשה)
אם לא צוין ערך של formFactor
, הערכים יצברו בכל גורמי הצורה.
תוכלו למצוא עוד שאילתות לדוגמה במדריך שימוש ב-CrUX History API.
צינור נתונים
מערך הנתונים של CrUX מעובד באמצעות צינור עיבוד נתונים כדי לאחד, לצבור ולסנן את הנתונים לפני שהם הופכים לזמינים דרך ה-API.
הממוצע הנע
הנתונים בדוח חוויית המשתמש ב-Chrome הם ממוצע נע של 28 ימים של מדדים מצטברים. כלומר, הנתונים שמוצגים בדוח חוויית המשתמש ב-Chrome בכל רגע נתון הם נתונים נצברים מ-28 הימים האחרונים.
ב-History API יש כמה תקופות איסוף, כל אחת מהן באורך 28 יום. מאחר שכל תקופת איסוף מכילה את הנתונים המצטברים מ-28 הימים האחרונים, ותקופות האיסוף הן שבועיות, המשמעות היא שתקופות האיסוף חופפות. הם דומים לממוצע נע של נתונים, שבו נתונים בשווי שלושה שבועות נכללים בכל תקופה עוקבת, ושבוע אחד הוא שונה.
עדכונים שבועיים
ה-API של ההיסטוריה מתעדכן בכל יום שני בסביבות השעה 04:00 (שעון UTC) ומכיל נתונים עד ליום שבת הקודם (בהתאם לעיכוב הרגיל של יומיים). הוא מכיל נתונים מ-25 השבועות האחרונים (כ-6 חודשים) מ-25 השבועות האחרונים, תקופת איסוף אחת בכל שבוע.
אין הסכם רמת שירות (SLA) לגבי זמני עדכון. היא מופעלת מדי יום בצורה הטובה ביותר.
סכימה
ב-CrUX History API יש נקודת קצה אחת בלבד שמקבלת POST
בקשות HTTP. ה-API מחזיר ערך של record
שמכיל לפחות metrics
אחד שתואם לנתוני הביצועים של המקור או הדף המבוקשים.
בקשת HTTP
POST https://chromeuxreport.googleapis.com/v1/records:queryHistoryRecord
כתובת ה-URL משתמשת בתחביר של Transcoding של gRPC.
גוף הבקשה
ב-CrUX History API נעשה שימוש באותם גופי בקשות כמו CrUX API היומי, למעט תמיכה בשדה הבקשה effectiveConnectionType
.
לדוגמה, כדי לבקש את ערכי ה-LCP למחשב של דף הבית של web.dev:
{
"origin": "https://web.dev/",
"formFactor": "DESKTOP",
"metrics": [
"largest_contentful_paint"
]
}
גוף התשובה
בקשות שבוצעו בהצלחה מחזירות תשובות עם אובייקט record
ו-urlNormalizationDetails
במבנה הבא:
{
"record": {
"key": {
object (Key)
},
"metrics": [
string: {
object (Metric)
}
]
},
"urlNormalizationDetails": {
object (UrlNormalization)
}
}
לדוגמה, התגובה לגוף הבקשה בבקשה הקודמת יכולה להיות:
{
"record": {
"key": {
"origin": "https://web.dev"
},
"metrics": {
"largest_contentful_paint": {
"histogramTimeseries": [{
"start": 0, "end": 2500, "densities": [
0.9190, 0.9203, 0.9194, 0.9195, 0.9183, 0.9187, ...
]
}, {
"start": 2500, "end": 4000, "densities": [
0.0521, 0.0513, 0.0518, 0.0518, 0.0526, 0.0527, ...
]
}, {
"start": 4000, "densities": [
0.0288, 0.0282, 0.0286, 0.0285, 0.0290, 0.0285, ...
]
}
],
"percentilesTimeseries": {
"p75s": [
1362, 1352, 1344, 1356, 1366, 1377, ...
]
}
}
},
"collectionPeriods": [{
"firstDate": { "year": 2022, "month": 7, "day": 10 },
"lastDate": { "year": 2022, "month": 8, "day": 6 }
}, {
"firstDate": { "year": 2022, "month": 7, "day": 17 },
"lastDate": { "year": 2022, "month": 8, "day": 13 }
}, {
"firstDate": { "year": 2022, "month": 7, "day": 24 },
"lastDate": { "year": 2022, "month": 8, "day": 20 }
}, {
"firstDate": { "year": 2022, "month": 7, "day": 31 },
"lastDate": { "year": 2022, "month": 8, "day": 27 }
}, {
"firstDate": { "year": 2022, "month": 8, "day": 7 },
"lastDate": { "year": 2022, "month": 9, "day": 3 }
}, {
"firstDate": { "year": 2022, "month": 8, "day": 14 },
"lastDate": { "year": 2022, "month": 9, "day": 10 }
}, {
...
}
]
}
}
מפתח
Key
מגדיר את כל המאפיינים שמזהים את הרשומה הזו כייחודיים.
{
"formFactor": enum (FormFactor),
// Union field url_pattern can be only one of the following:
"origin": string,
"url": string
// End of list of possible types for union field url_pattern.
}
שדות | |
---|---|
formFactor |
גורם הצורה הוא סוג המכשיר שבו השתמשו כל המשתמשים כדי לגשת לאתר עבור הרשומה הזו. אם גורם הצורה לא צוין, יוחזרו נתונים נצברים מכל גורמי הצורה. |
שדה איחוד url_ . תבנית ה-URL היא כתובת ה-URL שהרשומה חלה עליה. url_ יכול להיות רק אחת מהאפשרויות הבאות: |
|
origin |
המקור מציין את המקור שעבורו מיועדת הרשומה. הערה: כשמציינים מקור, הנתונים של טעינות מתחת למקור הזה בכל הדפים נצברים לנתוני חוויית המשתמש ברמת המקור. |
url |
הערה: כשמציינים ערך מסוג |
מדדים
metric
הוא קבוצה של נתונים על חוויית המשתמש של מדד יחיד של ביצועים באינטרנט, כמו הצגת תוכן ראשוני (First-Party). הוא מכיל היסטוגרמה מסכמת של השימוש ב-Chrome בעולם האמיתי כסדרה של bins
.
{
"histogramTimeseries": [
{
object (Bin)
}
],
"percentilesTimeseries": {
object (Percentiles)
}
}
או
"fractionTimeseries": {
object (Fractions)
}
שדות | |
---|---|
histogramTimeseries[] |
ההיסטוגרמה של זמני (Timeeries) של חוויות המשתמש עבור מדד. ההיסטוגרמה של זמני (timeeries) תכלול לפחות סל אחד, והצפיפות של כל התאים מסוכמת ל-1 בערך. ערכים חסרים בתקופת האיסוף הספציפית הזו יסומנו כ- |
percentilesTimeseries |
אחוזונים שימושיים נפוצים של המדד. סוג הערך של האחוזונים יהיה זהה לסוגי הערכים שניתנו עבור פחי ההיסטוגרמה. ערכים חסרים בתקופת האיסוף הספציפית הזו יסומנו כ- |
fractionTimeseries |
אובייקט זה מכיל זמני טעינה של שברים מתויגים. הערכים מסתכמים בערך 1 לכל רשומה. השברים יעוגלו ל-4 ספרות אחרי הנקודה העשרונית. ערכים חסרים מבוטאים כ-'NaN' בכל השברים. |
סל
bin
הוא חלק נפרד של נתונים שנמשכים מההתחלה ועד הסוף, או אם לא מוגדר סוף מתחילתו ועד אינסוף חיובי.
ערכי ההתחלה והסיום של כל סל נכללים בסוג הערך של המדד שהוא מייצג. לדוגמה, הצגת תוכן ראשוני (First-Party) נמדדת באלפיות שנייה ונחשף כ-int, ולכן סלי המדדים של ה-int32 יתייחסו לסוגי ההתחלה והסיום. עם זאת, שינוי פריסה מצטבר נמדד בשברים עשרוניים ללא יחידה ונחשף כמחרוזת עשרונית, ולכן סלי המדדים שלו ישתמשו במחרוזות עבור סוג הערך.
{
"start": value,
"end": value,
"densities": [number, number, number...etc.]
}
שדות | |
---|---|
start |
Start הוא ההתחלה של סל הנתונים. |
end |
End הוא הסוף של סל הנתונים. אם סוף לא מאוכלס, לסל אין סוף והוא תקין מההתחלה עד +inf. |
densities |
זמנים של שיעור המשתמשים שקיבלו את הערך של סל המודעות הזה עבור המדד הנתון. הצפיפויות מעוגלות ל-4 ספרות אחרי הנקודה העשרונית. |
אחוזונים
Percentiles
מכיל ערכים סינתטיים של מדד באחוזון סטטיסטי נתון. המדדים האלה משמשים להערכת הערך של מדד מסוים לפי אחוז המשתמשים מתוך מספר המשתמשים הכולל.
{
"P75": value
}
שדות | |
---|---|
p75s |
זמני הטעינה של הערכים ש-75% מהטעינות של הדפים כללו את המדד הנתון באותו ערך או פחות ממנו. |
שברים
Fractions
מכיל זמני ספירה של שברים מתויגים שמצטברים עד כ-1, לכל רשומה.
כל תווית מתארת טעינת דף בצורה מסוימת, כך שהמדדים מיוצגים באופן הזה.
מפיקה ערכים ייחודיים במקום ערכים מספריים,
ושברים מציינים את התדירות שבה ערך ייחודי מסוים נמדד.
{
"label_1": { "fractions": array[fraction]},
"label_1": { "fractions": array[fraction]},
...
"label_n": { "fractions": array[fraction]}
}
בדומה לערכי הדחיסות בתאי ההיסטוגרמה, כל fraction
הוא מספר
0.0 <= value <= 1.0
, והם מסתכמים בערך 1.0. מתי המדד לא זמין
לגבי תקופת איסוף מסוימת, הרשומה המתאימה
'NaN' בכל המערכים של שברים.
שדות | |
---|---|
p75s |
בזמנים שבהם הערך הזה מופיע ב-75% מהטעינות של הדפים, המדד הזה זהה לערך הזה או נמוך ממנו. |
UrlNormalization
אובייקט שמייצג את פעולות הנירמול שבוצעו כדי לנרמל כתובת URL ולהשיג סיכוי גבוה יותר לחיפוש מוצלח. מדובר בשינויים אוטומטיים פשוטים, אם מחפשים את ה-url_pattern
שסופקו כי אם הם ייכשלו. לא מטפלים בפעולות מורכבות כמו הפניות אוטומטיות שמתרחשות בהמשך.
{
"originalUrl": string,
"normalizedUrl": string
}
שדות | |
---|---|
originalUrl |
כתובת ה-URL המקורית המבוקשת לפני פעולות נירמול. |
normalizedUrl |
כתובת ה-URL אחרי פעולות נירמול. זוהי כתובת URL חוקית של חוויית משתמש שניתן לחפש אותה באופן סביר. |
מגבלות קצב של יצירת בקשות
ל-CrUX History API יש אותה מגבלה עם CrUX API עבור 150 שאילתות לדקה לכל פרויקט ב-Google Cloud עבור כל אחד מה-API, שמוצע ללא תשלום. אפשר לראות את המגבלה הזו ואת השימוש הנוכחי שלכם במסוף Google Cloud. המכסה הנדיבה הזו אמורה להספיק לרוב המכריע של תרחישי השימוש, ואי אפשר לשלם על מכסה מוגדלת.