سلام همراهان عزیز میزفا
از مجموعه مقالات آموزش جی تی متریکس میزفا همراه شما هستیم. تو جلسه قبلی درباره رفع ارور Reduce the impact of third-party code صحبت کردیم و در این جلسه به آموزش رفع خطای Remove duplicate modules in JavaScript bundles در جی تی متریکس میپردازیم. این خطا مربوط به بهینه سازی جاوا اسکریپت هست و بهصورت دقیقتر، به حل مشکل کدهای تکراری JavaScript که استفاده کردیم اشاره میکنه. کمتر پیش میاد که چنین مشکلی در صفحاتمون وجود داشته باشه، اما در صورت مشاهده روش برطرف کردن خطا ممکنه سخت باشه. مخصوصا در سایتهایی که به شکل اختصاصی کد نویسی شدند، حل این مشکل نیاز به وجود برنامه نویس متخصص داره.
لطفا تا پایان با میزفا همراه باشید.
سرفصلهای پست
خلاصه خطای Remove duplicate modules in JavaScript bundles
میزان سختی: *****
روی چه مواردی تاثیر میذاره: خطای Keep request counts low and transfer sizes small
علت ایجاد خطای Remove duplicate modules in JavaScript bundles چیست؟
اجازه بدید با یه مثال علت ایجاد خطای Remove duplicate modules in JavaScript bundles رو بهتون بگم. اجازه بدید با یه مثال علت ایجاد این خطا رو بهتون بگم. اجازه بدید با یه مثال علت ایجاد این خطا رو بهتون بگم.
از اینکه باید یه جمله تکراری رو چند بار دیگه هم بخونید چه حسی دارید؟ قطعا حس خوشایندی نیست. پس به همین ترتیب مرورگر هم دوست نداره کدهای تکراری و فایلهای تکراری رو بررسی کنه. چرا که باعث تلف شدن وقتش میشه، درحالیکه برای Render کردن صفحه باید کلی کار مهم انجام بده. به همین دلیل جی تی متریکس جدید ارور Remove duplicate modules in JavaScript bundles رو به لیست خطاهاش اضافه کرده و میگه کدهای تکراری جاوا اسکریپت رو از صفحاتتون حذف کنید.
اما علت ایجاد کدهای تکراری چی میتونه باشه و چرا این مشکل بهوجود میاد؟ بهطور کلی دلایل مختلفی هست. در CMS های اختصاصی، در صورت مشاهده این ارور باید مشکل توسط برنامه نویس متخصص که از Codebase سایتمون کاملا آگاهی داره بررسی بشه. اما در CMS هایی مثل وردپرس ممکنه تداخل کدهای قالب و افزونهها باعث ایجاد مشکل Remove duplicate modules in JavaScript bundles در جی تی متریکس بشه. این ارور در شرایط مختلف ممکنه پیش بیاد که در ادامه چند سناریویی که رایجتر هست رو با هم بررسی میکنیم:
سناریوی اول: هر قالبی یه سری کدهای JS داره. از طرفی کتابخانههای جاوا اسکریپت (مثل JQuery) هم در طراحی سایت استفاده میشن و کاربردهای خاص خودشون رو دارند. حالا فرض کنید قالب سایت ما نیاز به JQuery داره و اون رو تو تگ head قرار میده. از طرفی ما افزونهای نصب میکنیم که اون هم نیاز به JQuery داره و اون رو تو head میذاره. نتیجه چی میشه؟ از یه کد تکراری دوبار استفاده شده و این باعث بالا رفتن حجم JavaScript و در نهایت افزایش حجم صفحه و کاهش سرعت سایت میشه. در چنین شرایطی با خطای Remove duplicate modules in JavaScript bundles مواجه میشیم.
سناریوی دوم: ممکنه در یک فایل JS، کدهای تکراری وجود داشته باشه. این مشکل از خود فایل جاوا اسکریپت هست که باید فایل مورد نظر رو پیدا و کدهاش رو بهینه سازی کنیم.
سناریوی سوم: بیشتر قالبهای وردپرس آیکونهای شبکههای اجتماعی رو بهصورت پیش فرض دارند. از طرفی ما شاید از بعضی افزونههای شبکههای اجتماعی یا افزونه Elementor استفاده کنیم که اونها هم این آیکونها رو لود میکنند. در این صورت خطای Remove duplicate modules in JavaScript bundles ایجاد میشه. البته شاید ورژن Favicon ها متفاوت باشه و GTmetrix متوجه این موضوع نشه و ظاهرا خطایی رخ نده. اما در حقیقت از کدهای تکراری استفاده شده و این مشکل وجود داره. راه حل این مشکل اینه که از افزونههایی استفاده کنیم که بشه در تنظیماتشون این آیکونها رو غیرفعال کرد.
سناریوی چهارم: گاهی اوقات ممکنه از کدهای جاوا اسکریپت استفاده کرده باشیم که کاملا یکسان نیستند، اما در اصل یه عملکرد مشابه دارند. یعنی هر دو این کدها دارند یه کار انجام میدن. تو این شرایط هم ارور Remove duplicate modules in JavaScript bundles ایجاد میشه.
چطور خطای Remove duplicate modules in JavaScript bundles را برطرف کنیم؟
با علت ایجاد این مشکل آشنا شدیم. باید حواسمون باشه که این خطا باعث افزایش حجم صفحه و در نهایت طولانی شدن زمان لود صفحه میشه. برطرف کردن خطای Remove duplicate modules in JavaScript bundles در سایتهای اختصاصی نیازمند داشتن متخصص برنامه نویس حرفهای هست که به کدهای سایت ما اشراف داشته باشه و بتونه مشکل رو برطرف کنه.
در سایتهای وردپرسی چند راه حل رو در سناریوهای بالا بیان کردیم. مثل اینکه اگه مشکل از آیکونهاست، در انتخاب افزونهها بیشتر دقت داشته باشیم. اما در حالت کلی، میتونیم افزونهها رو یکی یکی غیرفعال کنیم و بررسی کنیم کدوم افزونه باعث ایجاد این ارور شده و اگه پیداش کردیم، بهجاش از یه افزونه دیگه استفاده کنیم. طبیعتا این موضوع بسته به تعداد افزونههای شما زمانگیر خواهد بود. اما روند انجام کار به این صورته:
افزونه ۱ رو غیرفعال کنید و سپس کش سایت رو پاک کنید و بعد از یک دقیقه سایتتون رو در GTmetrix بررسی کنید. اگه خطا کاملا یا تا حدی برطرف شده بود، مشکل از همون افزونه بوده؛ در غیر این صورت:
افزونه ۲ رو غیرفعال کنید و سپس دوباره کش سایت رو پاک کنید و این مراحل رو تا جایی ادامه بدید که مشکل رو پیدا و حل کنید.
همین موضوع رو میتونید برای قالبها هم پیش ببرید. ممکنه اصلا افزونهها مشکلی نداشته باشند و خطا از سمت قالب باشه که یک محتوای یکسان رو با آدرسهای مختلف فراخوانی میکنه. البته چون جایگزین کردن افزونههای مشکل دار خیلی راحتتر از جایگزینی قالبه، بهتره اول افزونهها رو بررسی کنید.
بعد از اینکه منشا مشکل پیدا شد، مراحل زیر رو انجام بدید:
۱- وقتی منشا مشکل رو پیدا کردید، بررسی کنید و ببینید اگه از اون افزونه یا قالب استفاده نمیکنید، طبیعتا غیرفعال کردنش کاملا منطقیه.
۲- اگه افزونه رو نیاز دارید، پیشنهاد میکنیم به دنبال استفاده از یه افزونه مشابه باشید تا این خطا رفع بشه. اصولا در وردپرس برای هر کاری چندین افزونه خوب وجود داره.
۳- به کمک افزونههایی مثل افزونه Gonzales در وردپرس میتونید کاری کنید که یه فایل CSS یا JS برای یه افزونه خاص لود نشه و این مشکل رو به کمک این افزونه حل کنید.
کار رو به یه متخصص سئو یا تیم سئو بسپارید
اگه مقاله رو خوندید و تلاش کردید این خطا رو در GTmetrix برطرف کنید اما هنوز موفق نشدید، میتونید کار رو به یه متخصص برنامه نویسی یا متخصص سئو بسپارید. اگه تیم خوب میشناسید که هیچ ولی اگه دنبال یک تیم حرفهای و همینطور دنبال خدمات خوب در زمینه سئو میگردید، میتونید خدمات سئو میزفا رو بررسی کنید. کلی خدمات متنوع از جمله بهینه سازی سرعت سایت برای خدمت رسانی به شما عزیزان آماده کردیم.
جمع بندی
در این مقاله میزفا درباره روش رفع ارور Remove duplicate modules in JavaScript bundles در جی تی متریکس جدید صحبت کردیم. این خطا مربوط به بهینه سازی فایلهای JavaScript و عدم استفاده از کدهای تکراری برای JS و همینطور برای کتابخونههای JS هست. تو جلسه بعدی درباره خطای Remove unused CSS صحبت میکنیم.
اگه سوالی دارید در قسمت نظرات (پایین همین صفحه) بپرسید تا با کمال میل پاسخگوی شما عزیزان باشیم.