บทนำ
เอกสารนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ที่ต้องการเขียนแอปพลิเคชันที่โต้ตอบกับ PageSpeed Insights API ได้
PageSpeed Insights คือเครื่องมือที่รายงานประสิทธิภาพการใช้งานจริงของหน้าเว็บในอุปกรณ์เคลื่อนที่และเดสก์ท็อป รวมถึงให้คำแนะนำเกี่ยวกับวิธีปรับปรุงหน้าเว็บเพื่อช่วยนักพัฒนาซอฟต์แวร์เพิ่มประสิทธิภาพหน้าเว็บ คุณสามารถใช้ PageSpeed Insights API เพื่อสร้างคะแนนความเร็ว คะแนนการเพิ่มประสิทธิภาพ และคำแนะนำแบบเป็นโปรแกรม
ก่อนจะเริ่ม
รับบัญชี Google
คุณต้องมีบัญชี Google จึงจะได้รับคีย์ API เพื่อระบุแอปพลิเคชันของคุณกับ Google (ดูด้านล่าง)
ทำความคุ้นเคยกับ PageSpeed
หากไม่คุ้นเคยกับ PageSpeed โปรดดูแนวทางปฏิบัติแนะนำด้านประสิทธิภาพเว็บของ PageSpeed
ดูวิธีระบุแอปพลิเคชันของคุณให้ Google ทราบ
แอปพลิเคชันของคุณต้องระบุตนเองทุกครั้งที่ส่งคำขอไปยัง PageSpeed Insights API โดยใส่คีย์ API ไว้ด้วย อีกครั้ง
การรับและใช้คีย์ API
ซื้อคีย์หรือสร้างใหม่ในหน้าข้อมูลเข้าสู่ระบบ
หลังจากมีคีย์ API แล้ว แอปพลิเคชันจะเพิ่มพารามิเตอร์การค้นหาต่อท้ายได้
key=yourAPIKey
ไปยัง URL ของคำขอทั้งหมด
คีย์ API ปลอดภัยสำหรับการฝังใน URL ผลิตภัณฑ์ดังกล่าวไม่จำเป็นต้องมีการเข้ารหัส
พื้นหลัง PageSpeed Insights API
ผลลัพธ์ที่ PageSpeed Insights API แสดงประกอบด้วยข้อมูลประเภทต่อไปนี้
- ประสบการณ์การโหลด
- ส่วนประสบการณ์การโหลดประกอบด้วยหมวดหมู่ความเร็วโดยรวม (FAST, AVERAGE หรือ SLOW) และการแจกแจงหมวดหมู่
- สถิติของหน้า
- ส่วนสถิติหน้าเว็บจะมีผลลัพธ์ทางสถิติที่มีประโยชน์ เช่น ข้อมูลการเดินทางไปกลับที่จำเป็นและจำนวนไบต์รวมที่ใช้ ปัญหานี้บ่งชี้ว่าหน้าเว็บอาจเร็วขึ้นด้วยการแก้ไขรูปลักษณ์และฟังก์ชันการทำงาน
- คะแนนการเพิ่มประสิทธิภาพ
- คะแนนการเพิ่มประสิทธิภาพ PageSpeed (0-100) เป็นตัวบ่งชี้ว่าหน้าเว็บเพิ่มประสิทธิภาพได้ดีเพียงใด คะแนนที่สูงบ่งชี้ว่าสามารถปรับปรุงได้อีกเล็กน้อย ในขณะที่คะแนนต่ำหมายถึงมีโอกาสปรับปรุงมาก
- กฎ
- PageSpeed จะวิเคราะห์หน้าเว็บโดยใช้กฎ กฎของ PageSpeed แต่ละข้อนั้นอิงตามหลักการทั่วไปของประสิทธิภาพหน้าเว็บ เช่น การแคชทรัพยากร ขนาดการอัปโหลดและดาวน์โหลดข้อมูล และเวลารับส่งข้อมูลระหว่างไคลเอ็นต์-เซิร์ฟเวอร์ กฎของ PageSpeed จะสร้างผลลัพธ์ของกฎและผลกระทบของกฎตามที่อธิบายไว้ด้านล่าง
- ผลลัพธ์ของกฎ
- ผลลัพธ์ของกฎคือคำแนะนำที่สร้างขึ้นโดยกฎซึ่งหากนำไปใช้ จะทำให้หน้าเว็บเร็วขึ้นและเพิ่มคะแนน PageSpeed สำหรับหน้าเว็บนั้น ตัวอย่างเช่น หากแสดงทรัพยากรที่บีบอัดได้แบบไม่บีบอัด กฎ Enable Compression ของ PageSpeed จะสร้างผลลัพธ์ที่แนะนําให้นักพัฒนาซอฟต์แวร์เปิดใช้การบีบอัดสําหรับทรัพยากรนั้น
- ผลกระทบของกฎ
- กฎของ PageSpeed แต่ละกฎจะสร้างตัวเลขผลกระทบ (ค่าทศนิยมที่ไม่มีขอบเขต) ที่ระบุความสำคัญหรือลำดับความสำคัญของการใช้คำแนะนำผลลัพธ์ของกฎสำหรับกฎเมื่อเทียบกับกฎอื่นๆ เช่น หากการเปิดใช้การบีบอัดจะช่วยประหยัดพื้นที่ได้ 1 MB ส่วนการเพิ่มประสิทธิภาพรูปภาพจะช่วยประหยัดพื้นที่ได้ 500 KB กฎเปิดใช้การบีบอัดจะมีค่าผลลัพธ์เป็น 2 เท่าของกฎเพิ่มประสิทธิภาพรูปภาพ ผลลัพธ์เป็น 0 หมายความว่าไม่มีคําแนะนําในการปรับปรุงกฎนั้น
การเรียกใช้ API
หากต้องการเรียกใช้ API ให้เรียกใช้เมธอด runPagespeed
โดยระบุ URL, คีย์ API และพารามิเตอร์อื่นๆ ในสตริงการค้นหา ดูรายละเอียดเพิ่มเติมได้ที่เอกสารข้อมูลอ้างอิง API
ตัวอย่างการเรียก API
จากบรรทัดคำสั่ง
คุณสามารถเรียกใช้ PageSpeed Insights API จากบรรทัดคำสั่ง Linux/UNIX ได้โดยใช้โปรแกรม เช่น curl
ตัวอย่างต่อไปนี้ใช้แนวทางนี้เพื่อดึงข้อมูล PageSpeed บนอุปกรณ์เคลื่อนที่สําหรับ URL https://developers.google.com/speed/pagespeed/insights/ ระบบจะแสดงคะแนน PageSpeed, สถิติหน้าเว็บ และผลลัพธ์ที่ฟอร์แมตแล้วของ PageSpeed ในรูปแบบข้อมูล JSON
ผลลัพธ์ที่จัดรูปแบบจะมีคีย์ตามตัวระบุกฎ (เช่น AvoidBadRequests
หรือ MinifyJavaScript
) และมีคะแนนและผลกระทบของกฎนั้น รวมถึงคําแนะนําที่เกิดจากกฎ ซึ่งหากนำมาใช้จะช่วยให้หน้าเว็บโหลดเร็วขึ้น หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับช่องในการตอบกลับ JSON โปรดดูเอกสารเอกสารอ้างอิง PageSpeed Insights API
คำขอ:
$ curl 'https://www.googleapis.com/pagespeedonline/v4/runPagespeed?url=https://developers.google.com/speed/pagespeed/insights/&strategy=mobile&key=yourAPIKey'
การตอบกลับ:
{ "captchaResult": "CAPTCHA_NOT_NEEDED", "kind": "pagespeedonline#result", "id": "https://developers.google.com/speed/pagespeed/insights/", "responseCode": 200, "title": "PageSpeed Insights", "ruleGroups": { "SPEED": { "score": 99 } }, "loadingExperience": { "id": "https://developers.google.com/speed/pagespeed/insights/", "metrics": { "FIRST_CONTENTFUL_PAINT_MS": { "median": 678, "distributions": [ { "min": 0, "max": 1567, "proportion": 0.8726942914078067 }, { "min": 1567, "max": 2963, "proportion": 0.07357226585394444 }, { "min": 2963, "proportion": 0.053733442738248746 } ], "category": "FAST" }, "DOM_CONTENT_LOADED_EVENT_FIRED_MS": { "median": 559, "distributions": [ { "min": 0, "max": 2120, "proportion": 0.9287991742172268 }, { "min": 2120, "max": 4226, "proportion": 0.035877050120426655 }, { "min": 4226, "proportion": 0.0353237756623466 } ], "category": "FAST" } }, "overall_category": "FAST", "initial_url": "https://developers.google.com/speed/pagespeed/insights/" }, "pageStats": { "numberResources": 11, "numberHosts": 6, "totalRequestBytes": "1874", "numberStaticResources": 6, "htmlResponseBytes": "72494", "overTheWireResponseBytes": "324002", "cssResponseBytes": "8467", "imageResponseBytes": "5363", "javascriptResponseBytes": "841488", "otherResponseBytes": "14548", "numberJsResources": 4, "numberCssResources": 1, "numTotalRoundTrips": 13, "numRenderBlockingRoundTrips": 0 }, "formattedResults": { "locale": "en_US", "ruleResults": { "AvoidLandingPageRedirects": { "localizedRuleName": "Avoid landing page redirects", "ruleImpact": 0.0, "groups": [ "SPEED" ], "summary": { "format": "Your page has no redirects. Learn more about {{BEGIN_LINK}}avoiding landing page redirects{{END_LINK}}.", "args": [ { "type": "HYPERLINK", "key": "LINK", "value": "https://developers.google.com/speed/docs/insights/AvoidRedirects" } ] } }, "EnableGzipCompression": { "localizedRuleName": "Enable compression", "ruleImpact": 0.0, "groups": [ "SPEED" ], "summary": { "format": "You have compression enabled. Learn more about {{BEGIN_LINK}}enabling compression{{END_LINK}}.", "args": [ { "type": "HYPERLINK", "key": "LINK", "value": "https://developers.google.com/speed/docs/insights/EnableCompression" } ] } }, ... "PrioritizeVisibleContent": { "localizedRuleName": "Prioritize visible content", "ruleImpact": 0.0, "groups": [ "SPEED" ], "summary": { "format": "You have the above-the-fold content properly prioritized. Learn more about {{BEGIN_LINK}}prioritizing visible content{{END_LINK}}.", "args": [ { "type": "HYPERLINK", "key": "LINK", "value": "https://developers.google.com/speed/docs/insights/PrioritizeVisibleContent" } ] } } } }, "version": { "major": 1, "minor": 15 } }
จาก JavaScript
คุณสามารถเรียกใช้ PageSpeed Insights API จาก JavaScript ในเบราว์เซอร์ได้โดยใช้พารามิเตอร์การค้นหา callback
และฟังก์ชัน Callback เพื่อสร้างผลลัพธ์ JSON-P ซึ่งจะช่วยให้คุณเขียนแอปพลิเคชันอย่างมีประสิทธิภาพซึ่งแสดงข้อมูล PageSpeed ได้โดยไม่ต้องเขียนโค้ดฝั่งเซิร์ฟเวอร์
ตัวอย่างต่อไปนี้ใช้แนวทางนี้เพื่อแสดงผลลัพธ์ PageSpeed และข้อมูลอื่นๆ สําหรับ URL https://developers.google.com/speed/pagespeed/insights/ ตัวอย่างนี้ยังใช้เครื่องมือแผนภูมิของ Google เพื่อแสดงข้อมูลที่สร้างโดย PageSpeed Insights API เป็นภาพด้วย
ก่อนอื่น ให้ระบุคีย์ Google API (ดูข้อมูลเพิ่มเติมเกี่ยวกับคีย์ API) ดังนี้
<script> // Specify your actual API key here: var API_KEY = 'yourAPIKey'; // Specify the URL you want PageSpeed results for here: var URL_TO_GET_RESULTS_FOR = 'https://developers.google.com/speed/pagespeed/insights/'; </script>
ต่อไป ให้ดึงข้อมูลผลลัพธ์ PageSpeed จาก PageSpeed Insights API โดยทำดังนี้
<script> var API_URL = 'https://www.googleapis.com/pagespeedonline/v4/runPagespeed?'; var CHART_API_URL = 'http://chart.apis.google.com/chart?'; // Object that will hold the callbacks that process results from the // PageSpeed Insights API. var callbacks = {} // Invokes the PageSpeed Insights API. The response will contain // JavaScript that invokes our callback with the PageSpeed results. function runPagespeed() { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; var query = [ 'url=' + URL_TO_GET_RESULTS_FOR, 'callback=runPagespeedCallbacks', 'key=' + API_KEY, ].join('&'); s.src = API_URL + query; document.head.insertBefore(s, null); } // Our JSONP callback. Checks for errors, then invokes our callback handlers. function runPagespeedCallbacks(result) { if (result.error) { var errors = result.error.errors; for (var i = 0, len = errors.length; i < len; ++i) { if (errors[i].reason == 'badRequest' && API_KEY == 'yourAPIKey') { alert('Please specify your Google API key in the API_KEY variable.'); } else { // NOTE: your real production app should use a better // mechanism than alert() to communicate the error to the user. alert(errors[i].message); } } return; } // Dispatch to each function on the callbacks object. for (var fn in callbacks) { var f = callbacks[fn]; if (typeof f == 'function') { callbacks[fn](result); } } } // Invoke the callback that fetches results. Async here so we're sure // to discover any callbacks registered below, but this can be // synchronous in your code. setTimeout(runPagespeed, 0); </script>
เมื่อใช้โค้ดด้านบนเพื่อดึงข้อมูลจาก PageSpeed Insights API ตอนนี้เราพร้อมที่จะแสดงข้อมูลที่น่าสนใจในเบราว์เซอร์ของผู้ใช้โดยใช้ตัวอย่างด้านล่าง
ตัวอย่างที่ 1: แสดงคําแนะนํา PageSpeed ยอดนิยม
ตัวอย่างนี้แสดงชื่อคำแนะนำ PageSpeed ยอดนิยมสำหรับหน้าเว็บที่กำลังวิเคราะห์เป็นรายการที่ไม่ได้เรียงลำดับ เช่น
- กำหนดการแคชในเบราว์เซอร์
- เลื่อนการแยกวิเคราะห์ JavaScript
- ลดขนาด HTML
- ลดขนาด JavaScript
หมายเหตุ: ข้อมูลที่จําเป็นในการแสดงผลลัพธ์ PageSpeed แบบเต็มมาจาก PageSpeed Insights API แต่เราไม่ได้นําข้อมูลทั้งหมดมาใช้ที่นี่เพื่อให้ตัวอย่างเข้าใจง่าย
<script> callbacks.displayTopPageSpeedSuggestions = function(result) { var results = []; var ruleResults = result.formattedResults.ruleResults; for (var i in ruleResults) { var ruleResult = ruleResults[i]; // Don't display lower-impact suggestions. if (ruleResult.ruleImpact < 3.0) continue; results.push({name: ruleResult.localizedRuleName, impact: ruleResult.ruleImpact}); } results.sort(sortByImpact); var ul = document.createElement('ul'); for (var i = 0, len = results.length; i < len; ++i) { var r = document.createElement('li'); r.innerHTML = results[i].name; ul.insertBefore(r, null); } if (ul.hasChildNodes()) { document.body.insertBefore(ul, null); } else { var div = document.createElement('div'); div.innerHTML = 'No high impact suggestions. Good job!'; document.body.insertBefore(div, null); } }; // Helper function that sorts results in order of impact. function sortByImpact(a, b) { return b.impact - a.impact; } </script>
ตัวอย่างที่ 2: แสดงแผนภูมิวงกลมของรายละเอียดขนาดทรัพยากร
ตัวอย่างนี้แสดงแผนภูมิวงกลมที่แสดงรายละเอียดขนาดทรัพยากรของหน้าเว็บที่จะวิเคราะห์ เช่น
<script> var RESOURCE_TYPE_INFO = [ {label: 'JavaScript', field: 'javascriptResponseBytes', color: 'e2192c'}, {label: 'Images', field: 'imageResponseBytes', color: 'f3ed4a'}, {label: 'CSS', field: 'cssResponseBytes', color: 'ff7008'}, {label: 'HTML', field: 'htmlResponseBytes', color: '43c121'}, {label: 'Flash', field: 'flashResponseBytes', color: 'f8ce44'}, {label: 'Text', field: 'textResponseBytes', color: 'ad6bc5'}, {label: 'Other', field: 'otherResponseBytes', color: '1051e8'}, ]; callbacks.displayResourceSizeBreakdown = function(result) { var stats = result.pageStats; var labels = []; var data = []; var colors = []; var totalBytes = 0; var largestSingleCategory = 0; for (var i = 0, len = RESOURCE_TYPE_INFO.length; i < len; ++i) { var label = RESOURCE_TYPE_INFO[i].label; var field = RESOURCE_TYPE_INFO[i].field; var color = RESOURCE_TYPE_INFO[i].color; if (field in stats) { var val = Number(stats[field]); totalBytes += val; if (val > largestSingleCategory) largestSingleCategory = val; labels.push(label); data.push(val); colors.push(color); } } // Construct the query to send to the Google Chart Tools. var query = [ 'chs=300x140', 'cht=p3', 'chts=' + ['000000', 16].join(','), 'chco=' + colors.join('|'), 'chd=t:' + data.join(','), 'chdl=' + labels.join('|'), 'chdls=000000,14', 'chp=1.6', 'chds=0,' + largestSingleCategory, ].join('&'); var i = document.createElement('img'); i.src = 'http://chart.apis.google.com/chart?' + query; document.body.insertBefore(i, null); }; </script>
วิดีโอสาธิต
การสาธิต PageSpeed Insights API ที่ Google I/O BootCamp 2011