تحلیل عملکرد و بهینهسازی در Vue.js
بهینهسازی Vue.js باعث افزایش سرعت بارگذاری، کاهش مصرف منابع و بهبود تجربه کاربری میشود. در اینجا روشهایی برای تحلیل عملکرد و بهینهسازی Vue بررسی میکنیم.
1. استفاده از Vue DevTools برای تحلیل عملکرد
🔹 Vue DevTools یک افزونه برای Chrome و Firefox است که امکان بررسی وضعیت کامپوننتها، دادهها و رویدادها را فراهم میکند.
🔹 نصب Vue DevTools:
-
برای Chrome: از Chrome Web Store
-
برای Firefox: از Mozilla Add-ons
🔹 ویژگیهای مهم Vue DevTools:
-
بررسی وضعیت کامپوننتها و دادهها در لحظه
-
مشاهده تغییرات state و ریاکتیویتی (Reactivity)
-
بررسی رویدادهای اجراشده در اپلیکیشن
2. کاهش حجم باندل (Bundle Size)
1.2 استفاده از Lazy Loading برای بارگذاری تنبل (Code Splitting)
🔹 در Vue Router میتوان مسیرها را بهصورت دینامیک و تنبل (Lazy Load) بارگذاری کرد.
🔹 روش معمول (بدون Lazy Loading):
import About from "./views/About.vue";
🔹 روش بهینه (با Lazy Loading):
const About = () => import("./views/About.vue");
این روش باعث میشود که صفحات فقط در صورت نیاز بارگذاری شوند و حجم اولیه کاهش یابد.
۲.۲ حذف وابستگیهای غیرضروری
بررسی کنید که آیا تمام پکیجهای نصبشده ضروری هستند؟
-
از Webpack Bundle Analyzer برای مشاهده حجم پکیجها استفاده کنید:
npm install --save-dev webpack-bundle-analyzer
سپس در vue.config.js اضافه کنید:
module.exports = {
configureWebpack: {
plugins: [new BundleAnalyzerPlugin()]
}
};
با اجرای npm run build، گزارشی از اندازه فایلهای پروژه نمایش داده میشود.
3. بهینهسازی ریاکتیویتی (Reactivity)
1.3 استفاده از computed به جای methods
اگر مقدار یک متغیر ثابت باقی میماند تا زمانی که وابستگیهای آن تغییر کند، از computed استفاده کنید.
روش نادرست:
<p>دو برابر مقدار: {{ double() }}</p>
</template>
<script>
export default {
data() {
return { number: 5 };
},
methods: {
double() {
console.log("محاسبه دوباره...");
return this.number * 2;
}
}
};
</script>
روش بهینه با computed:
<p>دو برابر مقدار: {{ double }}</p>
</template>
<script>
export default {
data() {
return { number: 5 };
},
computed: {
double() {
console.log("محاسبه فقط در صورت تغییر مقدار!");
return this.number * 2;
}
}
};
</script>
مقدار double فقط زمانی دوباره محاسبه میشود که number تغییر کند.
2.3 استفاده از watch برای تغییرات خاص
روش نادرست (اجرای غیرضروری کد داخل computed)
userData() {
this.fetchUser(); // مشکل: هر بار رندر دوباره اجرا میشود!
}
}
روش بهینه با watch:
userId(newId) {
this.fetchUser(newId);
}
}
watch فقط در صورت تغییر مقدار userId اجرا میشود.
4. بهینهسازی رندر کامپوننتها
1.4 استفاده از key در v-for برای بهینهسازی Diffing
Vue هنگام تغییر لیست، مقادیر را بر اساس کلید (Key) بهینه میکند.
روش نادرست (بدون key)
روش بهینه با key:
2.4 استفاده از v-memo برای کاهش محاسبات غیرضروری
در Vue 3، میتوان v-memo را روی بخشهایی از DOM قرار داد تا در صورت تغییر نکردن دادهها، Vue آنها را دوباره رندر نکند.
<div v-memo="[name]">
<p>نام: {{ name }}</p>
</div>
</template>
اگر مقدار name تغییر نکند، Vue این بخش را دوباره رندر نمیکند.
5. بهینهسازی استایلها
استفاده از scoped در استایل کامپوننتها
اگر یک کامپوننت دارای استایلهای اختصاصی است، بهتر است از scoped استفاده کنید.
button {
background-color: blue;
}
</style>
این کار باعث میشود که استایلها فقط روی همان کامپوننت تأثیر بگذارند.
6. فعالسازی کش (Cache) در Vue
Vue قابلیت موقت نگه داشتن کامپوننتها در حافظه (Caching) را دارد.
<keep-alive>
<MyComponent />
</keep-alive>
</template>
هنگام بازگشت به یک کامپوننت، Vue دوباره آن را از ابتدا لود نمیکند.
جمعبندی
✔ Vue DevTools برای تحلیل عملکرد استفاده کنید.
✔ Lazy Loading باعث کاهش حجم پروژه میشود.
✔ از computed به جای methods برای جلوگیری از محاسبات اضافی استفاده کنید.
✔ watch را برای نظارت بر تغییرات خاص استفاده کنید.
✔ v-memo و keep-alive رندر کامپوننتها را بهینه میکنند.
✔ با Webpack Bundle Analyzer میتوان وابستگیهای اضافی را پیدا و حذف کرد.
