Google AMP - บทนำ
Google Accelerated Mobile Pages(Google-AMP) เป็นโครงการโอเพ่นซอร์สใหม่ของ Google ที่ออกแบบมาเป็นพิเศษเพื่อสร้างหน้าเว็บที่มีน้ำหนักเบาโดยใช้ amp html จุดมุ่งหมายหลักของโครงการนี้คือเพื่อให้แน่ใจว่าโค้ด AMP ทำงานได้ดีและโหลดได้เร็วบนอุปกรณ์ทั้งหมดที่เป็นไปได้เช่นสมาร์ทโฟนและแท็บเล็ต
AMP เป็นเพียงส่วนเสริมของ HTML มาตรฐาน แท็ก HTML มีการเปลี่ยนแปลงเล็กน้อยและ AMP ได้เพิ่มข้อ จำกัด ในการใช้งาน ในบทนี้เราจะแสดงรายการแท็ก html ซึ่งมีการเปลี่ยนแปลงและข้อ จำกัด ที่เพิ่มเข้ามา แท็กที่เกี่ยวข้องกับการโหลดทรัพยากรภายนอกเช่นรูปภาพ, css, js, การส่งแบบฟอร์ม, วิดีโอ, เสียง ฯลฯ มีการเปลี่ยนแปลง
นอกจากนี้ยังมีคุณสมบัติใหม่มากมายที่เพิ่มเข้ามาใน amp เช่น amp-date-picker, amp-facebook, amp-ad, amp-analytics, amp-ad, amp-lightbox และอื่น ๆ อีกมากมายซึ่งสามารถใช้ได้โดยตรงในหน้า html พักผ่อนอื่น ๆ ที่มีไว้สำหรับการแสดงผลจะใช้ตามที่เป็นอยู่
ด้วยการเปลี่ยนแปลงและคุณลักษณะใหม่ทั้งหมดนี้ AMP สัญญาว่าจะให้โหลดได้เร็วขึ้นประสิทธิภาพที่ดีขึ้นสำหรับหน้าเว็บเมื่อใช้ในสภาพแวดล้อมจริง
เมื่อคุณค้นหาสิ่งใดก็ตามในการค้นหาของ Google บนมือถือของคุณการแสดงผลที่เห็นในภาพหมุนของ Google ที่ด้านบนส่วนใหญ่จะเป็นหน้าแอมป์ดังที่แสดงด้านล่าง
เมื่อคุณคลิกหน้า AMP URL ที่คุณได้รับในแถบที่อยู่จะเป็นดังนี้ -
https://www.google.co.in/amp/s/m.timesofindia.com/sports/cricket/india-in-australia/to-hell-with-the-nets-boys-need-rest-ravi-shastri/amp_articleshow/67022458.cms
URL ไม่ได้มาจากผู้เผยแพร่โดยตรง แต่ Google ชี้ไปที่สำเนาของตนเองบนเซิร์ฟเวอร์ของ Google ซึ่งเป็นเวอร์ชันแคชและช่วยให้การแสดงผลเนื้อหาเร็วขึ้นเมื่อเทียบกับหน้าที่ไม่ใช่แอมป์ สิ่งนี้จะเกิดขึ้นเฉพาะในอุปกรณ์หรือในโหมดโปรแกรมจำลอง Google
ตัวอย่างหน้าแอมป์
ตัวอย่างหน้าแอมป์แสดงอยู่ด้านล่าง -
<!doctype html>
<html amp>
<head>
<meta charset = "utf-8">
<title>Amp Sample Page</title>
<link rel = "canonical" href = "./regular-html-version.html">
<meta name = "viewport" content = "width = device-width,
minimum-scale = 1,initial-scale = 1">
<style amp-custom>
h1 {color: red}
</style>
<script type = application/json>{
"vars": {
"uid": "23870",
"domain": "dummyurl.com",
"sections": "us",
"authors": "Hello World"
}
}
</script>
<style amp-boilerplate>
body{
-webkit-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;animation:
-amp-start 8s steps(1,end) 0s 1 normal both
}
@-webkit-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}
</style>
<noscript>
<style amp-boilerplate>
body{
-webkit-animation:none;
-moz-animation:none;
-ms-animation:none;
animation:none}
</style>
</noscript>
<script async src = "https://cdn.ampproject.org/v0.js"></script>
</head>
<body>
<h1>Amp Sample Page</h1>
<p>
<amp-img src = "imgurl.jpg" width = "300" height = "300"
layout = "responsive"></amp-img>
</p>
<amp-ad width = "300" height = "250" type = "doubleclick"
data-slot = "/4119129/no-ad">
<div fallback>
<p style = "color:green;font-size:25px;">No ads to Serve!</p>
</div>
</amp-ad>
</body>
</html>
สิ่งที่ควรทำและไม่ควรทำในหน้า AMP
ให้เราเข้าใจสิ่งที่ควรทำและไม่ควรทำที่โปรแกรมเมอร์ต้องปฏิบัติตามในหน้า AMP
แท็กบังคับ
มีแท็กบังคับบางอย่างที่ต้องรวมไว้ในหน้าแอมป์ตามที่ระบุด้านล่าง -
เราต้องตรวจสอบให้แน่ใจว่ามีการเพิ่ม amp หรือ⚡ลงในแท็ก html ดังที่แสดงด้านล่าง -
<html amp>
OR
<html ⚡>
ควรเพิ่มแท็ก <head> และ <body> ในหน้า html
ควรเพิ่มเมตาแท็กที่จำเป็นต่อไปนี้ในส่วนหัวของหน้า มิฉะนั้นจะล้มเหลวในการตรวจสอบความถูกต้องของแอมป์
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, minimum-scale = 1, initial-scale = 1">
ลิงก์ของ rel = "canonical" ที่จะเพิ่มเข้าไปใน head tag
<link rel = "canonical" href = "./regular-html-version.html">
แท็กสไตล์พร้อม amp-boilerplate -
<style amp-boilerplate>
body{
-webkit-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;animation:
-amp-start 8s steps(1,end) 0s 1 normal both
}
@-webkit-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}
</style>
แท็ก Noscript พร้อม amp-สำเร็จรูป -
<noscript>
<style amp-boilerplate>
body{
-webkit-animation:none;
-moz-animation:none;
-ms-animation:none;
animation:none
}
</style>
</noscript>
สำคัญมากแท็ก amp script ที่เพิ่ม async ตามที่แสดงด้านล่าง -
<script async src = "https://cdn.ampproject.org/v0.js"> </script>
ในกรณีที่คุณต้องการเพิ่ม CSS ที่กำหนดเองลงในเพจโปรดจดบันทึกไว้ที่นี่เราไม่สามารถเรียกสไตล์ชีตภายนอกในแอมป์เพจได้ ในการเพิ่ม CSS ที่กำหนดเอง CSS ทั้งหมดของคุณต้องไปที่นี่ดังที่แสดง -
<style amp-custom>
//all your styles here
</style>
แท็กสไตล์ควรมีแอตทริบิวต์ที่กำหนดเองและเพิ่มเข้าไป
สคริปต์สำหรับส่วนประกอบ AMP
โปรดทราบว่าไม่อนุญาตให้ใช้สคริปต์ที่มี src และ type =” text / javascript” ใน amp page โดยเด็ดขาด อนุญาตให้เพิ่มเฉพาะแท็กสคริปต์ที่ async และเกี่ยวข้องกับ amp-components ในส่วน head
ส่วนนี้แสดงสคริปต์บางส่วนที่ใช้สำหรับส่วนประกอบแอมป์ตามที่ระบุด้านล่าง -
amp-ad
<script async custom-element = "amp-ad"
src = "https://cdn.ampproject.org/v0/amp-ad-0.1.js">
</script>
amp-iframe
<script async custom-element = "amp-iframe"
src = "https://cdn.ampproject.org/v0/amp-iframe-0.1.js">
</script>
สังเกตว่าสคริปต์มีแอตทริบิวต์ async และองค์ประกอบที่กำหนดเองพร้อมชื่อของคอมโพเนนต์ amp ที่จะโหลด Amp ตรวจสอบความถูกต้องของแท็กสคริปต์ตามคุณสมบัติ async และองค์ประกอบที่กำหนดเองและไม่อนุญาตให้โหลดสคริปต์อื่น ๆ มันต้องใช้เวลาtype=application/json ซึ่งเราได้เพิ่มไว้ในไฟล์ตัวอย่างดังที่แสดงด้านล่าง
<type = application/json>
{
"vars": {
"uid": "23870",
"domain": "dummyurl.com",
"sections": "us",
"authors": "Hello World"
}
}
</script>
สคริปต์ข้างต้นสามารถใช้กับส่วนประกอบ amp อื่น ๆ ได้หากจำเป็นตัวอย่างเช่นสำหรับ amp-analytics
แท็ก HTML
จนถึงตอนนี้เราได้เห็นแท็กบังคับที่จำเป็นในหน้าแอมป์ ตอนนี้เราจะพูดถึงองค์ประกอบ HTML ที่อนุญาต / ไม่อนุญาตและข้อ จำกัด ที่กำหนดไว้
นี่คือรายการแท็ก HTML ที่อนุญาต / ไม่อนุญาต -
ซีเนียร์ No | แท็ก HTML และคำอธิบาย |
---|---|
1 | img แท็กนี้ถูกแทนที่ด้วย amp-img ไม่อนุญาตให้ใช้แท็ก img โดยตรงในหน้า AMP |
2 | video แทนที่ด้วย amp-video |
3 | audio แทนที่ด้วยแอมป์เสียง |
4 | iframe แทนที่ด้วย amp-iframe |
5 | object ไม่ได้รับอนุญาต |
6 | embed ไม่ได้รับอนุญาต |
7 | form สามารถใช้เป็น <form> เราต้องเพิ่มสคริปต์เพื่อให้ทำงานกับฟอร์มในหน้า AMP Example − |
8 | Input elements |
9 | <fieldset> ได้รับอนุญาต |
10 | <label> ได้รับอนุญาต |
11 | P, div, header,footer,section ได้รับอนุญาต |
12 | button ได้รับอนุญาต |
13 | a แท็ก <a> ได้รับอนุญาตโดยมีเงื่อนไขต่อไปนี้ href ไม่ควรขึ้นต้นด้วย javascript หากมีค่าแอตทริบิวต์เป้าหมายต้องเป็น _blank |
14 | svg ไม่ได้รับอนุญาต |
15 | meta ได้รับอนุญาต |
16 | Link ได้รับอนุญาต แต่ไม่อนุญาตให้โหลดสไตล์ชีตภายนอก |
17 | style ได้รับอนุญาต จำเป็นต้องมี amp-boilerplate หรือ amp-custom แอตทริบิวต์ |
18 | base ไม่ได้รับอนุญาต |
19 | noscript ได้รับอนุญาต |
ความคิดเห็น
ไม่อนุญาตให้แสดงความคิดเห็น html ตามเงื่อนไข ตัวอย่างเช่น -
<!--[if Chrome]>
This browser is chrome (any version)
<![endif]-->
เหตุการณ์ HTML
เหตุการณ์ที่เราใช้ในหน้า html เช่น onclick, onmouseover ไม่ได้รับอนุญาตในหน้า AMP
เราสามารถใช้เหตุการณ์ได้ดังนี้ -
on = "eventName:elementId[.methodName[(arg1 = value, arg2 = value)]]"
นี่คือตัวอย่างเหตุการณ์ที่ใช้กับองค์ประกอบอินพุต -
<input id = "txtname" placeholder = "Type here"
on = "inputthrottled:
AMP.setState({name: event.value})">
เหตุการณ์ที่ใช้จะถูกป้อนเข้า - throlled
ชั้นเรียน
คุณไม่สามารถมีชั้นเรียนในเพจของคุณด้วยคำนำหน้าเช่น -amp- or i-amp-. นอกจากนี้คุณสามารถใช้ชื่อคลาสตามความต้องการของคุณ
รหัส
คุณไม่สามารถมีรหัสสำหรับองค์ประกอบ html ของคุณที่นำหน้าด้วย -amp หรือ i-amp- นอกจากนี้คุณสามารถใช้รหัสกับองค์ประกอบ html ของคุณได้ตามความต้องการของคุณ
ลิงค์
ไม่อนุญาตให้ใช้ JavaScript เป็น href ในหน้า amp
Example
<a href = "javascript:callfunc();">click me</a>
สไตล์ชีท
ไม่อนุญาตให้ใช้สไตล์ชีตภายนอกในหน้า AMP เป็นไปได้ที่จะเพิ่มสไตล์ที่จำเป็นสำหรับหน้าภายใน -
<style amp-custom>
//all your styles here
</style>
แท็กสไตล์ควรมี amp-custom เพิ่มแอตทริบิวต์แล้ว
@ -rules
อนุญาตให้ใช้ @ -rules ต่อไปนี้ในสไตล์ชีต -
@ font-face, @keyframes, @media, @page, @ รองรับ @ นำเข้าจะไม่ได้รับอนุญาต การสนับสนุนสำหรับสิ่งเดียวกันจะถูกเพิ่มในอนาคต
@keyframes ได้รับอนุญาตให้ใช้ภายใน<styleamp-custom> . หากมี @keyframes มากเกินไปจะเป็นการดีที่จะสร้าง<styleamp-keyframes> แท็กและเรียกแท็กนี้ที่ส่วนท้ายของเอกสารแอมป์
ชื่อคลาสรหัสชื่อแท็กและแอตทริบิวต์ไม่ควรนำหน้าด้วย -amp- และ i-amp- เนื่องจากใช้ภายในในโค้ด amp ซึ่งอาจทำให้เกิดความขัดแย้งหากกำหนดไว้บนเพจด้วยขณะรันไทม์
!important ไม่อนุญาตให้ใช้คุณสมบัติภายในสไตล์เนื่องจากแอมป์ต้องการควบคุมขนาดองค์ประกอบเมื่อใดก็ตามที่ต้องการ
แบบอักษรที่กำหนดเอง
สไตล์ชีตสำหรับแบบอักษรที่กำหนดเองได้รับอนุญาตในหน้า AMP
Example
<link rel = "stylesheet"
href = "https://fonts.googleapis.com/css?family=Tangerine">
แบบอักษรเป็นรายการที่อนุญาตพิเศษสำหรับการติดตามต้นกำเนิดซึ่งสามารถใช้ในหน้า AMP ได้
Fonts.com - https://fast.fonts.net
Google Fonts - https://fonts.googleapis.com
Font Awesome - https://maxcdn.bootstrapcdn.com
Typekit - https://use.typekit.net/kitId.css (แทนที่ kitId ตาม)
Note - อนุญาตให้ใช้แบบอักษรที่กำหนดเอง @ font-face ในหน้าแอมป์
Example
@font-face {
font-family: myFirstFont;
src: url(dummyfont.woff);
}
AMP Runtime
สภาพแวดล้อมรันไทม์ของแอมป์จะถูกตัดสินใจเมื่อโหลดไฟล์หลัก amp -
<script async src = "https://cdn.ampproject.org/v0.js"></script>
ไฟล์หลักดูแลการโหลดทรัพยากรภายนอกตัดสินใจจัดลำดับความสำคัญว่าจะโหลดเมื่อใดและยังช่วยในการตรวจสอบความถูกต้องของเอกสาร amp เมื่อเพิ่ม # development = 1 ลงใน amp URL
Example
http://localhost:8080/googleamp/amppage.html#development=1
URL ด้านบนเมื่อเรียกใช้งานในเบราว์เซอร์จะแสดงรายการข้อผิดพลาดหากล้มเหลวในการตรวจสอบความถูกต้องของแอมป์หรือแสดงข้อความยืนยันความถูกต้องของแอมป์หากไม่มีข้อผิดพลาด
ส่วนประกอบ AMP
แอมป์มีการเพิ่มส่วนประกอบของแอมป์จำนวนมาก โดยพื้นฐานแล้วจะใช้เพื่อจัดการกับการโหลดทรัพยากรอย่างมีประสิทธิภาพ นอกจากนี้ยังมีส่วนประกอบในการดูแลภาพเคลื่อนไหวแสดงข้อมูลการแสดงโฆษณาวิดเจ็ตโซเชียลเป็นต้น
มีส่วนประกอบ 2 ประเภทใน AMP
- Built-in
- External
Note- <amp-img> เป็นส่วนประกอบในตัวและพร้อมใช้งานหากมีการเพิ่มไฟล์ core amp js ส่วนประกอบภายนอกเช่น <amp-ad>, <amp-facebook>, <amp-video> และอื่น ๆ อีกมากมายต้องการไฟล์ js ที่เกี่ยวข้องกับคอมโพเนนต์ที่จะเพิ่ม
คุณสมบัติทั่วไป
แอตทริบิวต์เช่นความกว้างความสูงเค้าโครงตัวยึดตำแหน่งและทางเลือกจะพร้อมใช้งานสำหรับส่วนประกอบ AMP เกือบทั้งหมดที่มี แอตทริบิวต์เหล่านี้มีความสำคัญมากสำหรับคอมโพเนนต์ AMP เนื่องจากเป็นตัวตัดสินการแสดงองค์ประกอบในหน้า AMP
คุณลักษณะข้างต้นทั้งหมดที่แสดงไว้สำหรับ AMP จะกล่าวถึงโดยละเอียดในบทต่อ ๆ ไปของบทช่วยสอนนี้
โปรดทราบว่าตัวอย่างทั้งหมดในบทช่วยสอนนี้ได้รับการทดสอบสำหรับอุปกรณ์และใช้โหมด Google Mobile Emulator ให้เราเรียนรู้เกี่ยวกับเรื่องนี้โดยละเอียดตอนนี้
Google Mobile Emulator
ในการใช้โปรแกรมจำลองอุปกรณ์เคลื่อนที่ของ Google ให้เปิดเบราว์เซอร์ Chrome คลิกขวาและเปิดคอนโซลนักพัฒนาตามที่แสดงด้านล่าง -
เราสามารถเห็นเครื่องมือสำหรับนักพัฒนาสำหรับ Chrome ดังที่แสดงด้านบน กดลิงค์ที่คุณต้องการทดสอบในเบราว์เซอร์ สังเกตว่าหน้านี้แสดงในโหมดเดสก์ท็อป
ในการรับหน้าด้านบนเพื่อทดสอบอุปกรณ์ให้คลิกที่สลับแถบเครื่องมืออุปกรณ์ตามที่แสดงด้านล่าง -
คุณยังสามารถใช้แป้นพิมพ์ลัด Ctrl + shift + M สิ่งนี้จะเปลี่ยนโหมดเดสก์ท็อปเป็นโหมดอุปกรณ์ดังที่แสดงด้านล่าง -
รายชื่ออุปกรณ์สามารถดูได้ตามที่แสดงด้านล่าง -
คุณสามารถเลือกอุปกรณ์ที่คุณต้องการทดสอบหน้า โปรดทราบว่าหน้าทั้งหมดในบทช่วยสอนเหล่านี้ได้รับการทดสอบบน Google Mobile Emulator ตามที่แสดงด้านบน คุณลักษณะเดียวกันนี้สามารถใช้ได้กับ Firefox และเบราว์เซอร์ Internet Explorer ล่าสุดด้วย