Image
Image

بارگذاری پیش‌دستانه (Speculative Loading)

توضیحات

این افزونه پشتیبانی از API قوانین حدس و گمان (Speculation Rules API) را اضافه می‌کند که امکان تعریف قوانینی را فراهم می‌کند که بر اساس آن‌ها URLهای خاصی به صورت پویا پیش‌واکشی یا پیش‌رندر می‌شوند. این قابلیت اصلی بارگذاری پیش‌دستانه در وردپرس ۶.۸ ادغام شد، اما به طور پیش‌فرض فقط با اشتیاق محافظه‌کارانه (conservative eagerness) پیش‌واکشی می‌کند. در مقابل، این افزونه به طور پیش‌فرض با اشتیاق متوسط (moderate) پیش‌رندر می‌کند (یعنی هنگام تعامل با یک لینک)، و رابط کاربری را برای سفارشی‌سازی حالت و اشتیاق از طریق بخش «بارگذاری پیش‌دستانه» در صفحه مدیریت تنظیمات > خواندن فراهم می‌کند.

به طور پیش‌فرض، بارگذاری پیش‌دستانه تنها برای کاربران خارج شده فعال است، زیرا صفحات احراز هویت نشده معمولاً تنها واجد شرایط کش هستند و بنابراین برای پیش‌واکشی/پیش‌رندر کارآمدترند. این بدان معنی است که سایت‌هایی با کاربران وارد شده مکرر در بخش کاربری – مانند سایت‌های تجارت الکترونیک، انجمن‌ها یا سایت‌های عضویت – از این ویژگی بهره‌مند نخواهند شد. اگر سرور شما می‌تواند بار اضافی را تحمل کند (به عنوان مثال، با کش شیء پایدار)، می‌توانید بارگذاری پیش‌دستانه را برای همه کاربران وارد شده یا فقط برای مدیران فعال کنید. این تنظیم منحصراً بر صفحات بخش کاربری تأثیر می‌گذارد؛ صفحات مدیریت همیشه مستثنی هستند.

یک فیلتر می‌تواند برای مستثنی کردن مسیرهای URL خاص از واجد شرایط بودن برای پیش‌واکشی و پیش‌رندر استفاده شود (بخش سوالات متداول را ببینید). به عنوان جایگزین، می‌توانید کلاس CSS no-prerender را به هر لینک (تگ <a>) که نباید پیش‌رندر شود اضافه کنید. برای اطلاعات بیشتر به سوالات متداول مراجعه کنید.

پشتیبانی مرورگر

API قوانین حدس و گمان یک وب API جدید است و عملکرد مورد استفاده توسط افزونه در مرورگرهای مبتنی بر کرومیوم مانند کروم، اج یا اپرا با استفاده از نسخه ۱۲۱ یا بالاتر پشتیبانی می‌شود. سایر مرورگرها مانند سافاری و فایرفاکس این عملکرد را بدون هیچ اثر نامطلوبی نادیده می‌گیرند؛ آن‌ها به سادگی از بارگذاری پیش‌دستانه بهره‌مند نخواهند شد. توجه داشته باشید که برخی افزونه‌های مرورگر ممکن است پیش‌بارگذاری را به طور پیش‌فرض غیرفعال کنند.

این افزونه قبلاً با نام Speculation Rules شناخته می‌شد.

نصب

نصب از طریق وردپرس

  1. به مسیر افزونه‌ها > افزودن بروید.
  2. عبارت Speculative Loading را جستجو کنید.
  3. افزونه بارگذاری پیش‌دستانه را نصب و فعال کنید.

نصب دستی

  1. کل پوشه speculation-rules را در دایرکتوری /wp-content/plugins/ آپلود کنید.
  2. به بخش افزونه‌ها بروید.
  3. افزونه بارگذاری پیش‌دستانه را فعال کنید.

پس از فعال‌سازی

  1. به صفحه مدیریت تنظیمات > خواندن بروید.
  2. از کنترل‌های موجود در بخش بارگذاری پیش‌دستانه برای پیکربندی بارگذاری پیش‌دستانه استفاده کنید.

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

چگونه می‌توانم از پیش‌واکشی و پیش‌رندر شدن URLهای خاص جلوگیری کنم؟

هر URLی را نمی‌توان به طور منطقی پیش‌رندر کرد. پیش‌رندر محتوای استاتیک معمولاً قابل اعتماد است، اما پیش‌رندر محتوای تعاملی، مانند URL خروج، می‌تواند منجر به مشکلاتی شود. به همین دلیل، برخی URLهای اصلی وردپرس مانند /wp-login.php و /wp-admin/* از پیش‌واکشی و پیش‌رندر مستثنی هستند. علاوه بر این، هر URL تولید شده با wp_nonce_url() (یا که حاوی متغیر کوئری _wpnonce باشد) و لینک‌های nofollow نیز نادیده گرفته می‌شوند. می‌توانید الگوهای URL اضافی را با استفاده از فیلتر plsr_speculation_rules_href_exclude_paths مستثنی کنید.

مثال زیر اطمینان می‌دهد که URLهایی مانند https://example.com/cart/ یا https://example.com/cart/foo از پیش‌واکشی و پیش‌رندر مستثنی هستند:

<?php
add_filter(
    'plsr_speculation_rules_href_exclude_paths',
    function ( array $exclude_paths ): array {
        $exclude_paths[] = '/cart/*';
        return $exclude_paths;
    }
);

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

برای این منظور، فیلتر plsr_speculation_rules_href_exclude_paths حالت فعلی (یا “prefetch” یا “prerender”) را دریافت می‌کند تا استثناهای شرطی را فراهم کند.

مثال زیر اطمینان می‌دهد که URLهایی مانند https://example.com/products/... نمی‌توانند پیش‌رندر شوند، در حالی که همچنان اجازه می‌دهد پیش‌واکشی شوند:

<?php
add_filter(
    'plsr_speculation_rules_href_exclude_paths',
    function ( array $exclude_paths, string $mode ): array {
        if ( 'prerender' === $mode ) {
            $exclude_paths[] = '/products/*';
        }
        return $exclude_paths;
    },
    10,
    2
);

همانطور که در بالا ذکر شد، افزودن کلاس CSS no-prerender به یک لینک مانع از پیش‌رندر شدن آن می‌شود (اما نه پیش‌واکشی). علاوه بر این، لینک‌های دارای rel=nofollow نه پیش‌واکشی می‌شوند و نه پیش‌رندر، زیرا برخی افزونه‌ها این مورد را به لینک‌های غیر idempotent (مانند افزودن به سبد خرید) اضافه می‌کنند؛ چنین لینک‌هایی در حالت ایده‌آل باید دکمه‌هایی باشند که درخواست POST را فعال می‌کنند یا حداقل باید از wp_nonce_url() استفاده کنند.

آیا ملاحظات خاصی برای رفتار بارگذاری پیش‌دستانه وجود دارد؟

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

اگر این افزونه را در سایتی بدون پیوندهای یکتا زیبا (pretty permalinks) اجرا می‌کنید و مطمئن هستید که هیچ پارامتر کوئری سفارشی در حال استفاده نیست که بتواند باعث تغییر وضعیت شود، می‌توانید بارگذاری پیش‌دستانه را از طریق فیلتر plsr_enabled_without_pretty_permalinks فعال کنید:

<?php
add_filter( 'plsr_enabled_without_pretty_permalinks', '__return_true' );

این چه تأثیری بر تجزیه و تحلیل و شخصی‌سازی خواهد داشت؟

پیش‌رندر می‌تواند بر تجزیه و تحلیل (analytics) و شخصی‌سازی تأثیر بگذارد.

برای جاوا اسکریپت سمت کلاینت، توصیه می‌شود این موارد را تا زمانی که پیش‌رندر فعال شود (مثلاً با کلیک روی لینک) به تأخیر بیندازید. برخی راهکارها (مانند Google Analytics) قبلاً این کار را به طور خودکار انجام می‌دهند، تأثیر بر تجزیه و تحلیل را ببینید. علاوه بر این، آی‌فریم‌های با منشأ متفاوت (cross-origin) تا زمان فعال‌سازی بارگذاری نمی‌شوند که می‌تواند از مشکلات در اینجا جلوگیری کند.

حدس و گمان با اشتیاق پیش‌فرض moderate (متوسط) خطر عدم بازدید صفحه پیش‌رندر شده توسط کاربر را کاهش می‌دهد و بنابراین از هرگونه عوارض جانبی بارگذاری پیش از موعد چنین لینکی جلوگیری می‌کند. در مقابل، حدس و گمان eager (مشتاقانه) خطر عدم بارگذاری صفحات پیش‌رندر شده را افزایش می‌دهد. به عنوان جایگزین، این افزونه پیشنهاد می‌کند که فقط با کلیک ماوس/اشاره‌گر (محافظه‌کارانه) حدس بزند که خطر را حتی بیشتر کاهش می‌دهد و گزینه‌ای برای سایت‌هایی است که نگران این موضوع هستند، به قیمت داشتن زمان پیش‌روی کمتر و در نتیجه افزایش عملکرد کمتر.

یک صفحه پیش‌رندر شده به صفحه‌ای که آن را پیش‌رندر می‌کند مرتبط است، بنابراین ممکن است شخصی‌سازی در این مرحله شناخته شده باشد و تغییرات (مانند مرور سایر محصولات، یا ورود/خروج) اغلب نیاز به بارگذاری صفحه جدید و در نتیجه پیش‌رندر جدید دارند که سپس این موارد را در نظر می‌گیرد. اما قطعاً چیزی است که باید از آن آگاه بود و آزمایش کرد! در صورت نیاز زمانی که وضعیت بدون بارگذاری صفحه جدید تغییر می‌کند، صفحات پیش‌رندر شده را می‌توان با حذف عنصر <script> قوانین حدس و گمان از صفحه با استفاده از APIهای استاندارد JavaScript DOM لغو کرد.

کجا می‌توانم بازخورد خود را درباره افزونه ارسال کنم؟

بازخوردها تشویق شده و بسیار قدردانی می‌شوند، به خصوص که این افزونه ممکن است شامل ویژگی‌های آینده هسته وردپرس باشد. اگر پیشنهاد یا درخواستی برای ویژگی‌های جدید دارید، می‌توانید آن‌ها را به عنوان یک issue در مخزن گیت‌هاب تیم عملکرد وردپرس ثبت کنید. اگر برای عیب‌یابی به کمک نیاز دارید یا سوالی درباره افزونه دارید، لطفاً یک موضوع جدید در انجمن پشتیبانی ما ایجاد کنید.

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

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

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

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

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

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

Image
16 آوریل 2025
Although I have not tried the plugin on live sites, my testing on 3-4 dev boxes leaves me impressed. I can see and feel the speed increase I have a couple of heavy sites and can see this plugin fitting right into the flow. Will get on it soon 🙂
Image
19 جولای 2024 1 پاسخ
I was using another plugin which does a similar job but Speculative Loading appears to be substantially quicker. Using on about 10 sites and no issues. Thank you
Image
27 می 2024
Es verkürzt die Ladzeit für einen Benutzer sichtbar, auch wenn im Hintergrund die Seite gleichschnell geladen wird, so fühlt es sich für einen Benutzer extrem schnell an.
خواندن تمامی 18 نقد و بررسی‌

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

“بارگذاری پیش‌دستانه (Speculative Loading)” نرم افزار متن باز است. افراد زیر در این افزونه مشارکت کرده‌اند.

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

“بارگذاری پیش‌دستانه (Speculative Loading)” به 14 زبان ترجمه شده است. با تشکر از مترجمین برای همکاری و کمک‌هایشان.

ترجمه “بارگذاری پیش‌دستانه (Speculative Loading)” به زبان شما.

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

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

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

1.6.0

بهبودها

  • افزودن گزینه انتخابی (opt-in) بارگذاری پیش‌دستانه برای درخواست‌های احراز هویت شده. (2097)
  • افزودن اعلان هشدار به تنظیمات بارگذاری پیش‌دستانه برای کاربران احراز هویت شده در صورت عدم وجود کش شیء پایدار. (2144)
  • به‌روزرسانی توضیحات readme بارگذاری پیش‌دستانه برای اشاره به هدف پس از ادغام در هسته. (2120)

1.5.0

بهبودها

  • افزودن پشتیبانی از API هسته وردپرس بارگذاری پیش‌دستانه، بارگذاری پیاده‌سازی API خود افزونه به صورت شرطی. (1883)

1.4.0

بهبودها

  • پیاده‌سازی ملاحظات بارگذاری پیش‌دستانه برای رفتار ایمن‌تر. (1784)

1.3.1

رفع باگ‌ها

  • بررسی اینکه آیا rel شامل nofollow است به جای اینکه فقط nofollow باشد، هنگام مستثنی کردن بارگذاری پیش‌دستانه. (1232)

1.3.0

بهبودها

  • جلوگیری از بارگذاری پیش‌دستانه لینک‌ها به دایرکتوری‌های آپلود، محتوا، افزونه‌ها، قالب یا شیوه‌نامه. (1167)
  • تسهیل جاسازی بارگذاری پیش‌دستانه در سایر افزونه‌ها/پوسته‌ها. (1159)
  • بهبود کیفیت کلی کد با بررسی‌های دقیق‌تر تحلیل استاتیک. (775)
  • افزایش حداقل PHP مورد نیاز به ۷.۲. (1130)

1.2.2

رفع باگ‌ها

  • اصلاح ترکیب مسیرهای مستثنی شده href برای در نظر گرفتن کدگذاری JSON و تفاوت URLهای سایت/خانه. (1164)

مستندات

  • به‌روزرسانی readme با پشتیبانی مرورگر و بخش سوالات متداول درباره تجزیه و تحلیل و شخصی‌سازی. (1155)

1.2.1

بهبودها

  • افزودن لینک تنظیمات به لینک‌های اقدام افزونه بارگذاری پیش‌دستانه. (1145)
  • افزایش حداقل نسخه PHP به ۷.۲. (1130)

رفع باگ‌ها

  • مستثنی کردن URLهای _wpnonce در قوانین حدس و گمان. (1143)
  • مستثنی کردن لینک‌های rel=nofollow از پیش‌واکشی/پیش‌رندر. (1142)

1.2.0

  • افزودن uninstall.php گمشده برای حذف گزینه پایگاه داده افزونه. (1128)

1.1.0

  • امکان مستثنی کردن الگوهای URL به طور خاص از پیش‌رندر یا پیش‌واکشی. (1025)
  • تغییر نام افزونه به «Speculative Loading». (1101)
  • افزودن تگ generator بارگذاری پیش‌دستانه. (1102)
  • افزایش حداقل نسخه مورد نیاز وردپرس به ۶.۴. (1062)
  • به‌روزرسانی نسخه تست شده وردپرس به ۶.۵. (1027)

1.0.1

  • Escape کردن پیشوند مسیر و محدود کردن آن به یک pathname در قوانین حدس و گمان. (951)
  • اجبار به پشتیبانی از پوسته اسکریپت HTML5 هنگام چاپ اسکریپت JSON. (952)
  • افزودن فایل‌های آیکون و بنر برای دایرکتوری افزونه. (987)

1.0.0

  • انتشار اولیه افزونه بارگذاری پیش‌دستانه به عنوان یک افزونه مستقل. (733)