🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ علی
باندل کردن فایل ها
جامعه لاراول ایجاد شده در ۰۴ اردیبهشت ۱۴۰۲

سلام

اینکه تمام فایل‌های جاوااسکریپت رو در یک فایل قرار میدیم پرفورمنس سایت رو پایین نمیاره؟ چون اینطوری فایل هایی که ممکنه در یک صفحه موردنیاز نباشه هم دانلود بشن.

از طرفی هم باندل کردن همه فایل‌های جاوااسکریپت تو پروژهای بزرگ باعث میشه حجم فایل هم زیاد بشه

سلام علی عزیز

در واقع، جواب به این سوال به شدت وابسته به شرایط و پیکربندی خاص شماست. اما در کل، این اصل کارایی رو میتونه تحت تأثیر قرار بده که به شما کمک میکنه تصمیم درستی بگیرید.

با توجه به اینکه در پروژه‌های بزرگ با تعداد فایل‌های جاوااسکریپت زیاد، باندل کردن فایل‌های جاوااسکریپت میتونه مزایایی داشته باشه. وقتی تمام فایل‌های جاوااسکریپت رو در یک فایل قرار میدید، تعداد درخواست‌های شبکه کاهش پیدا میکنه و بار سرور کمتر میشه، همچنین فایل‌های جاوااسکریپت کوچک‌تر باعث میشه که صفحات سریع‌تر بارگذاری شوند.

اما، این روش به خوبی کار نمیکنه در مواردی که فایل‌های جاوااسکریپت بزرگی دارید، یا در صفحاتی که فقط بخشی از کدهای جاوااسکریپت لازم هست. در این موارد، فایل جاوااسکریپت باید در زمان بارگذاری بارگیری شود، حتی اگر این بارگیری موقعیت نامطلوبی برای کاربر ایجاد کند.

به طور کلی، بهترین روش این است که تمام فایل‌های جاوااسکریپت را در یک فایل باندل نکنید، به جای آن، فایل‌های جاوااسکریپت را به صورت منطقی در برنامه خود به گروه‌های کوچک‌تر تقسیم کنید و فقط فایل‌هایی را که برای یک صفحه خاص لازم هستند را بارگیری کنید.

احمدرضا فاطمی کیا ۰۴ اردیبهشت ۱۴۰۲، ۱۵:۴۶

ممنون از پاسختون


پاسختون خوب بود اما گره ذهنی منو باز نکرد. با یه مثال توضیح میدم سوالمو


من سه تا ماژول js دارم : module_2 ، module_1 و module_3

واسه باندل کردن این ماژول‌ها با استفاده از vite (در لاراول) اونطور که من تو آموزش‌ها دیدم میان تویه پیکربندی vite یک entry point مشخص میکنن مثلا resource/js/main.js و تمام ماژول‌ها رو داخل اون import میکنند. و بعد انتهای تگ body به فایل main.js یک reference میدن.

@vite('resources/js/app.js')

مشکل مثال بالا اینه که module_2 فقط در صفحه home استفاده میشه اما ساختار بالا باعث میشه که module_2 در بقیه صفحه‌ها که نیازی به این ماژول ندارن هم بارگیری بشه.


برای رفع این مشکل خوبه بیاییم موقع باندل کردن ماژول‌ها module_2 رو از بقیه جدا کنیم و در یک فایل جداگانه قرار بدیم. اینطوری هر صفحه ماژولی که نیاز داره رو بارگیری میکنه که پرفورمنس بهتری داره


سوالم اینه که چطوری با استفاده از vite ماژول هارو تویه دو تا فایل جداگانه import کنم تا هر صفحه فقط مجبور باشه ماژول‌های مورنیاز خودشو بارگیری کنه؟؟

آیا برای انجام اینکار دستمون باز هست تویه پیکربندی vite چندین entry point تعریف کنیم؟ مثلا

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
export default defineConfig({
    plugins: [
        laravel({
            input: ['resources/css/app.css', 'resources/js/app.js', 'resources/js/module_2.js'],
            refresh: true,
        }),
    ],
}); 
علی ۰۴ اردیبهشت ۱۴۰۲، ۱۶:۵۲

بله ولی زیاد جالب نیست روش هندل کردنش در vite.

مطابق این لینک عمل کنید:

https://janestreetdigital.com/blog/laravel-vite-setting-up-multiple-bundles/

احمدرضا فاطمی کیا ۰۴ اردیبهشت ۱۴۰۲، ۱۷:۵۱

پس vite از چندین input پشتیبانی نمیکنه اون راهکاری که تو لینکی که شما دادی توضیح داده یجورایی شبیه به ماست مالی کردن یک کاستی هست از طرفی vite یک ابزار جدید هست و در کنار خوبی‌ها کاستی هایی هم داره.

در کل بهتر نیست تو پروژه هایی که به چندین input نیاز هست بریم سمت webpack ؟ و فقط تو پروژه هایی که حجم فایل main.js در حد معقول هست از vite استفاده کنیم؟


علی ۰۴ اردیبهشت ۱۴۰۲، ۱۸:۲۳

بله دقیقا این راه بهترین راه هست.

بهترین پاسخ
احمدرضا فاطمی کیا ۰۴ اردیبهشت ۱۴۰۲، ۱۸:۳۰