بارگذاری در Web Worker

توضیحات

این افزونه اجرای جاوا اسکریپت را به یک Web Worker منتقل می‌کند، که با آزاد کردن رشته اصلی (main thread) عملکرد را بهبود می‌بخشد. این باید منجر به بهبود امتیازات تعامل تا ترسیم بعدی (INP) شود.

این قابلیت آزمایشی است.

برای انتخاب یک اسکریپت جهت بارگذاری در یک ورکر، کافیست داده اسکریپت worker را به یک اسکریپت ثبت شده اضافه کنید. برای مثال،
اگر اسکریپتی با هندل foo ثبت کرده‌اید، برای انتقال آن به یک وب ورکر به روش زیر عمل کنید:

wp_script_add_data( 'foo', 'worker', true );

برخلاف استراتژی‌های بارگذاری اسکریپت (async/defer)، هر اسکریپت درون‌خطی قبل/بعد (before/after) مرتبط با اسکریپت ثبت شده منتقل شده به ورکر نیز به ورکر منتقل می‌شود، در حالی که با استراتژی‌های اسکریپت، یک اسکریپت درون‌خطیِ بعد (after script)، مانع از به تأخیر افتادن اسکریپت می‌شود.

در غیر این صورت، این افزونه در حال حاضر با ادغام‌های داخلی برای انتقال Google Analytics به یک وب ورکر برای افزونه زیر ارائه می‌شود:

لطفاً پس از فعال‌سازی، آمار خود را رصد کنید تا اطمینان حاصل کنید که تمام رویدادهای مورد انتظار ثبت می‌شوند. در عین حال، امتیازات INP خود را برای بررسی بهبود نظارت کنید.

این افزونه متکی بر کتابخانه Partytown 🎉 ساخته Builder.io است که تحت مجوز MIT منتشر شده. این کتابخانه در نسخه بتا است و چندین باگ باز دارد.

پیکربندی Partytown را می‌توان از طریق فیلتر plwwo_configuration تغییر داد. برای مثال:

<?php
add_filter( 'plwwo_configuration', function ( $config ) {
    $config['mainWindowAccessors'][] = 'wp'; // Make the wp global available in the worker (e.g. wp.i18n and wp.hooks).
    return $config;
} );

با این حال، همه گزینه‌های پیکربندی را نمی‌توان به این روش به JSON سریال‌سازی کرد، برای مثال پیکربندی resolveUrl یک تابع است. برای مشخص کردن این مورد، می‌توانید یک اسکریپت درون‌خطی به صورت زیر اضافه کنید.

<?php
add_action(
    'wp_enqueue_scripts',
    function () {
        wp_add_inline_script(
            'web-worker-offloading',
            <<<JS
            window.partytown = {
                ...(window.partytown || {}),
                resolveUrl: (url, location, type) => {
                    if (type === 'script') {
                        const proxyUrl = new URL('https://my-reverse-proxy.example.com/');
                        proxyUrl.searchParams.append('url', url.href);
                        return proxyUrl;
                    }
                    return url;
                },
            };
            JS,
            'before'
        );
    }
);

همچنین گزینه‌های پیکربندی زیادی وجود دارد که مستند نشده‌اند، بنابراین به تعاریف TypeScript مراجعه کنید.

سوالات متداول

چرا اسکریپت‌های منتقل شده من کار نمی‌کنند و خطای 404 در کنسول برای `partytown-sandbox-sw.html` می‌بینم؟

اگر متوجه شدید که اسکریپت‌های منتقل شده (offloaded) شما کار نمی‌کنند و همزمان خطای 404 در کنسول برای فایلی در /wp-content/plugins/web-worker-offloading/build/partytown-sandbox-sw.html?1727389399791 مشاهده می‌کنید، احتمالاً ابزارهای توسعه‌دهنده کروم (Chrome DevTools) را باز کرده‌اید و گزینه “Bypass for Network” در پنل Application فعال است.

کجا می‌توانم باگ‌های امنیتی را گزارش دهم؟

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

برای گزارش یک مشکل امنیتی، لطفاً از برنامه WordPress HackerOne بازدید کنید.

چگونه می‌توانم در افزونه مشارکت کنم؟

مشارکت‌ها همیشه مورد استقبال هستند! درباره نحوه مشارکت در دستورالعمل تیم عملکرد هسته بیشتر بیاموزید.

کد منبع افزونه در مخزن WordPress/performance در گیت‌هاب قرار دارد.

نقد و بررسی‌ها

26 سپتامبر 2025 1 پاسخ
I uploaded and activated. I assume that as the plugin details state that rankmath is integrated (rankmath has the option to load analytics locally- if i recall- which may affect it), that i didnt actually have to do anthing. However my gt metrix score deccreased, when i deactivated it went back up. So, at this point i cannot try on complicated site (buddypress, bb forum, geo directory, etc)- which is a pity as mobile is really getting hit with google analytics, tag etc- its the reason i took google ads off- it slows everyting way down. Anyway, just letting you know. Will keep an eye on this. It would be really helpful if there was more docs (we arent all developers)so we could think it through a bit more. Thanks Kenny
12 ژانویه 2025 1 پاسخ
Problems with Google Analytics and Google Tag ManagerTested: 1 week. While Enabled: No hits, no recorded live users/users in Google Analytics. Google Tag Manager also didnt get to connect to the site. – Clarity did record users live, and page hits. This is because Clarity is not included in the built-in integrationWhile disabled: Google Analytics got hits right away – same with Google Tag Manager.
خواندن تمامی 2 نقد و بررسی‌

توسعه دهندگان و همکاران

“بارگذاری در Web Worker” نرم افزار متن باز است. افراد زیر در این افزونه مشارکت کرده‌اند.

مشارکت کنندگان

“بارگذاری در Web Worker” به 6 زبان ترجمه شده است. با تشکر از مترجمین برای همکاری و کمک‌هایشان.

ترجمه “بارگذاری در Web Worker” به زبان شما.

علاقه‌ مند به توسعه هستید؟

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

گزارش تغییرات

0.2.0

بهبودها

  • ادغام بارگذاری در Web Worker با سایت کیت گوگل (Google Site Kit). (1686)
  • ادغام بارگذاری در Web Worker با رنک مث سئو (Rank Math SEO). (1685)
  • ارائه اسکریپت‌های فشرده‌نشده زمانی که SCRIPT_DEBUG فعال است. (1643)

رفع اشکالات

  • رفع ردیابی رویدادهایی مانند add_to_cart در ادغام ووکامرس. (1740)

0.1.1

بهبودها

  • افزودن متا generator بارگذاری در Web Worker. (1598)

0.1.0

  • انتشار اولیه.