กฎ PageSpeed และคำแนะนำ

เผยแพร่: 17 สิงหาคม 2018

คู่มือนี้จะตรวจสอบกฎของ PageSpeed Insights ในบริบทต่างๆ เช่น สิ่งที่ควรคำนึงถึงเมื่อเพิ่มประสิทธิภาพเส้นทางการแสดงผลที่สำคัญ และเหตุผล

หากต้องการให้การแสดงผลครั้งแรกเร็วที่สุด ให้ลดจำนวนทรัพยากรที่สำคัญในหน้าเว็บ (หากเป็นไปได้) และลดจำนวนไบต์ที่สำคัญที่ดาวน์โหลด และเพิ่มประสิทธิภาพความยาวเส้นทางที่สำคัญ

ทรัพยากร JavaScript จะบล็อกโปรแกรมแยกวิเคราะห์โดยค่าเริ่มต้น เว้นแต่จะทำเครื่องหมายเป็น async หรือเพิ่มโดยใช้ข้อมูลโค้ด JavaScript พิเศษ การบล็อก JavaScript ของโปรแกรมแยกวิเคราะห์จะบังคับให้เบราว์เซอร์รอ CSSOM และหยุดการสร้าง DOM ชั่วคราว ซึ่งอาจทำให้การแสดงผลครั้งแรกล่าช้าอย่างมาก

เลือกใช้ทรัพยากร JavaScript แบบอะซิงโครนัส

ทรัพยากรแบบไม่พร้อมกันจะเลิกบล็อกโปรแกรมแยกวิเคราะห์เอกสารและช่วยให้เบราว์เซอร์หลีกเลี่ยงการบล็อก CSSOM ก่อนที่จะเรียกใช้สคริปต์ บ่อยครั้ง หากสคริปต์ใช้แอตทริบิวต์ async ได้ ก็หมายความว่าสคริปต์นั้นไม่จำเป็นสำหรับการแสดงผลครั้งแรก พิจารณาโหลดสคริปต์แบบไม่พร้อมกันหลังจากการแสดงผลครั้งแรก

หลีกเลี่ยงการเรียกเซิร์ฟเวอร์แบบซิงค์

ใช้เมธอด navigator.sendBeacon() เพื่อจํากัดข้อมูลที่ส่งโดย XMLHttpRequest ในตัวแฮนเดิล unload เนื่องจากเบราว์เซอร์จํานวนมากกําหนดให้คําขอดังกล่าวเป็นแบบซิงค์กัน การเปลี่ยนหน้าเว็บจึงอาจช้าลง ซึ่งบางครั้งอาจสังเกตเห็นได้ชัด โค้ดต่อไปนี้แสดงวิธีใช้ navigator.sendBeacon() เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ในตัวจัดการ pagehide แทนในตัวจัดการ unload

<script>
  function() {
    window.addEventListener('pagehide', logData, false);
    function logData() {
      navigator.sendBeacon(
        'https://putsreq.herokuapp.com/Dt7t2QzUkG18aDTMMcop',
        'Sent by a beacon!');
    }
  }();
</script>

เมธอด fetch() ให้วิธีที่ดีกว่าในการขอข้อมูลแบบไม่พร้อมกัน fetch() ประมวลผลคำตอบโดยใช้ Promise แทนที่จะเป็น Handler เหตุการณ์หลายรายการ การตอบกลับ fetch() เป็นแอบเจ็กต์สตรีม ซึ่งแตกต่างจากการตอบกลับ XMLHttpRequest ซึ่งหมายความว่าการเรียกใช้ json() จะแสดงผล Promise ด้วย

<script>
  fetch('./api/some.json')
    .then(
      function(response) {
        if (response.status !== 200) {
          console.log('Looks like there was a problem. Status Code: ' +  response.status);
          return;
        }
        // Examine the text in the response
        response.json().then(function(data) {
          console.log(data);
        });
      }
    )
    .catch(function(err) {
      console.log('Fetch Error :-S', err);
    });
</script>

เมธอด fetch() ยังจัดการคําขอ POST ได้ด้วย

<script>
  fetch(url, {
    method: 'post',
    headers: {
      "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
    },
    body: 'foo=bar&lorem=ipsum'
  }).then(function() { // Additional code });
</script>

เลื่อนการแยกวิเคราะห์ JavaScript

เพื่อลดปริมาณงานที่เบราว์เซอร์ต้องดำเนินการเพื่อแสดงผลหน้าเว็บ ให้เลื่อนสคริปต์ที่ไม่จำเป็นซึ่งไม่สำคัญต่อการสร้างเนื้อหาที่มองเห็นได้สำหรับการแสดงผลครั้งแรก

หลีกเลี่ยง JavaScript ที่ทำงานเป็นเวลานาน

JavaScript ที่ทำงานเป็นเวลานานจะบล็อกไม่ให้เบราว์เซอร์สร้าง DOM, CSSOM และแสดงผลหน้าเว็บ ดังนั้นให้เลื่อนตรรกะการเริ่มต้นที่ไม่จำเป็นสำหรับการแสดงผลครั้งแรกไว้ภายหลัง หากจำเป็นต้องเรียกใช้ลำดับการเริ่มต้นแบบยาว ให้ลองแบ่งออกเป็นหลายขั้นตอนเพื่อให้เบราว์เซอร์ประมวลผลเหตุการณ์อื่นๆ ที่อยู่ระหว่างนั้น

เพิ่มประสิทธิภาพการใช้ CSS

CSS จําเป็นต่อการสร้างต้นไม้การแสดงผล และ JavaScript มักจะบล็อก CSS ในระหว่างการสร้างหน้าเว็บครั้งแรก ตรวจสอบว่า CSS ที่ไม่จำเป็นมีสถานะ "ไม่สำคัญ" (เช่น การค้นหาสื่อสิ่งพิมพ์และสื่ออื่นๆ) และจำนวน CSS ที่สำคัญและเวลาในการนำส่งมีน้อยที่สุด

ใส่ CSS ลงในส่วนหัวของเอกสาร

ระบุทรัพยากร CSS ทั้งหมดภายในเอกสาร HTML ให้เร็วที่สุดเพื่อให้เบราว์เซอร์ค้นพบแท็ก <link> และส่งคำขอ CSS โดยเร็วที่สุด

หลีกเลี่ยงการนำเข้า CSS

คําสั่งการนําเข้า CSS (@import) ช่วยให้ชีตสไตล์หนึ่งนําเข้ากฎจากไฟล์ชีตสไตล์อื่นได้ อย่างไรก็ตาม โปรดหลีกเลี่ยงคำสั่งเหล่านี้เนื่องจากจะเพิ่มการไปกลับไปยังเส้นทางที่สำคัญ: ระบบจะค้นพบทรัพยากร CSS ที่นำเข้าหลังจากที่ได้รับและแยกวิเคราะห์สไตล์ชีต CSS ที่มีกฎ @import เท่านั้น

รวม CSS การบล็อกการแสดงผลไว้ในหน้า

คุณอาจต้องพิจารณาแทรก CSS ที่สำคัญลงในเอกสาร HTML โดยตรงเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด วิธีนี้จะช่วยขจัดการทำธุรกรรมแบบไปกลับเพิ่มเติมในเส้นทางที่สำคัญ และหากทําอย่างถูกต้องจะส่งเส้นทางที่สำคัญที่มีความยาว "1 รอบ" ได้ โดยมีเพียง HTML เท่านั้นที่เป็นทรัพยากรที่บล็อก

ความคิดเห็น