Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 45: การทดสอบประสิทธิภาพของแอปพลิเคชัน Vue.js

1. ความสำคัญของการทดสอบประสิทธิภาพ

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

สิ่งที่ควรทดสอบ:

  • เวลาในการโหลดหน้าเว็บ
  • ความเร็วในการตอบสนอง
  • การใช้หน่วยความจำและ CPU

2. เครื่องมือสำหรับทดสอบประสิทธิภาพ

2.1 Chrome DevTools

Chrome DevTools เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการวิเคราะห์และปรับปรุงประสิทธิภาพ

การใช้งาน Tab “Performance”:

  1. เปิด Chrome DevTools (Ctrl+Shift+I หรือ Cmd+Option+I)
  2. ไปที่ Tab “Performance”
  3. กด “Record” และทำการใช้งานแอปพลิเคชัน
  4. วิเคราะห์กราฟเพื่อหาจุดที่ใช้เวลาและทรัพยากรมากเกินไป

2.2 Lighthouse

Lighthouse ช่วยประเมินประสิทธิภาพ ความสามารถในการเข้าถึง (Accessibility) และ SEO ของแอปพลิเคชัน

การใช้งาน Lighthouse:

  1. เปิด Chrome DevTools
  2. ไปที่ Tab “Lighthouse”
  3. เลือกหมวดหมู่ที่ต้องการวิเคราะห์ เช่น Performance, SEO
  4. กด “Generate report”

2.3 WebPageTest

WebPageTest เป็นเครื่องมือสำหรับวิเคราะห์การโหลดหน้าเว็บในมุมมองของผู้ใช้งานจากสถานที่ต่าง ๆ ทั่วโลก

การใช้งาน:

  1. เข้าไปที่ WebPageTest
  2. ใส่ URL ของแอปพลิเคชัน
  3. เลือกตำแหน่งเซิร์ฟเวอร์และเบราว์เซอร์
  4. กด “Start Test”

3. การเพิ่มประสิทธิภาพแอปพลิเคชัน Vue.js

3.1 การลดขนาดไฟล์ JavaScript

ใช้ Code Splitting และ Lazy Loading เพื่อลดขนาดไฟล์ JavaScript

ตัวอย่างการตั้งค่า Lazy Loading:

const routes = [
  {
    path: '/about',
    component: () => import('@/views/About.vue')
  }
];

3.2 การใช้ Vue DevTools

Vue DevTools ช่วยวิเคราะห์ State และ Events ในแอปพลิเคชัน

การติดตั้ง Vue DevTools:

3.3 การปรับปรุง DOM

ใช้ v-once สำหรับ Element ที่ไม่เปลี่ยนแปลง:

<h1 v-once>Static Title</h1>

ใช้ Key ใน v-for:

<ul>
  <li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>

3.4 การบีบอัดไฟล์ Static

ใช้ Gzip หรือ Brotli เพื่อลดขนาดไฟล์

การตั้งค่าใน Nginx:

gzip on;
gzip_types text/plain application/javascript application/json text/css;

4. การจัดการ State และ Cache

4.1 การจัดการ State ด้วย Vuex หรือ Pinia

การจัดการ State อย่างเหมาะสมช่วยลดการส่งผ่าน Props และเพิ่มประสิทธิภาพ

ตัวอย่างการแคชใน Vuex:

const store = {
  state: {
    cachedData: null
  },
  actions: {
    async fetchData({ state, commit }) {
      if (state.cachedData) {
        return state.cachedData;
      }
      const data = await fetch('/api/data').then(res => res.json());
      commit('setCachedData', data);
      return data;
    }
  },
  mutations: {
    setCachedData(state, data) {
      state.cachedData = data;
    }
  }
};

4.2 การใช้ Service Worker

ใช้ Service Worker เพื่อแคชไฟล์ Static และทำให้แอปพลิเคชันทำงานได้แม้ไม่มีอินเทอร์เน็ต

การตั้งค่า Workbox:

const { GenerateSW } = require('workbox-webpack-plugin');

module.exports = {
  plugins: [
    new GenerateSW({
      clientsClaim: true,
      skipWaiting: true
    })
  ]
};

5. การติดตามประสิทธิภาพใน Production

5.1 การใช้ Sentry

Sentry ช่วยตรวจสอบข้อผิดพลาดและปัญหาประสิทธิภาพใน Production

การติดตั้ง Sentry:

npm install @sentry/vue

การตั้งค่า:

import * as Sentry from '@sentry/vue';
import { Integrations } from '@sentry/tracing';

Sentry.init({
  Vue: app,
  dsn: 'your-dsn-url',
  integrations: [new Integrations.BrowserTracing()],
  tracesSampleRate: 1.0
});

5.2 การใช้ New Relic

New Relic ช่วยตรวจสอบประสิทธิภาพของเซิร์ฟเวอร์และแอปพลิเคชัน


6. สรุป

ในบทนี้ คุณได้เรียนรู้วิธีการทดสอบและเพิ่มประสิทธิภาพแอปพลิเคชัน Vue.js โดยใช้เครื่องมือ เช่น Chrome DevTools, Lighthouse และ Sentry พร้อมทั้งเทคนิคการเพิ่มประสิทธิภาพ เช่น Lazy Loading และการจัดการ State อย่างมีประสิทธิภาพ การปรับปรุงเหล่านี้ช่วยเพิ่มความเร็วและการตอบสนองของแอปพลิเคชัน

ในบทถัดไป เราจะพูดถึงการพัฒนา Vue.js สำหรับแพลตฟอร์มมือถือด้วยเทคโนโลยีเช่น Ionic และ NativeScript!