<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مریم حیدریان</title>
        <link>https://virgool.io/feed/@MaryamHeydarian</link>
        <description>توسعه‌دهنده وب | علاقمند به محصول | دانشجوی MBA دانشگاه امیرکبیر - پلی‌تکنیک تهران</description>
        <language>fa</language>
        <pubDate>2026-06-10 14:20:18</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/77002/avatar/d2BDzA.jpeg?height=120&amp;width=120</url>
            <title>مریم حیدریان</title>
            <link>https://virgool.io/@MaryamHeydarian</link>
        </image>

                    <item>
                <title>Semantic HTML Elements</title>
                <link>https://virgool.io/Rocket/semantic-html-elements-zbk1y8fvdzbc</link>
                <description>تو این نوشته می‌خوام درباره یک مفهوم مهم یعنی Semantic HTML Elements که اغلب تو مصاحبه‌ها هم ازش سوال میشه، صحبت کنم ولی قبل از اینکه بریم سراغ اصل مطلب، بهتره یکم بریم تو دل زبان‌شناسی!تو زبان انگلیسی، کلمه Semantic رو درمورد چیزایی به کار میبرن که به معنا مربوط باشن،  یعنی یجورایی سروکارشون با معنای اون چیز هست و میخوان اون رو توصیف کنن!سروکله این کلمه توی برنامه نویسی هم پیدا شده و اشاره به معنایِ یک قطعه کد داره، مثلا یک function توی جاوااسکریپت قراره چیکار کنه؟ یک کلاس CSS ای استایل مربوط به کدوم بخش از صفحه رو مشخص میکنه؟ یا اینکه نقش یک HTML element توی داکیومنت ما چیه؟!قطعا اسم یک function باید طوری انتخاب شه که توصیف‌کننده کار اون باشه مثلا:function createFruitList() {
      … 
}این تابع قراره یه لیستی از میوه‌ها رو بسازه.اسم یک کلاس CSS ای هم باید طوری انتخاب بشه که مشخص کنه این استایل‌ها، مربوط به کدوم المنت از صفحه هستن مثلا:.fruit-item { 
     ... 
}این کلاس، استایل‌های مربوط به هر آیتم میوه رو مشخص میکنه.درمورد HTML elements هم همین روند صادقه و یک سری element توی HTML وجود دارن که بهشون میگن Semantic HTML Elements، المنت‌هایی با معنی!اینجا، لیست Semantic HTML Elements رو براتون آوردم:&lt;article&gt;       //Defines independent, self-contained content
&lt;aside&gt;         //Defines content aside from the page content
&lt;details&gt;       //Defines additional details that the user can view or hide
&lt;figcaption&gt;    //Defines a caption for a &lt;figure&gt; element
&lt;figure&gt;        //Specifies self-contained content, like illustrations, diagrams, photos, code listings, etc.
&lt;footer&gt;        //Defines a footer for a document or section
&lt;header&gt;        //Specifies a header for a document or section
&lt;main&gt;          //Specifies the main content of a document
&lt;mark&gt;          //Defines marked/highlighted text
&lt;nav&gt;           //Defines navigation links
&lt;section&gt;       //Defines a section in a document
&lt;summary&gt;       //Defines a visible heading for a &lt;details&gt; element
&lt;time&gt;          //Defines a date/timeدلیل این نامگذاری هم که حتما تا الان براتون واضح شده...این المنت‌ها دارن با مخاطبشون حرف میزنن، خودشون رو معنا میکنن و در کل، دارن توصیف میکنن که چه محتوایی باید درونشون قرار بگیره و اهمیت این محتوا چقدره.مخاطبشون کیه؟!دولوپر‌هامرورگرهادولوپر‌ها و Semantic HTML Elementsسناریوهای مختلفی وجود داره که توی اون‌ها، Semantic elements به کمک دولوپرها میان، برای مثال:1- فرض کنید شما یک دولوپر تازه وارد در یک شرکت هستین و تسکی بهتون محول شده که ادامه کار یک دولوپر دیگه هست. شما کدهای موجود رو باز می‌کنین و شروع به خوندنشون می‌کنین. اینجاست که Semantic elements به کمکتون میان و با شما حرف میزنن. این شکلی شما به راحتی با خوندن یک قطعه کد میفهمین که هر المنت داره چه چیزی رو نشون میده و محتواش چی هست. مثلا تگ header نشون دهنده یک هدر تو صفحه هست و تگ li نشون دهنده آیتمی از یک لیست هست. اگر کدهای قبلی صرفا با استفاده از المنت‌های generic مثل div و span پیاده سازی شده بود، شما باید کلی وقت صرف این میکردین که ساختار صفحه رو بفهمین یا حتی مجبور شین از دولوپر قبلی توضیحات بیشتری بخواین! درحالیکه از استفاده از Semantic elements خوانایی کد رو بالا میبره و دولوپرها رو از سردرگمی نجات میده و باعث میشه کلی وقت سیو بشه!2- این سناریو خیلی شبیه به حالت قبله، با این تفاوت که شما قراره روی پروژه‌ای کار کنین که به زبان native خودتون هم نیست! تو این شرایط، استفاده از Semantic elements بهتون کمک می‌کنه که بفهمین تو هر قسمت از صفحه چه محتوایی قرار گرفته، بدون اینکه معنی خود محتوا رو بدونین :)مرورگرها و Semantic HTML Elementsیکی از کارهایی که مرورگرها انجام میدن این هست که یک HTML document رو می‌گیرن، اون رو parse می‌کنن و یک Document Object Model می‌سازن که همون DOM معروف خودمونه! DOM میاد و یک ساختار شبیه به درخت، از نودهای یک داکیومنت رو بهمون نمایش میده.یکی دیگه از کارهایی که مرورگرها انجام میدن ساخت Accessibility Object Model یا AOM هست. AOM مثل نسخه Semantic ای از DOM هست! وقتی از Semantic elements برای پیاده‌سازی یک داکیومنت استفاده شده باشه، AOM متفاوت‌ای نسبت به حالتی از این المنت‌ها استفاده نشده باشه، توسط مرورگر تولید میشه. (برای آشنایی بیشتر با DOM اینجا و AOM اینجا کلیک کنید.)حالا این AOM به چه دردی میخوره؟به Screen readerها کمک میکنه! Screen reader یک تکنولوژی کمکی هست که افرادی که مشکلات بینایی دارن با استفاده از این تکنولوژی بتونن از کامپیوتر استفاده کنن و حتی وبگردی کنن. screen reader ها از این المنت‌ها به عنوان یک تابلوی راهنما استفاده می‌کنن و این باعث میشه افرادی که مشکلات بینایی دارن درک بهتری از ساختار صفحات وب داشته باشن و بهتر بتونن تو این صفحات navigation انجام بدن.موتورهای جستجوگر و Semantic HTML Elementsیکی دیگه از جاهایی که اهمیت Semantic elements توش برجسته‌تر میشه، بحث SEO سایت هست. همونطور که گفته شد، استفاده از این المنت‌ها باعث میشه نقش محتوا در صفحه و میزان اهمیتش مشخص بشه. استفاده درست از Semantic elements باعث میشه که میزان مرتبط بودن محتوای یک صفحه با کلمات کلیدی به درستی مشخص بشه و درنتیجه، ranking سایت تو نتایج موتور جستجو بالاتر بره!** برای اینکه بتونین بهتر و راحت‌تر از این المنت‌ها استفاده کنین، فقط کافیه موقع پیاده‌سازی هر بخش از یک صفحه از خودتون بپرسین: «کدوم المنت بهتر می‌تونه محتوای این قسمت رو توصیف کنه؟»** استفاده از role attribute میتونه به یک المنت معنی خاصی رو بده مثلا:&lt;div role=&amp;quotbanner&amp;quot&gt;      
     &lt;span role=&amp;quotheading&amp;quot aria-level=&amp;quot1&amp;quot&gt;Three words&lt;/span&gt;      
     &lt;div role=&amp;quotnavigation&amp;quot&gt;
           &lt;a&gt;one word&lt;/a&gt;
           &lt;a&gt;one word&lt;/a&gt; 
           &lt;a&gt;one word&lt;/a&gt;
           &lt;a&gt;one word&lt;/a&gt;
      &lt;/div&gt;
 &lt;/div&gt;ولی بهتره بجای استفاده از این attribute، تا جای ممکن از Semantic element درست، در جای درست خودش استفاده کنیم:&lt;header&gt;
      &lt;h1&gt;Three words&lt;/h1&gt;
      &lt;nav&gt;
           &lt;a&gt;one word&lt;/a&gt;
           &lt;a&gt;one word&lt;/a&gt;
           &lt;a&gt;one word&lt;/a&gt;
           &lt;a&gt;one word&lt;/a&gt;
      &lt;/nav&gt;
 &lt;/header&gt;لینک رفرنس‌هایی که ازشون استفاده کردم رو اینجا براتون میذارم، امیدوارم که مفید بوده باشه :)https://developer.mozilla.org/en-US/docs/Glossary/Semanticshttps://web.dev/learn/html/semantic-htmlhttps://developer.chrome.com/docs/devtools/accessibility/reference/#explore-treehttps://www.freecodecamp.org/news/semantic-html5-elements/https://www.w3schools.com/html/html5_semantic_elements.asphttps://www.w3schools.com/html/html_accessibility.asphttp://web-accessibility.carnegiemuseums.org/foundations/semantic/#:~:text=Structural%2C%20semantic%20HTML%20is%20the,read%20by%20a%20screen%20reader.https://www.semrush.com/blog/semantic-html5-guide/#:~:text=Semantic%20HTML%20tags%20are%20important,better%20understanding%20of%20your%20content.https://www.pluralsight.com/guides/semantic-html</description>
                <category>مریم حیدریان</category>
                <author>مریم حیدریان</author>
                <pubDate>Sat, 31 Dec 2022 18:09:43 +0330</pubDate>
            </item>
                    <item>
                <title>DOCTYPE declaration in HTML documents</title>
                <link>https://virgool.io/@MaryamHeydarian/doctype-declaration-in-html-documents-oslgnrvb8jey</link>
                <description>بیشترمون برای یادگیری برنامه نویسی فرانت‌اند، از آموزش HTML شروع می‌کنیم و اولین چیزی هم که یاد می‌گیریم اینه که خط اول یک فایل HTMLای باید بنویسیم: &lt;DOCTYPE html!&gt;، ولی چرا؟ برای جواب دادن به این سوال بهتره یکم برگردیم عقب...اصلا چیشد که سروکله DOCTYPE پیدا شد؟در سال هایی که HTML تازه درحال شکل‌گیری بود، هنوز استانداردهای مشخص و یکپارچه‌ای برای وب وجود نداشت و کمپانی‌های سازنده مرورگرها هرجوری که دلشون می‌خواست و بدون توجه به رقبا، فیچرهای جدیدی رو به مرورگرهاشون اضافه میکردن!نتیجه این بی‌توجهی سازندگان مرورگرها به رقبا و آشفتگی‌ها چی بود؟!این بود که دولوپرهای وب باید یک مرورگر رو انتخاب می‌کردن و وب‌سایت رو برحسب استانداردهای اون مرورگر پیاده سازی می‌کردن، درنتیجه ممکن بود وب‌سایت توسط بعضی از مرورگرها ساپورت نشه و روی اون‌ها درست کار نکنه!راه‌حل چی بود؟این بود که W3C درنهایت یه سری استاندارد تعریف کرد که همه سازندگان مرورگرها و دولوپرها از این استانداردها تبعیت کنن. اینجوری دیگه وب‌سایت‌ها توی همه مرورگرها ساپورت و render میشدن :)))ولی داستان به همین سادگی‌ها هم نبود...مشکل این راه‌حل چی بود؟این بود که تا به اون روز کلی وب‌سایت وجود داشت که با استانداردهای مختلف مرورگرها پیاده‌سازی شده بودن و سازگار با استانداردهای جدید W3C نبودن. پس با به وجوداومدن استانداردهای جدید، وب‌سایت‌‌های قدیمی به مشکل خوردن و نیاز به تغییرات گسترده دیده شد!برای حل این مشکل چه راهکاری پیشنهاد شد؟این که سازندگان مرورگرها بیان یه سری programming rendering mode برای مرورگرهاشون تعریف کنن.اینجوری دولوپرها با اضافه کردن یک خط کد به ابتدای کدهاشون به مرورگر میفهموندن که از کدوم render mode برای داکیومنتشون استفاده کنه، این یک خط کد همون DOCTYPE declaration هست!در اون زمان سه تا render mode برای مرورگرها تعریف شد:Full standards mode: renders pages according to the W3C web standardsQuirks mode: renders pages in a non standards compliant wayAlmost standards mode: is close to full standards mode, but features support for a small number of quirksبا گذشت زمان، همه مرورگرها این استانداردها رو کاملا پیاده‌سازی کردن و دولوپرها هم توی پیاده‌سازی وب‌سایت‌ها، کاملا اون‌ها رو رعایت کردن، بخاطرهمین دیگه اول هر HTML document میبینیم که نوشته شده &lt;DOCTYPE html!&gt; و این tag به این معنی هست که این render mode موردنیاز برای این داکیومنت full standard render mode هست.یکم فنی تر!تعریف نوع و ورژن یک HTML document با استفاده از یک تگ در اولین خط اون داکیومنت صورت می‌گیره و این تعریف، به مرورگرها کمک می‌کنه که همشون یک داکیومنت رو به روش یکسانی parse کنن.مثلا صفحات‌وب که با HTML4.0.1 پیاده‌سازی شدن باید دارای DTD (document type definition) DOCTYPE باشند و از اون‌جایی که خود DTD هم سه نوع مختلف داره، DOCTYPE declaration این داکیومنت‌ها به این سه شکل تعریف میشن:&lt;!DOCTYPE HTML PUBLIC &amp;quot-//W3C//DTD HTML 4.01//EN&amp;quot &amp;quothttp://www.w3.org/TR/html4/strict.dtd&amp;quot&gt;&lt;!DOCTYPE HTML PUBLIC &amp;quot-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot &amp;quothttp://www.w3.org/TR/html4/loose.dtd&amp;quot&gt;&lt;!DOCTYPE HTML PUBLIC &amp;quot-//W3C//DTD HTML 4.01 Frameset//EN&amp;quot &amp;quothttp://www.w3.org/TR/html4/frameset.dtd&amp;quot&gt;ولی برای صفحات‌وب که با استفاده از HTML5 پیاده‌سازی شدن تنها کافیه از &lt;DOCTYPE html!&gt; در ابتدای داکیومنت استفاده کنیم.درنهایت اینکه تعریف نوع داکیومنت case sensitive نیست و میشه ازش به هرکدوم از شکل‌های زیر استفاده کرد:&lt;!DOCTYPE html&gt;&lt;!DocType html&gt;&lt;!Doctype html&gt;&lt;!doctype html&gt;منبع این نوشته رو هم براتون میذارم البته سعی کردم چیزی از قلم نیفته. امیدوارم براتون مفید بوده باشه ;))) https://www.freecodecamp.org/news/what-is-the-doctype-declaration-in-html/https://www.w3schools.com/tags/tag_doctype.asp</description>
                <category>مریم حیدریان</category>
                <author>مریم حیدریان</author>
                <pubDate>Thu, 09 Dec 2021 14:04:20 +0330</pubDate>
            </item>
                    <item>
                <title>وب اسمبلی (WASM) چی هست و چیکارس؟!</title>
                <link>https://virgool.io/@MaryamHeydarian/%D8%AA%D9%88%DB%8C%DB%8C%D8%AA%D8%B1-%DA%86%D9%84%D9%86%D8%AC-%D8%B3%D9%88%D8%A7%D9%84-%D8%A7%D9%88%D9%84-web-assembly-%DA%86%DB%8C-%D9%87%D8%B3%D8%AA-%D9%88-%DA%86%DB%8C%DA%A9%D8%A7%D8%B1%D8%B3-ozqkizricwru</link>
                <description>وب اسمبلی چی هست و چیکارس؟!وب اسمبلی یا به طور مختصر WASM، یک زبان شبیه به اسمبلی هست که در مرورگرهای مدرن پشتیبانی میشه (اینجا میتونین ببینین که تقریبا 92.54 درصد مرورگر ها WASM رو پشتیبانی میکنن). این زبان به فرمت باینری هست که درواقع یک زبان سطح پایین (زبانی نزدیک به زبان ماشین) محسوب میشه و درک اون برای مرورگر راحت تر هست. با استفاده از وب اسمبلی، افراد میتونن امکان انتخاب زبان برنامه نویسی رو داشته باشن؛ یعنی علاوه بر JavaScript (یا TypeScript تو پروژه هایی با مقیاس بزرگ تر)، میتونن از زبان های سطح بالایی مثل C# برای کد زدن استفاده کنن و کدشون توی مرورگر اجرا بشه و حتی در برخی مواقع، سرعت بهتری هم نصیبشون بشه!پس کسی قرار نیست با این زبان کد بزنه؛ بلکه کدهای نوشته شده به زبان های دیگه، به این زبان ترجمه (compile) میشن (شاید تو مقاله های مختلف هم به مفهوم compile target برخورد کنید).اما چی باعث میشه که با استفاده از WASM، سرعت بهتری رو تجربه کنیم؟!جواب های مختلفی برای این سوال وجود داره ولی یکی از ساده ترین دلایل این هست که فایل های JavaScript قبل از اینکه روی مرورگر اجرا بشن، باید از مرحله های مختلفی (parse, compile, optimize) عبور کنن ولی فایل های WASM این قابلیت رو دارن که حین دانلود شدن، پردازش هم بشن.در نهایت: یکی از مزیت های JavaScript‌ همیشه این بوده که روی همه مرورگرها قابلیت اجرا داره اما حالا WASM  زبانی هست که هم روی همه مرورگرهای مدرن پشتیبانی میشه و هم عملکرد و سرعت خوبی داره و این، یعنی ورود زبان‌هایی مثل C#, Go, Rust به مرورگرها...! برای مثال Blazor یک فریموورک نسبتا نوپا هست که به ما این امکان رو میده که کد های نوشته شده به زبان C# رو با استفاده از WASM روی مرورگر اجرا کنیم!اگه میخواین کمی عمیق تر درمورد WASM بخونین، حتما یه سری به اینجا هم بزنید :)</description>
                <category>مریم حیدریان</category>
                <author>مریم حیدریان</author>
                <pubDate>Sun, 10 Jan 2021 00:03:41 +0330</pubDate>
            </item>
            </channel>
</rss>