مقدمه
یکی از مهمترین عناصری که به بخش پیکربندی صفحه تعلق دارد، عنصر link است. نقش این عنصر،
ایجاد ارجاع به یک سند یا فایل خارجی و در واقع، لینک کردن آن فایل به صفحه است. مهمترین
کاربرد عنصر link، افزودن یا لینک کردن یک استایلشیت خارجی به صفحه است که در درس قبل تحت
عنوان روش خارجی یا external برای اعمال کدهای CSS روی صفحه به آن اشاره کردیم. اما علاوه
بر استایلشیتها، انواع دیگری از فایلها را نیز میتوان با اهداف متفاوت به یک صفحهی وب
لینک کرد که در این درس با آنها آشنا میشویم.
کاربرد عنصر link
عنصر link برای لینک کردن یک منبع خارجی به صفحهی وب جاری کاربرد دارد. نوع منبع خارجیِ
لینکشده از روی مقدار صفت rel مشخص میشود و صفت href نیز حاوی آدرس
منبع مورد نظر است.
جدول زیر، لیست کاملی از صفتهای عنصر link را به همراه مقدار یا مقادیر ممکن برای هر صفت و
توضیحی کوتاه راجع به هر یک ارائه میدهد.
نام صفت |
مقدار صفت |
توضیح |
href |
URL |
از این صفت برای تعیین آدرس منبع لینکشده استفاده میشود.
|
rel |
icon | stylesheet | alternate | author | canonoical | dns-prefetch | help |
license | next | prev | preconnect | prefetch | preload | prerender |
pingback | search
|
این صفت، رابطهی بین سند جاری و منبع لینکشده را مشخص میکند.
|
hreflang |
Language code |
از این صفت برای اعلام زبان سند لینکشده استفاده میشود.
|
type |
MIME type |
این صفت، نوع مدیای منبع لینکشده یا MIME Type را تعیین میکند.
|
sizes |
Size |
این صفت، اندازهی آیکون لینکشده را تعیین میکند و فقط در صورتی که مقدار صفت
rel برابر با icon باشد، قابل استفاده است.
|
imagesizes |
|
این صفت تنها زمانی قابل استفاده است که مقدار صفت rel برابر با preload و صفت
as برابر با image باشد. در این شرایط، این صفت میتواند برای بارگذاری صحیح با
استفاده از یک عنصر img مورد استفاده قرار بگیرد.
|
media |
Media query |
دستگاههای مورد نظر برای نمایش سند لینکشده را تعیین میکند.
|
as |
audio | document | embed | fetch | font | image | object | script
| style | track | video | worker |
این صفت تنها زمانی که مقدار صفت rel برابر با preload یا prefetch باشد، قابل
استفاده است و کاربرد آن در تعیین نوع محتوایی است که باید توسط عنصر link لود
شود.
|
crossorigin |
anonymous | use-credentials |
این صفت برای مدیریت درخواستهای cross-origin کاربرد دارد.
|
disabled |
disabled |
این صفت تنها زمانی که مقدار صفت rel برابر با stylesheet باشد، قابل استفاده
است. کاربرد این صفت در غیرفعال کردن استایلشیت خارجی و ممانعت از اعمال آن
روی صفحه است تا زمانی که مقدار این صفت به false تغییر کند.
|
referrerpolicy |
|
این صفت برای تنظیم یک HTTP header با نام referer کاربرد دارد.
|
در ادامه، با انواع منابع قابل ارجاع توسط عنصر link که همانطور که گفته شد، با استفاده از
صفت rel تعیین میشود، آشنا میشویم.
انواع منابع قابل ارجاع توسط عنصر link
صفت rel بیانگر رابطهی بین صفحه و منبع خارجی مورد نظر است. مثلاً اگر بخواهیم یک
استایلشیت را به صفحه لینک کنیم، باید مقدار صفت rel را برابر با stylesheet قرار دهیم.
همانطور که در جدول بالا هم میبینید، براي صفت rel چندین مقدار مختلف قابل تعیین است که در
ادامه مهمترین این مقادیر را بررسی میکنیم.
افزودن یک favicon به صفحه
یکی از کارهای متداولی که صاحبان وبسایتها انجام میدهند، نمایش یک favicon در نوار آدرس
مرورگر است. قرار دادن یک لوگو به صورت favicon در صفحه میتواند به فرایند برندسازی تصویری
یا visual branding کمک کند. این کار با استفاده از عنصر link و تنظیم
مقدار icon براي صفت rel این عنصر صورت میگیرد. در ضمن، یک صفت href
نیز براي تعیین آدرس
فایل آیکون مورد نظر لازم است.
HTML
<link rel="icon" href="images/my-icon.ico">
لینک به یک استایلشیت
یادآوری میکنم که یک روش برای اعمال کدهای CSS روی صفحات وب این است که استایلها را در یک
فایل با پسوند .css بنویسیم و سپس، آن فایل را با استفاده از یک عنصر link به
صفحه متصل
کنیم. در این صورت، باید از مقدار stylesheet برای صفت rel مربوط به عنصر link استفاده کنیم.
برای مثال، اگر استایلها را در فایلی با نام style.css بنویسیم و آن را در پوشهی یکسانی
با فایل HTML قرار دهیم، میتوانیم به شکل زیر، آن را به صفحه لینک کنیم.
HTML
<link rel="stylesheet" href="style.css">
اعلام اولویت بارگذاری منابع با استفاده از Resource Hints
مرورگرهای مدرن از انواع تکنیکها برای افزایش کارایی (performance) وبسایت ما استفاده
میکنند؛ از اولویتبندی منابع و بارگذاری زودهنگام منابع مهمتر تا حدس زدن صفحهی بعدی که
کاربر بازدید خواهد کرد. با این حال، این مرورگرها هر چقدر هم که پیشرفته باشند، الزاماً
قادر به گرفتن بهترین تصمیم در اینگونه موارد نیستند. بلکه این شما هستید که به عنوان مالک
وبسایت، میدانید که کدام منابع مهمترند و مسیر بازدید کاربر از وبسایت شما چگونه است.
بنابراین، بهتر است که از این دانش خود استفاده کنید تا به مرورگرها کمک کنید تصمیمات
صحیحتری بگیرند و Resource Hints مکانیزمی است که این امکان را برای شما فراهم میکند.
یک resource hit همانطور که از نامش پیداست، یک توصیه یا راهنمایی (hint) در مورد نحوهی
مدیریت منابع وب است که به ما امکان میدهد به مرورگر در تعیین منابعی که باید زودتر
بارگذاری و تفسیر شوند، کمک کنیم. این کار با استفاده از مقادیر خاصی که به صفت rel مربوط
به عنصر link تخصیص داده میشود، به انجام میرسد. این مقادیر عبارتند از:
-
prefetch: این resource hit یک منبع را به عنوان منبعی که در آینده مورد نیاز
خواهد
بود، معرفی میکند تا مرورگر در صورت امکان، آن منبع را لود کرده و برای استفاده در
آینده، در cache ذخیره کند. البته prefetch یک hint با اولویت پایین محسوب میشود و
بنابراین، نباید از آن برای منابع دارای اهمیت زیاد استفاده کرد. بهترین استفادهای که
میتوانیم از این hint داشته باشیم این است که از آن برای افزایش زمان لود صفحات بعدی
استفاده کنیم. مثلاً زمانی که کاربر در حال وارد کردن یوزر و پسورد و احراز هویت است،
یک hint از نوع prefetch میتواند باعث شود که مرورگر در همین زمان منابع مورد نیاز را
بارگذاری کند.
-
dns-prefetch: اگر با روند لود و نمایش یک صفحه توسط مرورگر آشنا باشید،
میدانید که
مرورگر قبل از اینکه بتواند به سرور مقصد متصل شود، باید از طریق یک سیستم DNS نام
دامنهی موجود در URL را به ip متناظر با آن نام دامنه تبدیل کند. اگر یک وبسایت منابعی
را از یک منبع ثالث بارگذری کند، به ازای هر نام دامنه باید این عمل پیدا کردن ip که
DNS lookup نامیده میشود، انجام شود. در این موارد، میتوانیم با استفاده از یک hint
با نام dns-prefetch از مرورگر بخواهیم که کار DNS lookup را زودتر از موعد انجام دهد.
-
prerender: این مقدار نیز همانند prefetch میتواند باعث شود منابعی که احتمالاً
مقصد
بعدی کاربر هستند، زودتر بارگذاری شوند اما با این تفاوت که prefetch به یک منبع مشخص
مربوط است اما prerender به کل صفحه.
-
preconnect: این مقدار نیز همانند dns-prefetch موجب میشود تا مرورگر کار اتصال
به
سرور را قبل از اینکه درخواستی ارسال شود، انجام دهد. البته preconnect یک مرحله از
dns-prefetch جلوتر میرود و علاوه بر DNS lookup، دو عمل TLS Negotiation و TCP
handshakes را نیز زودتر از موعد انجام میدهد و کاملاً به سرور متصل میشود. با این
وجود، بهتر است که از preconnect و dns-prefetch در کنار هم استفاده کنیم؛ چون اگرچه
preconnect هر آنچه توسط dns-prefetch انجام می شود را به انجام میرساند اما
dns-prefetch از پشتیبانی بهتری در بین مرورگرها برخوردار است.
تعیین اولویت بارگذاری منابع با صفت preload
نقش preload مشابه نقش مقادیری مانند prefetch و prerender است اما یک تفاوت کلیدی هم با
آنها دارد و به همین دلیل است که preload را در یک بخش مجزا بررسی میکنیم. بر خلاف مقادیر
بالا که برای مرورگر جنبهی پیشنهادی دارند، preload جنبهی دستوری دارد و مرورگر باید از
آن پیروی کند.
با تخصیص مقدار preload به صفت rel، به مرورگر دستور داده میشود که منبع مشخصی را زودتر از
موعد و قبل از ارسال درخواست برای ان منبع، بارگذاری کند. فونتها، استایلشیتها و
اسکریپتها از مهمترین منابعی هستند که برای آنها از مقدار preload استفاده میشود.
تفاوت دیگری که preload با سایر مقادیر معرفیشده در بالا دارد، این است که علاوه برای
استفاده از ان، علاوه بر src و rel به یک صفت دیگر با نام as هم نیاز است.
HTML
<link rel="preload" href="logo.svg" as="image">
جدول زیر نشان میدهد که برای هر نوع منبع باید از چه مقداری برای صفت as استفغاده کرد.
مقدار صفت as |
نوع منبع |
audio |
فایلهای صوتی |
video |
فایلهای ویدیویی |
track |
فایل های زیرنویس Web VTT |
script |
اسکریپتها |
style |
استایلشیتها |
font |
فونتهای وب |
image |
تصاویر |
fetch |
درخواستهای XHP و Fetch API |
worker |
Web Workers |
embed |
درخواستهای embed |
object |
درخواستهای object |
document |
اسناد وب |