سرور مجازی

۶ مطلب با کلمه‌ی کلیدی «سرورمجازی» ثبت شده است

  • ۰
  • ۰

نحوه استایل دادن به عناصر HTML با حاشیه ها، سایه ها و خطوط در CSS

ورود به سایت

معرفی

کار با سایه‌ها، حاشیه‌ها و خطوط کلی یکی از اجزای کلیدی توسعه وب است و می‌تواند تعریف بصری پیرامون عناصر HTML و آیتم‌های متنی ارائه دهد. ظاهر حاشیه ها و سایه ها را می توان از طریق پنج ویژگی اصلی CSS دستکاری کرد: border، border-radius، box-shadow، text-shadow و outline. سایه ها عمق را فراهم می کنند و به عناصر کمک می کنند تا برجسته شوند، در حالی که ویژگی های حاشیه می توانند عملکردهای بصری مختلفی را انجام دهند، از ایجاد یک تقسیم کننده خطی بین محتوا تا تعریف فضای یک شبکه. ویژگی border-radius گوشه های گردی را روی جعبه ها ایجاد می کند و حتی می تواند یک شکل دایره ای ایجاد کند. در نهایت، outline یک ویژگی است که اغلب نادیده گرفته می شود که بسیاری از عملکردهای مشابه ویژگی مرزی را بدون ایجاد اختلال در جریان محتوا ارائه می دهد.

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

پیش نیازها

  • درک درستی از ویژگی‌های آبشار و ویژگی‌های CSS، که می‌توانید با خواندن نحوه اعمال سبک‌های CSS در HTML با Cascade و Specificity به آن دست پیدا کنید.
  • آشنایی با انتخابگرهای نوع، انتخابگرهای ترکیب‌کننده و گروه‌های انتخابگر، که می‌توانید در نحوه انتخاب عناصر HTML به سبک با CSS بیابید.
  • آشنایی با خواص رنگ در CSS برای اطلاعات بیشتر، نحوه استفاده از مقادیر رنگ با CSS را ببینید.
    آشنایی با گرادیان های CSS با ویژگی های پس زمینه. نحوه اعمال سبک‌های پس‌زمینه به عناصر HTML با CSS را بررسی کنید تا تجربه ایجاد پس‌زمینه گرادیان را به دست آورید.
  • یک فایل HTML خالی که در دستگاه محلی شما به عنوان index.html ذخیره شده است که می توانید از ویرایشگر متن و مرورگر وب انتخابی خود به آن دسترسی داشته باشید. برای شروع، آموزش نحوه تنظیم پروژه HTML خود را بررسی کنید و نحوه استفاده و درک عناصر HTML را برای دستورالعمل‌هایی در مورد نحوه مشاهده HTML خود در مرورگر خود دنبال کنید. اگر در HTML تازه کار هستید، کل نحوه ساخت یک وب سایت در سری HTML را امتحان کنید.

راه اندازی پایه HTML و CSS

در این بخش، پایه HTML را برای تمام سبک های بصری که در طول آموزش می نویسید، تنظیم می کنید. شما همچنین فایل styles.css خود را ایجاد کرده و سبک هایی را اضافه می کنید که طرح بندی محتوا را تنظیم می کند.

با باز کردن index.html در ویرایشگر متن خود شروع کنید. سپس HTML زیر را به فایل اضافه کنید:

index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Travel Disclosure - Destination: Moon</title>
    <link href="styles.css" rel="stylesheet" />
  </head>
  <body>
  </body>
</html>

تنظیمات صفحه زیادی در عنصر <head> تعریف شده است. اولین عنصر <meta> مجموعه کاراکتری را برای استفاده از متن تعریف می کند. به این ترتیب اکثر کاراکترهای خاص، مانند علائم تاکیدی، بدون کدهای HTML خاص ارائه می شوند. عنصر دوم <meta> به مرورگرها و به ویژه مرورگرهای تلفن همراه می گوید که چگونه با عرض محتوا رفتار کنند. در غیر این صورت، مرورگر عرض دسکتاپ 960 پیکسلی را شبیه سازی می کند. عنصر <title> عنوان صفحه را در اختیار مرورگر قرار می دهد. عنصر <link> فایل CSS را بارگیری می کند که در آن استایل های خود را در طول این آموزش می نویسید.

صفحه همچنین برای استایل دادن به محتوا نیاز دارد. برای متن قانونی، شما از محتوای نمونه از Legal Ipsum به عنوان کپی پرکننده استفاده خواهید کرد که فقط برای اهداف طراحی در نظر گرفته شده است.

در ویرایشگر متن خود به index.html برگردید و HTML برجسته شده را از بلوک کد زیر اضافه کنید:

index.html

<!doctype html>
<html>
  ...
  <body>
    <section class="disclosure-alert">
      <header class="disclosure-header">
        <h2  class="disclosure-title"><em>Destination: Moon</em> Travel Disclosure</h2>
      </header>
      <div class="disclosure-content">
        <p>Although space travel is routine practice, there are many unknown possibilities that any traveller must be aware of before traveling with <em>Destination: Moon</em>. Agreeing to this disclosure of knowns is required prior to purchase of tickets with <em>Destination: Moon</em>. PLEASE, READ AND AGREE TO THE FOLLOWING DISCLOSURE OF TRAVEL UNKNOWNS BEFORE PROCEEDING TO PURCHASE.</p>
        <div class="legal-contents">
          <p>Effect of Termination. Upon termination, You agree not to use it under the terms of Sections 4(a) through 4(e) for that Covered Code, or any third party. Description of Modifications.<p>
          <p>You must make sure that you know you can do these things. To make sure the requirements of this Agreement. REQUIREMENTS A Contributor may participate in any way. Notwithstanding the foregoing, if applicable law or agreed to in writing, the Copyright Holder, but only to the terms applicable to Covered Code. Inability to Comply Due to Statute or Regulation.</p>
          <p>If it is impossible for You to the Recipient retains any such Additional Terms. Versions of This License. If you are re-using, b) a hyperlink (where possible) or URL to the terms of Sections 4(a) through 4(e) for that Work shall terminate if it fails to comply with the exception of content that is granting the License. License Terms 1.</p>
          <p>Grant of Patent Infringement. If you have knowledge of patent infringement litigation, then the only applicable Base Interpreter is a "commercial item" as defined in 48 C.F.R. Consistent with 48 C.F.R.</p>
          <p>U.S. Government End Users acquire Covered Code (Original Code and/or as part of a Larger Work; and b) allow the Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Distributor in writing of such Contributor, if any, to grant more extensive warranty protection to some or all of these conditions: (a) You must make it clear that any Modifications made by such Respondent, or (ii) withdraw Your litigation claim is resolved (such as Wikimedia-internal copying), it is Recipient's responsibility to secure any other exploitation. Program, and in any of the provisions set forth in Section 4(b), you shall terminate if it fails to comply with.</p>
          <p>Please note that these licenses do allow commercial uses of your company or organization, to others outside of this License Agreement), provided that You meet the following terms which differ from this License) and (b) You must duplicate the notice in Exhibit A in each changed file stating how and when you changed the files and the definitions are repeated for your past or future use of the Original Code; or 3) for infringements caused by: i) third party against the drafter will not be used as a handle): 1895.22/1011. This Agreement shall be held by the terms of this agreement. If any provision of this license which gives you legal permission to modify NetHack, or otherwise using this software in source and binary forms, with or without modification in printed materials or in related documentation, stating that you provide a service, including but not limited to the terms under which you distribute, wherever you describe the origin or ownership of such termination, the Recipient a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6b1 or any part of Derivative Works. If You initiate litigation by asserting a patent infringement against You in that instance.</p>
          <p>Effect of New York and the like. While this license document the following disclaimer in the Work contain all the conditions listed in Clause 6 above, concerning changes from the Work. If you created a Modification, you may at your option offer warranty protection to some or all of the Licensed Program as a product of your Modifications available to others outside of this License.</p>
          <p>Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted to Licensor for inclusion in the documentation and/or other rights consistent with this program; if not, write to the modified files to carry prominent notices stating that You distribute, all copyright, patent, trademark, and attribution notices from the Public Domain or from the Original Code; 2) separate from the Public Domain or from the Work, you may distribute a Compiled Work on their system exactly as it is being maintained, then ask the Current Maintainer to update their communication data within one month. If the program is free software; you can change the License will not have to defend and indemnify every other Contributor to control, and cooperate with the Source Code version of the Licensed Program, or any Contributor.</p>
        </div>
        <div class="button-group">
          <a href="#" class="button button-primary">
            Agree
          </a>
          <a href="#" class="button button-secondary">
            Disagree
          </a>
        </div>
      </div>
    </section>
  </body>
</html>

تغییرات خود را در index.html ذخیره کنید و سپس مرورگر وب خود را باز کنید. آیتم منوی File را انتخاب کنید و سپس گزینه Open را انتخاب کنید و فایل index.html خود را در مرورگر بارگذاری کنید. تصویر زیر نحوه نمایش این HTML در مرورگر را نشان می دهد:

یک فایل جدید به نام styles.css در همان دایرکتوری index.html ایجاد کنید، سپس آن را در ویرایشگر متن خود باز کنید. این فایل شامل تمام سبک های استفاده شده در طول آموزش است. اولین مجموعه از سبک ها یک زیبایی شناسی کلی را اعمال می کند که شما از آن خواهید ساخت. CSS را از بلوک کد زیر در فایل styles.css خود اعمال کنید:

styles.css

html, body {
  height: 100%;
}

body {
  display: flex;
  margin: 0;
  font: 100% / 1.5 sans-serif;
  background: url("images/moon-bg.jpg") no-repeat fixed center / cover black;
}
.disclosure-alert {
  background-color: hsl(0, 0%, 95%);
  width: 85%;
  max-width: 48rem;
  margin: auto;
  color: hsl(0, 0%, 20%);
}
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
}
.disclosure-title {
  margin: 0;
  font-size: 2rem;
  line-height: 1.25;
}
.disclosure-content {
  margin: 1.5rem;
}
.legal-contents {
  margin-top: 1.5rem;
  background-color: white;
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
.button-group {
  margin-top: 1.5rem;
  display: flex;
  justify-content: center;
}
.button {
  display: inline-block;
  text-align: center;
  padding: 0.5rem 1rem;
  background: black;
  text-decoration: none;
  color: white;
  width: 50%;
  max-width: 8rem;
}
.button + .button {
  margin-left: 1.5rem;
}
.button-primary {
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
}
.button-primary:hover {
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
}
.button-secondary {
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
}
.button-secondary:hover {
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
}

استایل موجود در این فایل، طرح‌بندی اولیه صفحه را با افشای قانونی متمرکز، دکمه‌هایی با فاصله و رندر با گرادیان خطی، و تصویری از ماه به‌عنوان پس‌زمینه تنظیم می‌کند. قبل از ادامه، حتما فایل styles.css را ذخیره کنید.

برای نمایش تصویر پیوند شده در ویژگی پس‌زمینه مجموعه قوانین بدن، به تصویر پس‌زمینه ماه نیاز دارید. ابتدا یک پوشه images در همان پوشه فایل index.html خود بسازید:

mkdir images

از مرورگر خود برای دانلود این فایل در فهرست تصاویر جدید خود استفاده کنید یا از دستور curl زیر برای دانلود آن از طریق خط فرمان استفاده کنید:

curl -sL https://assets.digitalocean.com/articles/68102/moon-bg.jpg -o images/moon-bg.jpg

در مرحله بعد، به مرورگر خود بازگردید و آن را به روز کنید. مرورگر اکنون رندر و استایل ها را در محتوای صفحه اعمال می کند. تصویر زیر نحوه نمایش کامل صفحه را نشان می دهد:

طول محتوا باعث ایجاد یک صفحه بسیار طولانی می شود. از آنجایی که این به عنوان کپی قانونی در نظر گرفته شده است، محتوای .legal-contents می تواند به فضایی قابل پیمایش تبدیل شود. این کار از طریق ترکیبی از ویژگی های ارتفاع، حداکثر ارتفاع و سرریز انجام می شود.

برای ایجاد یک ناحیه قابل پیمایش، styles.css را در ویرایشگر متن خود باز کنید. سپس ارتفاع محتوای قانونی را با کد زیر تنظیم کنید:

styles.css

...
.legal-contents {
  height: 50vh;
  max-height: 20rem;
  overflow: auto;
  margin-top: 1.5rem;
  background-color: white;
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
...

در این کد، یک ویژگی height را در بلوک انتخابگر محتوای قانونی ایجاد کردید، سپس مقدار آن را روی 50vh تنظیم کردید، یعنی 50 درصد از ارتفاع پنجره viewport. شما همچنین یک ویژگی max-height ایجاد کردید که مقدار آن روی 20rem تنظیم شده است. در نهایت، یک ویژگی سرریز با مقدار خودکار اضافه کردید، که در صورت سرریز شدن محتوا از ظرف، نوار اسکرول ایجاد می‌کند.

این موارد اضافه شده را در فایل styles.css خود ذخیره کنید، سپس به مرورگر خود بازگردید و index.html را بازخوانی کنید. ارتفاع کامل صفحه و ظرف اصلی متراکم شده است. اکنون، همانطور که در انیمیشن زیر نشان داده شده است، کپی Legal Ipsum را می توان در داخل ظرف تعیین شده خود پیمایش کرد:

در سراسر این بخش، HTML اصلی را تنظیم می کنید که برای بقیه آموزش استفاده خواهید کرد. شما همچنین یک فضای قابل پیمایش را با ویژگی overflow تنظیم می کنید. در قسمت بعدی با خاصیت border برای اعمال حاشیه بر روی این کانتینرها کار خواهید کرد.

با استفاده از مرز Property

ویژگی border یکی از روش های اصلی اعمال سبک ها در لبه های عناصر است. یک خط به هر رنگی در محیط بیرونی ظرف اعمال می کند. ارزش ملک از سه جزء تشکیل شده است: ضخامت، سبک و رنگ. ویژگی border این مقادیر را برای هر چهار طرف یک عنصر اعمال می کند. می‌توانید تک تک طرف‌ها را با تغییرات جهت حاشیه مشخص کنید، مانند ویژگی border-top، که فقط برای بالای یک عنصر اعمال می‌شود.

برای شروع کار با ویژگی border، styles.css را در ویرایشگر متن خود باز کنید و به انتخابگر کلاس .disclosure-alert بروید. در بلوک انتخابگر، همانطور که در بلوک کد زیر مشخص شده است، یک ویژگی مرزی با مقدار 1px solid hsl (0، 0٪، 0%) اضافه کنید:

styles.css

...
.disclosure-alert {
  background-color: hsl(0, 0%, 95%);
  width: 85%;
  max-width: 48rem;
  margin: auto;
  color: hsl(0, 0%, 20%);
  border: 1px solid hsl(0, 0%, 0%);
}
...

این ویژگی مرزی یک ویژگی مختصر است، یعنی مقدار آن ترکیبی از مقادیر دیگر است. در این مورد، ضخامت 1px مقدار خاصیت عرض حاشیه را نشان می دهد. این مقدار می تواند هر مقدار عددی با یک واحد همراه با چند مقدار نامگذاری شده باشد: نازک، متوسط و ضخیم. در مرحله بعد، solid مقدار به سبک مرزی است که نحوه ظاهر شدن خط اطراف عنصر را مشخص می کند، در این مورد به عنوان یک خط پیوسته و پیوسته. سایر مقادیر برای سبک حاشیه عبارتند از: نقطه چین، چین، دوتایی و هیچ. مقدار نهایی خاصیت border-color را مشخص می کند که می تواند هر مقدار رنگ معتبری باشد.

تغییرات خود را در styles.css ذخیره کنید، سپس index.html را در یک مرورگر وب باز کنید. محفظه محتوای اصلی اکنون دارای یک حاشیه سیاه نازک در اطراف خود خواهد بود، که بیشتر مشهود است زیرا تصویر پس‌زمینه ماه را پوشانده است. تصویر زیر نحوه نمایان شدن حاشیه در قسمت محتوای اصلی را نشان می دهد:

 

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

در ویرایشگر متن خود به styles.css برگردید، سپس به بلوک انتخابگر کلاس .disclosure-header بروید. خطی-gradient() در ویژگی پس زمینه یک گرادیان بنفش تیره را تعریف می کند که به یک سایه کمی تیره تر تبدیل می شود. برای ایجاد عمق بیشتر از گرادیان به تنهایی، حاشیه را با کد زیر تنظیم کنید:

 

styles.css

 
...
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
}
...
 

شما یک ویژگی border-top با مقدار 1px solid hsl (300، 50٪، 35%) اضافه کردید، که کمی سبکتر از مقدار گرادیان شروع است. سپس، یک ویژگی حاشیه-پایین را با مقدار 1px solid hsl (300، 50٪، 5%) ایجاد کردید، که کمی تیره تر از انتهای گرادیان است.

تغییرات خود را در styles.css ذخیره کنید، سپس به مرورگر بازگردید و index.html را بازخوانی کنید. پس‌زمینه هدر بنفش اکنون کمی برجسته از رنگ بنفش در بالای سرصفحه و سایه‌ای جزئی در امتداد پایین دارد. تصویر زیر نشان می دهد که چگونه در مرورگر ظاهر می شود:

از آنجایی که border یک ویژگی مختصر است، می توانید ویژگی های longhand اضافی اضافه کنید. یک حاشیه می تواند اعمال شود که عرض و سبک دو کلاس دکمه را مشخص می کند، در حالی که یک رنگ حاشیه می تواند روی کلاس های جداگانه اعمال شود.

برای شروع کار با border-color، styles.css را در ویرایشگر متن خود باز کنید. در بلوک انتخاب کننده برای دکمه، یک ویژگی حاشیه با مقدار 1px جامد اضافه کنید، سپس یک ویژگی border-color برای .button-primary و .button-secondary اضافه کنید:

styles.css

...
.button {
  ...
  border: 1px solid;
}
...
.button-primary {
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
  border-color: hsl(200, 100%, 15%);
}
.button-primary:hover {
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
  border-color: hsl(200, 100%, 10%);
}
.button-secondary {
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
  border-color: hsl(200, 10%, 15%);
}
.button-secondary:hover {
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
  border-color: hsl(200, 10%, 10%);
}

این یک حاشیه به سبک جامد با عرض 1 پیکسل برای هر دو دکمه تعریف می کند. سپس، یک ویژگی حاشیه رنگ برای سفارشی کردن رنگ‌ها برای انتخابگرهای حالت .button-primary، .button-secondary و مرتبط با آنها اضافه کردید.

این تغییرات را در styles.css ذخیره کنید، سپس صفحه را در مرورگر وب خود بازخوانی کنید. همانطور که در تصویر زیر نشان داده شده است، دکمه‌ها اکنون با یک حاشیه رنگ تیره‌تر منطبق، تعریف کمی دارند:

در نهایت، هر جهت مرزی نیز مختصری است. این به این معنی است که -width، -style و -color هر کدام می‌توانند برای یک ویژگی جهت اعمال شوند. برای مثال، ویژگی longhand border-right-color فقط یک رنگ را در حاشیه سمت راست اعمال می کند.

برای کار با این ویژگی های حاشیه longhand جهت دار، در ویرایشگر متن خود به styles.css بازگردید. به بلوک انتخابگر .legal-contents بروید و عرض و سبک را برای هر چهار طرف حاشیه تنظیم کنید، سپس رنگ‌های هر طرف را سفارشی کنید:

styles.css

...
.legal-contents {
  height: 50vh;
  max-height: 20rem;
  margin-top: 1.5rem;
  overflow: auto;
  background-color: white;
  border: 1px solid;
  border-top-color: hsl(0, 0%, 65%);
  border-bottom-color: hsl(0, 0%, 100%);
  border-right-color: hsl(0, 0%, 80%);
  border-left-color: hsl(0, 0%, 80%);
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
...

در این کد، حاشیه: 1px جامد را به انتهای فایل اضافه کردید. پس از آن، ویژگی های حاشیه-بالا-رنگ، رنگ حاشیه-پایین، رنگ حاشیه-راست-رنگ و رنگ حاشیه-چپ را نیز ایجاد کردید. برای مقادیر، از مقادیر مختلف hsl() برای خاکستری استفاده کردید.

تغییرات خود را در styles.css ذخیره کنید، سپس صفحه را دوباره در مرورگر بارگیری کنید. ظرف محتوی قابل پیمایش اکنون دارای یک حاشیه خاکستری تیره در امتداد بالا، خاکستری کمی روشن تر در طرفین و یک حاشیه سفید در پایین است. این برای این است که این تصور را ایجاد کنیم که محتوا در پشت پس‌زمینه خاکستری روشن قرار می‌گیرد و باعث ایجاد یک اثر می‌شود که برجسته‌سازی در لبه پایینی است، همانطور که در تصویر زیر نشان داده شده است:

در این قسمت از ویژگی border و تغییرات طولانی آن استفاده کردید. شما چندین حاشیه ایجاد کردید که در صورت نیاز به طرف های مختلف اعمال شد. در بخش بعدی، با ویژگی border-radius کار خواهید کرد که اجازه می دهد گوشه های کانتینرها گرد شوند.

اعمال یکborder-radius

گوشه‌های گرد مدت‌ها قبل از اینکه ویژگی حاشیه‌ای برای انجام این کار وجود داشته باشد، یک طراحی زیبایی‌شناسی در وب بوده است. این ویژگی می‌تواند هر واحد عددی یا مقدار درصدی را بپذیرد و یک ویژگی کوتاه‌نویسی مانند خواص حاشیه یا padding است. این بدان معنی است که هر گوشه را می توان به صورت جداگانه در صورت نیاز تنظیم کرد.

برای شروع کار با ویژگی border-radius، styles.css را در ویرایشگر متن خود باز کنید. به بلوک انتخابگر .disclosure-alert و ویژگی border-radius بروید. سپس، مقدار را روی 1.5rem قرار دهید، که این مقدار را در هر چهار گوشه ویژگی اعمال می کند. CSS هایلایت شده در بلوک کد زیر نشان می دهد که چگونه این نوشته شده است:

styles.css

...
.disclosure-alert {
  ...
  border: 1px solid hsl(0, 0%, 0%);
  border-radius: 1.5rem;
}
...

این افزونه را در styles.css ذخیره کنید و سپس index.html را در یک مرورگر وب باز کنید یا به‌روزرسانی کنید. فقط دو گوشه پایینی گرد به نظر می رسد، در حالی که دو گوشه بالایی لبه های نوک تیز باقی می مانند. تصویر زیر نشان می دهد که چگونه این در مرورگر رندر می شود:

 

دلیل اینکه فقط دو گوشه گرد قابل مشاهده است به دلیل نحوه تعامل عناصر نزولی با یکدیگر در وب است. مرورگر در نمایان نگه داشتن محتوا اشتباه می کند. .disclosure-alert دارای چهار گوشه گرد است، اما از آنجایی که .disclosure-header داخل عنصر است و گوشه‌های گرد ندارد، بر گوشه‌های گرد همپوشانی دارد. یک راه حل سریع اضافه کردن سرریز: مخفی به .disclosure-alert است که باعث می‌شود کانتینر هر ظروف و محتوای نزولی را حذف کند. با این حال، این رویکرد می تواند منجر به ناخوانا یا نامرئی شدن محتوای ضروری شود. یک تمرین بهتر این است که یک شعاع مرزی برای کلاس .disclosure-header اعمال کنید تا با منحنی گوشه اجداد خود مطابقت داشته باشد.

برای تنظیم گوشه های همپوشانی، به styles.css در ویرایشگر متن خود بازگردید. به بلوک انتخابگر .disclosure-header بروید و ویژگی border-radius را اضافه کنید. از آنجایی که فقط دو گوشه بالا نیاز به تنظیم دارند، مقدار 1.5rem 1.5rem 0 0 خواهد بود:

styles.css

...
.disclosure-header {
  ...
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
  border-radius: 1.5rem 1.5rem 0 0;
}
...

فرمت توسعه‌یافته این مقدار یک منحنی 1.5 میلی‌متری را در گوشه‌های بالا-چپ و بالا-راست اعمال می‌کند.

تغییرات خود را در styles.css ذخیره کنید و index.html را در مرورگر بازخوانی کنید. هدر بنفش اکنون گوشه ای گرد دارد و ظرف اصلی را نمی پوشاند. یک مشکل جدید ظاهر شده است، همانطور که در تصویر بزرگنمایی شده زیر نشان داده شده است، زیرا یک برش سفید از ظرف اصلی از پشت سرصفحه بنفش به اوج می رسد:

گوشه های هر دو .disclosure-alert و .disclosure-header به اندازه 1.5rem هستند، اما عرض آنها تفاوت اندازه دارند. این تفاوت اندازه ناشی از حاشیه سمت چپ و راست عنصر .disclosure-alert است. از آنجایی که عرض حاشیه در هر دو طرف 1px است، تفاوت اندازه آن 2px یا 0.125rem است. برای مطابقت دادن منحنی ها، شعاع مرزی برای .disclosure-header باید 0.125 rem کوچکتر از آنچه در حال حاضر است باشد. همانطور که در بلوک کد زیر مشخص شده است، مقادیر حاشیه 1.5rem را به 1.375rem تغییر دهید:

styles.css

...
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
  border-radius: 1.375rem 1.375rem 0 0;
}
...

این تغییر را در styles.css ذخیره کنید و سپس صفحه را در مرورگر وب بازخوانی کنید. برش سفید اکنون از بین رفته است و منحنی های دو عنصر در مکان مناسب به هم می رسند. تصویر بزرگنمایی شده زیر نشان می‌دهد که این منحنی‌ها چگونه کنار هم قرار می‌گیرند:

در نهایت، یک گوشه گرد روی دکمه های پایین ظرف اصلی اعمال می کنید. این دکمه ها به شکل قرص، با بالا و پایین صاف و بلند و کناره های کاملا گرد خواهند بود. برای انجام این کار، مقدار شعاع مرزی باید یک مقدار مبتنی بر واحد بزرگتر از ارتفاع عنصر باشد.

برای ایجاد دکمه ای به شکل قرص، styles.css را در ویرایشگر متن خود باز کنید. در بلوک انتخابگر دکمه، ویژگی border-radius را اضافه کنید و سپس مقدار را روی 2rem قرار دهید. این عدد می‌تواند یک عدد دلخواه باشد تا زمانی که بزرگتر از ارتفاع محاسبه‌شده، ترکیبی از اندازه قلم، ارتفاع خط، لایه‌بندی و عرض حاشیه باشد که می‌تواند بر ارتفاع کلی یک عنصر تاثیر بگذارد. CSS هایلایت شده در بلوک کد زیر نشان می دهد که کجا باید این ویژگی را اضافه کرد:

styles.css

...
.button {
  ...
  border: 1px solid;
  border-radius: 2rem;
}
...

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

تغییرات خود را در styles.css ذخیره کنید، سپس به مرورگر بازگردید و index.html را بازخوانی کنید. این صفحه اکنون دو دکمه مستطیلی به شکل قرص را نمایش می دهد، همانطور که در تصویر زیر نشان داده شده است:

در سرتاسر این بخش، شما از ویژگی border-radius برای اعمال گوشه های گرد به چندین عنصر استفاده کردید، و متوجه شدید که یک border-radius مانع از خروج عناصر نزولی از فضای منحنی نمی شود. شما همچنین مقدار شعاع حاشیه را طوری تنظیم کردید که با عرض یک عنصر مطابقت داشته باشد، زمانی که چندین عنصر گرد روی هم قرار می گیرند. در بخش بعدی، از ویژگی text-shadow برای اعمال سایه های در حال پخش بر روی محتوای متن استفاده می کنید.

با استفاده از ویژگی text-shadow

اعمال سایه روی متن کاربردهای زیادی در توسعه روزمره وب دارد. سایه‌ها می‌توانند عمق، جلوه درخشش ایجاد کنند، یا در مکان‌هایی که ممکن است نادیده گرفته شوند، به برجسته‌تر شدن متن کمک کنند. در سرتاسر این بخش، text-shadow را به چندین عنصر برای ایجاد جلوه های بصری مختلف اعمال می کنید.

ویژگی text-shadow حداکثر از چهار مقدار تشکیل شده است: offset محور x، offset محور y، blur radius و color. به عنوان مثال، مقادیر می توانند به این شکل باشند: 2px 4px 10px قرمز. از این چهار مقدار، فقط مقادیر افست مورد نیاز است. رنگ سایه به طور پیش فرض رنگ متن است.

برای شروع کار با text-shadow، با ایجاد یک افکت درخشش در هدر شروع می‌کنید. styles.css را در ویرایشگر متن خود باز کنید و به انتخابگر کلاس .disclosure-header بروید. در بلوک انتخابگر، ویژگی text-shadow زیر را اضافه کنید:

styles.css

...
.disclosure-header {
  ...
  border-radius: 1.375rem 1.375rem 0 0;
  text-shadow: 0 0 0.375rem hsl(300, 50%, 50%);
}
...

جلوه درخشش به این معنی است که رنگ از هر لبه متن بیرون می‌آید، بنابراین مقادیر افست محور x و y در اینجا روی 0 تنظیم می‌شوند. شما تاری برای درخشش را روی 0.375 rem (معادل 6 پیکسل) تنظیم می‌کنید تا کمی ظریف باشد. هاله رنگ به متن در نهایت، مقدار رنگ کمی تیره تر از ویژگی رنگ تنظیم شد: hsl (300، 50٪، 50%).

این افزودنی را در فایل styles.css خود ذخیره کنید. بعد، index.html را در یک مرورگر وب باز کنید. متن عنوان پررنگ در پس‌زمینه گرادیان بنفش اکنون درخششی از بنفش میانی در اطراف خود دارد. تصویر زیر نحوه نمایش این افکت در مرورگر را نشان می دهد:

در مرحله بعد، چندین سایه را می توان روی عناصر متن قرار داد، که امکان ایجاد یک جلوه برجسته روی متن را فراهم می کند. این افکت با قرار دادن یک سایه با رنگ روشن تر در زیر جسم و یک سایه با رنگ تیره در بالا انجام می شود.

برای ایجاد یک جلوه برجسته، به styles.css در ویرایشگر متن خود بازگردید. افکت به دکمه های پایین ظرف اضافه می شود. برای انتخابگرهای .button-primary، .button-primary:hover، .button-secondary و .button-secondary:hover یک ویژگی text-shadow اضافه کنید. CSS هایلایت شده را در بلوک کد زیر برای مقادیر بررسی کنید:

styles.css

...
.button-primary {
  border: 1px solid hsl(200, 100%, 5%);
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
  text-shadow: 0 1px hsl(200, 100%, 50%),
               0 -1px hsl(200, 100%, 5%);
}
.button-primary:hover {
  border: 1px solid hsl(200, 100%, 0%);
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
  text-shadow: 0 1px hsl(200, 100%, 45%),
               0 -1px hsl(200, 100%, 0%);
}
.button-secondary {
  border: 1px solid hsl(200, 10%, 5%);
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
  text-shadow: 0 1px hsl(200, 10%, 50%),
               0 -1px hsl(200, 10%, 5%);
}
.button-secondary:hover {
  border: 1px solid hsl(200, 10%, 0%);
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
  text-shadow: 0 1px hsl(200, 10%, 45%),
               0 -1px hsl(200, 10%, 0%);
}

سایه اول یک برجسته روشن تر از پایین است. این کار با آفست 0 1px و سپس نسخه روشن‌تر رنگ‌های گرادیان پس‌زمینه انجام می‌شود. در مرحله بعد، سایه بالای متن را با آفست 0 -1 پیکسل ایجاد کردید، که سایه را 1 پیکسل به بالا می کشد و از تنوع تیره تری از رنگ های پس زمینه استفاده می کند.

این تغییرات را در styles.css ذخیره کنید، سپس صفحه را در مرورگر وب خود بازخوانی کنید. اکنون متن داخل دکمه‌ها دارای یک برجسته‌سازی جزئی در زیر متن و یک سایه کمی در بالای متن است. ترکیب این مقادیر متن-سایه افکت برجسته را همانطور که در تصویر زیر ارائه می شود ایجاد می کند:

در این بخش، ویژگی text-shadow را روی چند عنصر اعمال کردید. شما یک افکت درخشش روی هدر و یک جلوه برجسته با سایه های متعدد روی دکمه ها ایجاد کردید. در بخش بعدی، سایه هایی را با ویژگی box-shadow به عناصر HTML اعمال می کنید.

افزودن box-shadow به عناصر

همانطور که ویژگی text-shadow به محتوای متن اجازه می دهد سایه داشته باشد، ویژگی box-shadow نیز به عناصر و کانتینرها اجازه می دهد سایه داشته باشند. box-shadow دارای دو ویژگی اضافی است که در این بخش بررسی خواهید کرد، از جمله توانایی کنترل گسترش تاری و تنظیم سایه در داخل عنصر.

برای شروع کار با ویژگی box-shadow، styles.css را در ویرایشگر متن خود باز کنید. در بلوک انتخابگر .disclosure-alert، ویژگی box-shadow را اضافه کنید. درست مانند text-shadow، مقادیر افست محور x و y مورد نیاز است و اگر رنگی ارائه نشده باشد، از مقدار ویژگی رنگ استفاده می شود. برای اولین کادر سایه، offset ها را روی 0، blur را روی 0.5rem، و رنگ را روی یک hsl تیره (300، 40٪، 5%) تنظیم کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.disclosure-alert {
  ...
  border-radius: 1.5rem;
  text-shadow: 0 0 0.375rem hsl(300, 50%, 50%);
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%);
}
...

تغییرات را در styles.css ذخیره کنید و صفحه را در مرورگر وب خود بازخوانی کنید. اکنون یک سایه سیاه تقریباً از ظرف پخش شده است. همچنین توجه داشته باشید که سایه به منحنی هایی که با ویژگی border-radius ایجاد کرده اید احترام گذاشته و از آنها پیروی می کند. تصویر زیر نشان می دهد که چگونه این در مرورگر ارائه می شود:

در مرحله بعد، به styles.css بازگردید و با افزودن دو افکت درخشش بزرگ اضافی به box-shadow شروع به ایجاد یک افکت پیچیده تر کنید. بین هر سایه جدید یک کاما اضافه کنید، و هر کدام را به گونه‌ای تنظیم کنید که آفست محور y 0.5rem باشد. سپس تاری های بزرگ را تنظیم کنید و از تغییرات کم رنگ آبی و بنفش از پالت رنگ استفاده کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.disclosure-alert {
  ...
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%),
              0 0.5rem 6rem hsl(200, 40%, 30%),
              0 0.5rem 10rem hsl(300, 40%, 30%);
}
...

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

تغییرات خود را در styles.css ذخیره کنید و صفحه را در مرورگر خود بازخوانی کنید. همانطور که در تصویر زیر نشان داده شده است، ترکیب سایه های متعدد جلوه ای منحصر به فرد را ارائه می دهد:

ویژگی گسترش تاری ویژگی box-shadow را می توان برای ایجاد احساس عمق استفاده کرد. ارزش اسپرد هر دو ارزش مثبت و منفی را می پذیرد. گسترش ارزش منفی همراه با یک افست قوی و تاری سایه ای ایجاد می کند که دور و دور از ظرف منبع ایجاد می کند.

برای شروع، به styles.css در ویرایشگر متن خود بازگردید. بین سایه کوچک تیره و سایه آبی بزرگتر در انتخابگر .disclosure-alert، CSS هایلایت شده زیر را از بلوک کد اضافه کنید:

styles.css

...
.disclosure-alert {
  ...
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%),
              0 6rem 4rem -2rem hsl(300, 40%, 5%),
              0 0.5rem 6rem hsl(200, 40%, 30%),
              0 0.5rem 10rem hsl(300, 40%, 30%);
}
...

این اضافه شدن به مجموعه سایه، افست محور x را روی 0 نگه می دارد، اما محور y را به طور قابل توجهی به 6rem می رساند. بعد، تاری به اندازه درخشش بزرگ نیست، اما در اندازه مناسب 4 rem است. سپس به مقدار گسترش blur می رسد که در این حالت روی -2rem تنظیم می شود. مقدار پیش فرض اسپرد 0 است که برابر با ظرف است. در -2rem، گسترش از ظرف به سمت داخل متراکم می شود تا جلوه بصری عمق ایجاد کند.

تغییرات خود را در styles.css ذخیره کنید، سپس index.html را در مرورگر بازخوانی کنید. سایه یک رنگ بنفش تیره است که این حس را ایجاد می کند که جعبه محتوای اصلی به خوبی بالای سطح ماه شناور است، همانطور که در تصویر زیر نشان داده شده است:

یکی دیگر از موارد استفاده از box-shadow ایجاد یک هایلایت و افکت مخروطی سایه است، همانطور که قبلاً با ویژگی border در هدر انجام دادید. مزیت استفاده از box-shadow به جای حاشیه این است که بر مدل جعبه تأثیر نمی گذارد، که باعث تغییر در جریان محتوا می شود. همچنین می توان از آن در ارتباط با حاشیه استفاده کرد. هنگام استفاده از این افکت با حاشیه، مقدار inset باید به box-shadow اضافه شود تا سایه در داخل ظرف باشد.

برای شروع استفاده از مقدار inset در box-shadow، styles.css را در ویرایشگر متن خود باز کنید. این افکت به دکمه‌ها اضافه می‌شود، بنابراین شما این استایل‌ها را در .button-primary، .button-primary:hover، .button-secondary و .button-secondary:hover اعمال خواهید کرد. مانند text-shadow، این شامل یک ترکیب افست 0 1px و 0 -1px خواهد بود. تفاوت این است که کلمه inset را می توان به ابتدا یا انتهای مقدار اضافه کرد، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.button-primary {
  ...
  text-shadow: 0 1px hsl(200, 100%, 50%),
               0 -1px hsl(200, 100%, 5%);
  box-shadow: inset 0 1px hsl(200, 100%, 50%),
              inset 0 -1px hsl(200, 100%, 15%);
}
.button-primary:hover {
  ...
  text-shadow: 0 1px hsl(200, 100%, 45%),
               0 -1px hsl(200, 100%, 0%);
  box-shadow: inset 0 1px hsl(200, 100%, 45%),
              inset 0 -1px hsl(200, 100%, 10%);
}
.button-secondary {
  ...
  text-shadow: 0 1px hsl(200, 10%, 50%),
               0 -1px hsl(200, 10%, 5%);
  box-shadow: inset 0 1px hsl(200, 10%, 50%),
              inset 0 -1px hsl(200, 10%, 15%);
}
.button-secondary:hover {
  ...
  text-shadow: 0 1px hsl(200, 10%, 45%),
               0 -1px hsl(200, 10%, 0%);
  box-shadow: inset 0 1px hsl(200, 10%, 45%),
              inset 0 -1px hsl(200, 10%, 10%);
}

این تغییرات را در styles.css ذخیره کنید و سپس index.html را در مرورگر خود refresh کنید. اکنون دکمه ها دارای یک برجسته و یک سایه هستند، شبیه به متن. این ترکیب با پس‌زمینه گرادیان، جلوه‌ای ساده و در عین حال متمایز برای دکمه‌ها ایجاد می‌کند. تصویر زیر نشان می دهد که چگونه این در مرورگر ارائه می شود:

 

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

برای شروع ایجاد این افکت، styles.css را در ویرایشگر متن خود باز کنید. به انتخابگر کلاس .legal-contents بروید و یک ویژگی box-shadow اضافه کنید. این سایه از سه سایه تشکیل خواهد شد. اولی یک سایه کوتاه در اطراف داخل کل ظرف ایجاد می کند و دو مورد بعدی یک سایه روشن دراز در بالا و پایین عنصر ایجاد می کند. CSS هایلایت شده در بلوک کد زیر نحوه تنظیم این را نشان می دهد:

styles.css

...
.legal-contents {
  ...
  font-family: "Times New Roman", serif;
  box-shadow: 0 0 0.25rem hsl(0, 0%, 80%) inset,
              0 4rem 2rem -4rem hsl(0, 0%, 85%) inset,
              0 -4rem 2rem -4rem hsl(0, 0%, 85%) inset;
}
...

تغییرات خود را در styles.css ذخیره کنید، سپس صفحه را در مرورگر بازخوانی کنید. اکنون سایه‌ها جلوه‌ای ایجاد می‌کنند که باعث می‌شود متن قانونی مانند پنجره‌ای به داخل ظرف ظاهر شود. سایه ها همچنین به تقویت رنگ های حاشیه ای که روی این عنصر اعمال شده اند کمک می کند. تصویر زیر نشان می دهد که چگونه این در مرورگر رندر می شود:

در این قسمت ویژگی box-shadow را عملی می کنید. شما همچنین از ویژگی‌های پخش تاری و درج کردن جعبه سایه استفاده کردید تا گزینه‌های یک ظاهر طراحی بیشتری داشته باشید. در بخش آخر، ویژگی outline را پیاده سازی می کنید، سپس از box-shadow برای ایجاد یک طرح کلی همه کاره تر استفاده می کنید.

با استفاده از ویژگی طرح کلی

آخرین ویژگی که بر لبه های عناصر تأثیر می گذارد، ویژگی outline است. در تمام مرورگرها، حالت :focus عناصر با استفاده از ویژگی outline ساخته می‌شود. با این حال، اجرای سبک :focus پیش فرض هر مرورگر به طور قابل توجهی متفاوت است. ویژگی outline شبیه به ویژگی border است، به جز دو تفاوت کلیدی: تغییرات خاصیت جهت دار را ندارد و مدل جعبه را تحت تأثیر قرار نمی دهد. آخرین مورد از این دو تفاوت، آن را برای سبک‌های فوکوس ایده‌آل می‌کند، زیرا نشانگر بصری عنصر فعال را بدون ایجاد اختلال در جریان محتوا ارائه می‌کند.

برای مشاهده پیش فرض مرورگر حالت :focus، index.html را در مرورگر خود باز کنید. از کلید TAB برای پیمایش در صفحه استفاده کنید تا زمانی که یکی از دکمه های پایین فوکوس شود. بسته به اینکه از چه مرورگری استفاده می کنید، ممکن است نتوانید سبک های پیش فرض :focus را ببینید. به عنوان مثال، فایرفاکس یک طرح کلی با نقطه سفید را نشان می دهد، اما در پس زمینه خاکستری روشن قابل درک نیست. تصویر زیر از چپ به راست نشان می دهد که چگونه سبک فوکوس پیش فرض در فایرفاکس، سافاری و کروم ظاهر می شود:

برای شروع سفارشی کردن حالت :focus خود با ویژگی outline، styles.css را در ویرایشگر متن خود باز کنید. به انتخابگر کلاس .button بروید و ویژگی outline را اضافه کنید:

styles.css

...
.button {
  ...
}
.button:focus {
  outline: 0.25rem solid hsl(200, 100%, 50%);
}
...

همانند ویژگی border، مقدار طرح کلی شامل یک مقدار عرض، سبک و رنگ است. از آنجایی که هدف یک حالت فوکوس جلب توجه به یک عنصر است، عرض به 0.25rem افزایش می یابد که معادل 4px است. در مرحله بعد، استایل را روی حالت جامد قرار می دهید تا حالت فوکوس بیشتر شبیه سافاری و کروم باشد. در نهایت، رنگ را با hsl (200، 100، 50%) روی آبی تیره قرار می دهید.

تغییرات خود را در styles.css ذخیره کنید، سپس به مرورگر خود بازگردید و صفحه را بازخوانی کنید. یک بار دیگر، مرورگر نحوه نمایش طرح کلی را تعیین می کند. تصویر زیر نشان می دهد که این سبک ها در فایرفاکس، سافاری و کروم از چپ به راست چگونه هستند:

در هر سه مرورگر، ویژگی outline کاملاً متفاوت نمایش داده می شود. فایرفاکس دور کل شکل گرد دکمه را محکم نگه می دارد. سافاری یک کادر با زاویه راست ایجاد می کند، اما لبه های دکمه را لمس می کند. کروم شبیه سافاری است، اما فضای اضافی بین دکمه و طرح کلی اضافه می کند.

برای ایجاد سبکی که در همه مرورگرها شبیه به فایرفاکس باشد، به جای طرح کلی، باید از box-shadow استفاده کنید.

برای شروع ایجاد حالت :focus سفارشی تر، به فایل styles.css خود در ویرایشگر متن خود بازگردید. اولین کاری که باید انجام دهید این است که سبک طرح کلی پیش فرض مرورگر را با تغییر مقدار .button:focus نمایه انتخابگر به none غیرفعال کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.button {
  ...
}
.button:focus {
  outline: none;
}
...

سپس، به انتخابگرهای button-primary:hover و button-secondary:hover بروید و یک کاما به دنبال آن یک تغییر حالت :focus اضافه کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...

.button-primary {
  ...
}
.button-primary:hover,
.button-primary:focus {
  ...
}
.button-secondary {
  ...
}
.button-secondary:hover,
.button-secondary:focus {
  ...
}

در نهایت، دو انتخابگر جدید برای هر دکمه ایجاد کنید: فوکوس، .button-primary: focus، و .button-secondary:focus. در داخل بلوک‌های انتخابگر جدید، یک ویژگی box-shadow جدید با همان سایه‌های داخلی از همتای :hover، :focus آن‌ها اضافه کنید. سپس، سایه دیگری را با offset ها به مجموعه اضافه کنید و همه را روی 0 تار کنید. پس از آن، یک اسپرد 0.25rem اضافه کنید، که یک خط ثابت و غیر تار در اطراف عنصر ایجاد می کند. در نهایت رنگ یکسان را به هر دو نمونه اضافه کنید. CSS هایلایت شده در بلوک کد زیر نشان می دهد که چگونه این نوشته شده است:

styles.css

...

.button-primary {
  ...
}
.button-primary:hover,
.button-primary:focus {
  ...
}
.button-primary:focus {
  box-shadow: inset 0 1px hsl(200, 100%, 45%),
              inset 0 -1px hsl(200, 100%, 10%),
              0 0 0 0.25rem hsl(200, 100%, 50%);
}
.button-secondary {
  ...
}
.button-secondary:hover,
.button-secondary:focus<^> {
  ...
}
.button-secondary:focus {
  box-shadow: inset 0 1px hsl(200, 10%, 45%),
              inset 0 -1px hsl(200, 10%, 10%),
              0 0 0 0.25rem hsl(200, 100%, 50%);
}

این تغییرات را در styles.css ذخیره کنید و برای بازخوانی index.html به مرورگر خود بازگردید. اکنون، همانطور که از کلید TAB برای پیمایش در صفحه استفاده می کنید. صرف نظر از مرورگر، سبک :focus روی دکمه ها اکنون یکسان به نظر می رسد. تصویر زیر نشان می دهد که چگونه نسخه box-shadow یک طرح کلی به همراه کل صفحه در مرورگر ظاهر می شود:

این بخش آخر شما را با ویژگی outline و نحوه استفاده هر مرورگر از آن به روش های مختلف آشنا کرد. حداقل، یک نشانگر :focus برای دسترسی مورد نیاز است و ویژگی outline کار را انجام می دهد. با گسترش این موضوع، شما همچنین با ایجاد یک جعبه سایه با ارزش گسترش زیاد، یک سبک فوکوس پیشرفته‌تر و سازگارتر از نظر بصری ایجاد کردید.

نتیجه

سبک دادن به لبه های عناصر به طراحی یک وب سایت اجازه می دهد تا تنوع و توجه را به خود جلب کند. ویژگی border می تواند به ارائه تعریف و تفکیک بین محتوا کمک کند. ویژگی حاشیه-شعاع زیبایی شناسی را نرم می کند و به تعریف نگرش طرح کمک می کند. سایه های روی متن و جعبه ها عمق می بخشد و به جلب توجه به محتوا کمک می کند. در نهایت، ویژگی outline راه‌های در دسترس را برای جلب توجه به عناصر با فوکوس صفحه کلید فراهم می‌کند. در این آموزش، شما از تمام این ویژگی ها برای ایجاد یک صفحه وب از نظر بصری جالب و قابل استفاده استفاده کردید. درک هر یک از این ویژگی ها و نحوه و زمان استفاده از آنها به حل انواع مشکلات رابط فرانت اند و ایجاد تجربیات جدید کمک می کند.

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

 

برچسب‌ها:CSSVPS یا سرور مجازیآشنایی با خواص رنگ در CSSایجاد سرور مجازیایجاد یکborder-radiusخرید سرور مجازیراه اندازی پایه HTMLراه اندازی پایه HTML و CSSسرورمجازیسرورمجازی آمریکا

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده از نمایه ها در MongoDB

ورود به سایت

معرفی

MongoDB یک سیستم مدیریت پایگاه داده مبتنی بر سند است که به شما امکان می دهد حجم زیادی از داده ها را در اسناد ذخیره کنید که از نظر اندازه و ساختار متفاوت است. MongoDB دارای یک مکانیزم پرس و جو قوی است که به شما امکان می دهد اسناد را بر اساس معیارهای خاص فیلتر کنید. با افزایش مجموعه MongoDB ، جستجوی اسناد می تواند مانند جستجوی سوزن در انبار کاه باشد.

انعطاف پذیری که MongoDB در رابطه با پرس و جوها ارائه می دهد ، می تواند موتور پایگاه داده را پیش بینی کند که چه نوع پرس و جوهایی بیشتر مورد استفاده قرار می گیرد. بدون توجه به اندازه مجموعه باید آماده یافتن اسناد باشد. به همین دلیل ، مقدار داده های موجود در یک مجموعه به طور مستقیم بر عملکرد جستجو تأثیر می گذارد: هرچه مجموعه داده بزرگتر باشد ، پیدا کردن اسناد مطابق با پرس و جو برای MongoDB دشوارتر است.

فهرست ها یکی از ضروری ترین ابزارهایی هستند که مدیر پایگاه داده می تواند برای کمک آگاهانه به موتور پایگاه داده و بهبود عملکرد آن استفاده کند. در این آموزش ، شما خواهید آموخت که نمایه ها چیست ، چگونه آنها را ایجاد کنید و چگونه نحوه استفاده از آنها را هنگام انجام داده ها در پایگاه داده بررسی کنید.

پیش نیازها

برای پیگیری این آموزش ، شما نیاز دارید:

  • سروری با کاربر معمولی و غیر روت با امتیازات sudo و فایروال با UFW پیکربندی شده است. این آموزش با استفاده از سروری که Ubuntu 20.04 را اجرا می کند تأیید شده است و می توانید با دنبال کردن این آموزش راه اندازی اولیه سرور برای اوبونتو 20.04 ، سرور خود را آماده کنید.
  • MongoDB روی سرور شما نصب شده است. برای تنظیم این ، آموزش ما را در مورد نحوه نصب MongoDB در اوبونتو 20.04 دنبال کنید.
  • نمونه MongoDB سرور شما با فعال کردن احراز هویت و ایجاد یک کاربر مدیریتی ایمن می شود. برای ایمن سازی MongoDB مانند این ، آموزش ما را در مورد نحوه ایمن سازی MongoDB در اوبونتو 20.04 دنبال کنید.
  • آشنایی با عملیات MongoDB CRUD و بازیابی اشیاء از مجموعه ها به طور خاص. برای یادگیری نحوه استفاده از پوسته MongoDB برای انجام عملیات CRUD ، آموزش نحوه انجام عملیات CRUD در MongoDB را دنبال کنید.

فهمیدن شاخص ها

به طور معمول ، هنگامی که از پایگاه داده MongoDB برای بازیابی اسناد مطابقت با شرایط خاصی – مانند قله های کوه با ارتفاع بیش از 8000 متر – درخواست می کنید ، پایگاه داده باید اسکن مجموعه ای را برای پیدا کردن آنها انجام دهد. این بدان معناست که هر سند را از مجموعه بازیابی می کند تا بررسی کند که آیا آنها با شرایط مطابقت دارند یا خیر. اگر سندی با شرایط مطابقت داشته باشد ، به لیست اسناد برگشتی اضافه می شود. اگر سندی با شرایط تعیین شده مطابقت نداشته باشد ، MongoDB تا زمانی که اسکن کل مجموعه را به پایان نرساند ، به سراغ اسکن سند بعدی می رود.

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

نمایه ها ساختارهای داده خاصی هستند که تنها زیرمجموعه کوچکی از داده های موجود در اسناد مجموعه را جدا از خود اسناد ذخیره می کنند. در MongoDB ، آنها به گونه ای پیاده سازی شده اند که پایگاه داده می تواند هنگام جستجوی مقادیر به سرعت و به طور م themثر از آنها عبور کند.

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

بدون هیچ نمایه ای ، MongoDB باید همه محصولات را از مجموعه بازیابی کرده و اطلاعات موجودی موجود در ساختار سند را بررسی کند. با این حال ، MongoDB یک فهرست جداگانه و کوچکتر را که فقط اشاره گر به محصولات موجود است ، حفظ می کند. MongoDB سپس می تواند از این ساختار برای یافتن سریعتر محصولات موجود در انبار استفاده کند.

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

مرحله 1 – آماده سازی پایگاه داده نمونه

برای آشنایی با نحوه عملکرد نمایه ها و نحوه ایجاد آنها ، این مرحله نحوه بازکردن پوسته MongoDB را برای اتصال به نمونه MongoDB نصب شده در محلی توضیح می دهد. همچنین نحوه ایجاد مجموعه نمونه و درج چند نمونه نمونه در آن را توضیح می دهد. این راهنما از این نمونه داده ها برای نشان دادن انواع مختلف نمایه هایی که MongoDB می تواند برای بهبود عملکرد پرس و جو استفاده کند ، استفاده می کند.

برای ایجاد این مجموعه نمونه ، به پوسته MongoDB به عنوان کاربر مدیریتی خود متصل شوید. این آموزش از قوانین پیش نیاز آموزش امنیتی MongoDB پیروی می کند و فرض می کند که نام این کاربر مدیریتی AdminSammy و پایگاه داده احراز هویت آن admin است. اطمینان حاصل کنید که این جزئیات را در دستور زیر تغییر دهید تا در صورت متفاوت بودن تنظیمات خود را نشان دهد

mongo -u AdminSammy -p –authenticationDatabase admin

گذرواژه ای را که هنگام نصب برای دسترسی به پوسته تعیین کرده اید وارد کنید. پس از ارائه رمز عبور ، درخواست شما به علامت بزرگتر از (>) تغییر می کند.

برای نشان دادن نحوه عملکرد نمایه ها ، به مجموعه ای از اسناد با زمینه های مختلف از انواع مختلف نیاز داریم. ما از مجموعه نمونه پنج بلندترین کوه جهان استفاده خواهیم کرد. در زیر یک سند نمونه نشان دهنده قله اورست است:

The Everest document

{
    "name": "Everest",
    "height": 8848,
    "location": ["Nepal", "China"],
    "ascents": {
        "first": {
            "year": 1953,
        },
        "first_winter": {
            "year": 1980,
        },
        "total": 5656,
    }
}

این سند شامل اطلاعات زیر است:

  • name: نام قله
  • ارتفاع: ارتفاع قله ، بر حسب متر.
  • مکان: کشورهایی که کوه در آنها واقع شده است. این فیلد مقادیر را به عنوان یک آرایه ذخیره می کند تا کوه های واقع در بیش از یک کشور را مجاز کند.
  • صعودها: مقدار این فیلد سند دیگری است. هنگامی که یک سند در سند دیگری مانند این ذخیره می شود ، به عنوان یک سند جاسازی شده یا تو در تو شناخته می شود. هر سند صعود صعودهای موفقیت آمیز کوه داده شده را توصیف می کند. به طور خاص ، هر سند صعود شامل یک میدان کلی است که تعداد کل صعودهای موفق هر قله را نشان می دهد. علاوه بر این ، هر یک از این اسناد تو در تو دارای دو فیلد است که مقادیر آنها نیز اسناد تو در تو هستند:.
    • اول: ارزش این زمینه یک سند تو در تو است که شامل یک زمینه ، سال است ، که سال اولین صعود موفقیت آمیز کلی را توصیف می کند.
    • first_winter: مقدار این فیلد یک سند تو در تو است که شامل یک فیلد یک ساله نیز می شود ، که مقدار آن نشان دهنده سال اولین صعود زمستانی موفق به این کوه است.

روش insertMany () زیر را در پوسته MongoDB اجرا کنید تا همزمان مجموعه ای با نام peaks ایجاد کنید و پنج نمونه سند را در آن وارد کنید. این اسناد پنج بلندترین قله کوه در جهان را توصیف می کند:

db.peaks.insertMany([
{
“name”: “Everest”,
“height”: 8848,
“location”: [“Nepal”, “China”],
“ascents”: {
“first”: {
“year”: 1953
},
“first_winter”: {
“year”: 1980
},
“total”: 5656
}
},
{
“name”: “K2”,
“height”: 8611,
“location”: [“Pakistan”, “China”],
“ascents”: {
“first”: {
“year”: 1954
},
“first_winter”: {
“year”: 1921
},
“total”: 306
}
},
{
“name”: “Kangchenjunga”,
“height”: 8586,
“location”: [“Nepal”, “India”],
“ascents”: {
“first”: {
“year”: 1955
},
“first_winter”: {
“year”: 1986
},
“total”: 283
}
},
{
“name”: “Lhotse”,
“height”: 8516,
“location”: [“Nepal”, “China”],
“ascents”: {
“first”: {
“year”: 1956
},
“first_winter”: {
“year”: 1988
},
“total”: 461
}
},
{
“name”: “Makalu”,
“height”: 8485,
“location”: [“China”, “Nepal”],
“ascents”: {
“first”: {
“year”: 1955
},
“first_winter”: {
“year”: 2009
},
“total”: 361
}
}
])

خروجی شامل لیستی از شناسه های شی است که به اشیاء تازه وارد شده اختصاص داده شده است.

 

Output

{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("61212a8300c8304536a86b2f"),
                ObjectId("61212a8300c8304536a86b30"),
                ObjectId("61212a8300c8304536a86b31"),
                ObjectId("61212a8300c8304536a86b32"),
                ObjectId("61212a8300c8304536a86b33")
        ]
}

با اجرای متد find () بدون آرگومان ، می توانید تأیید کنید که اسناد به درستی وارد شده اند ، که همه اسناد را بازیابی می کند

db.peaks.find()

 

Output

{ "_id" : ObjectId("61212a8300c8304536a86b2f"), "name" : "Everest", "height" : 8848, "location" : [ "Nepal", "China" ], "ascents" : { "first" : { "year" : 1953 }, "first_winter" : { "year" : 1980 }, "total" : 5656 } }

...

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

با استفاده از داده های نمونه ، می توانید به مرحله بعدی ادامه دهید تا نحوه ایجاد فهرست بر اساس یک زمینه را بیاموزید.

مرحله 2 – ایجاد یک فهرست واحد و ارزیابی استفاده از شاخص

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

برای شروع ، عبارت زیر را اجرا کنید. به طور معمول ، سند پرس و جو {“height”: {$ gt: 8700}} باعث می شود که این پرس و جو هرگونه اسنادی را که قله کوهی با ارزش ارتفاع بیش از 8700 توصیف می کند ، بازیابی کند. با این حال ، این عملیات شامل روش توضیح (executiveStats) ، که باعث می شود پرس و جو در عوض اطلاعات مربوط به نحوه انجام این پرس و جو را برگرداند. از آنجا که هنوز هیچ نمایه ای ایجاد نکرده اید ، این یک معیار در اختیار شما قرار می دهد که می توانید از آن برای مقایسه در برابر پرس و جوهایی که از نمایه استفاده می کنند استفاده کنید:

db.peaks.find(
{ “height”: { $gt: 8700 } }
).explain(“executionStats”)

این عملیات اطلاعات زیادی را برمی گرداند. خروجی مثال زیر تعدادی خط را حذف می کند که برای اهداف این آموزش مهم نیستند:

 

Output

{
        "queryPlanner" : {
                . . .
                "winningPlan" : {
                        "stage" : "COLLSCAN",
                        . . .
                },
        },
        . . .
        "executionStats" : {
                . . .
                "nReturned" : 1,
                "executionTimeMillis" : 0,
                "totalKeysExamined" : 0,
                "totalDocsExamined" : 5,
                . . .
        },
        . . .
}

زمینه های زیر که در این خروجی بازگردانده می شوند به طور خاص برای درک نحوه عملکرد نمایه ها مرتبط هستند:

WinPlan: این سند در بخش queryPlanner نحوه تصمیم گیری MongoDB برای اجرای پرس و جو را توضیح می دهد. بسته به نوع پرس و جو ، ساختار دقیق طرح برنده ممکن است متفاوت باشد ، اما در اینجا نکته اصلی که باید به آن توجه کنید COLLSCAN است. وجود این مقدار بدین معناست که MongoDB برای یافتن اسناد درخواستی نیاز به گذراندن مجموعه کامل بدون هیچ گونه کمکی داشت.
n بازگردانده شده: این مقدار به شما می گوید که چند سند توسط یک پرس و جو معین برگردانده شده است. در اینجا ، فقط یک قله کوه با پرس و جو مطابقت دارد.
ExeTimeMillis: این مقدار نشان دهنده زمان اجرا است. با چنین مجموعه کوچکی ، اهمیت آن ناچیز است. با این حال ، هنگام تجزیه و تحلیل عملکرد پرس و جوها در برابر مجموعه های بزرگتر یا پیچیده تر ، باید معیار مهمی را در نظر داشت.
totalKeysExamined: این به شما می گوید که چند مدخل فهرست را برای پیدا کردن اسناد درخواست شده در MongoDB بررسی کرده است. از آنجا که از اسکن مجموعه استفاده شد و شما هنوز هیچ فهرست ایجاد نکرده اید ، مقدار 0 است.
totalDocsExamined: این مقدار نشان می دهد که چند سند باید MongoDB از مجموعه بخواند. از آنجا که MongoDB یک اسکن مجموعه انجام داد ، مقدار آن 5 ، تعداد کل اسناد موجود در مجموعه است. هرچه مجموعه بزرگتر باشد ، در صورت عدم استفاده از نمایه ها ، مقدار بیشتری در این زمینه وجود دارد.
به تفاوت بین کل اسناد مورد بررسی و تعداد اسناد برگشت داده شده توجه کنید: MongoDB مجبور شد 5 سند را برای بازگرداندن یک سند بازرسی کند.

این آموزش در بخشهای بعدی به این مقادیر اشاره می کند تا نحوه تأثیر نمایه ها بر نحوه اجرای پرس و جوها را تجزیه و تحلیل کند.

برای این منظور ، با استفاده از متد createIndex () ، یک شاخص در قسمت height در مجموعه peaks ایجاد کنید. این روش یک سند JSON را توصیف می کند که نمایه ای را که می خواهید ایجاد کنید توصیف می کند. این مثال یک فهرست زمینه واحد ایجاد می کند ، به این معنی که سند حاوی یک کلید واحد (ارتفاع در این مثال) برای فیلدی است که می خواهیم از آن استفاده کنیم. این کلید 1 یا -1 را به عنوان مقدار می پذیرد. این مقادیر ترتیب مرتب سازی شاخص را نشان می دهند که 1 نشان دهنده صعودی و -1 نشان دهنده نزولی است:

db.peaks.createIndex( { “height”: 1 } )

MongoDB تأییدی را برمی گرداند که نشان می دهد چند شاخص در حال حاضر در مجموعه تعریف شده است و تفاوت آن با حالت قبلی.

Output

 
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}

حالا سعی کنید همان پرس و جو را که قبلاً اجرا کرده اید اجرا کنید. هرچند این بار ، اطلاعاتی که با روش توضیح (“exeStatStats”) بازگردانده می شوند ، متفاوت است زیرا نمایه ای در محل وجود دارد:

db.peaks.find(
{ “height”: { $gt: 8700 } }
).explain(“executionStats”)

 

Output

{
        "queryPlanner" : {
                . . .
                "winningPlan" : {
                        . . .
                        "inputStage" : {
                                "stage" : "IXSCAN",
                                . . .
                                "indexName" : "height_1",
                                . . .
                        }
                },
                . . .
        },
        "executionStats" : {
                . . .
                "nReturned" : 1,
                "executionTimeMillis" : 0,
                "totalKeysExamined" : 1,
                "totalDocsExamined" : 1,
                . . .
        },
        . . .
}

توجه کنید که WinPlan دیگر COLLSCAN را نشان نمی دهد. در عوض ، IXSCAN وجود دارد ، نشان می دهد که از ایندکس به عنوان بخشی از اجرای پرس و جو استفاده شده است. MongoDB همچنین به شما اطلاع می دهد که کدام شاخص از طریق مقدار indexName استفاده شده است. به طور پیش فرض ، MongoDB نامهای فهرست را از نامهای فیلدی که فهرست به آنها متصل است و ترتیب اعمال می شود ، می سازد. از {“height”: 1} ، MongoDB به طور خودکار نام height_1 را ایجاد کرد.

مهمترین تغییر در بخش exeStats است. یکبار دیگر ، این پرس و جو فقط یک سند واحد را که با nReturned مشخص شده است ، باز می گرداند. با این حال ، این بار totalDocsExamined فقط 1 است. این بدان معناست که پایگاه داده فقط یک سند را از مجموعه بازیابی کرده تا پرس و جو را برآورده کند. TotalKeysExamined نشان می دهد که شاخص فقط یک بار بررسی شده است زیرا اطلاعات کافی برای جمع آوری نتیجه را ارائه می دهد.

با ایجاد این فهرست ، تعداد اسنادی را که MongoDB مجبور به بازرسی بود ، از 5 به 1 کاهش دادید ، که پنج برابر کاهش می یابد. اگر مجموعه قله ها حاوی هزاران مدخل باشد ، تأثیر استفاده از شاخص حتی بیشتر آشکار می شود.

مرحله 3 – ایجاد نمایه های منحصر به فرد

در MongoDB ، درج دو سند در مجموعه اگر هر دو دارای مقادیر _id یکسانی باشند ، غیرممکن است. این به این دلیل است که پایگاه داده به طور خودکار یک فهرست تک فیلدی در قسمت _id حفظ می کند که علاوه بر کمک به سرعت بخشیدن به جستجوی اسناد ، منحصر به فرد بودن مقدار فیلد _id را تضمین می کند. این مرحله توضیح می دهد که چگونه می توانید فهرست بندی کنید تا مطمئن شوید مقادیر یک فیلد معین برای هر سند در یک مجموعه منحصر به فرد است.

برای توضیح ، روش createIndex () زیر را اجرا کنید. نحو این دستور مشابه آنچه در مرحله قبل استفاده شد است ، با این تفاوت که این بار یک پارامتر دوم با ایجاد تنظیمات اضافی برای index () به createIndex () منتقل می شود. {“منحصر به فرد”: true} نشان می دهد که شاخص ایجاد شده اطمینان می دهد که مقادیر فیلد (نام) مشخص شده نمی تواند تکرار شود:

db.peaks.createIndex( { “name”: 1 }, { “unique”: true } )

بار دیگر ، MongoDB تأیید می کند که این فهرست با موفقیت ایجاد شده است:

 

Output

{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 2,
        "numIndexesAfter" : 3,
        "ok" : 1
}

در مرحله بعد ، بررسی کنید که آیا ایندکس به منظور اصلی خود عمل می کند یا با اجتناب از اسکن مجموعه ، هر گونه پرس و جو را سریعتر با نام کوه اجرا می کند. برای انجام این کار ، عبارت برابری زیر را با روش توضیحی (“executiveStats”) اجرا کنید:

db.peaks.find(
{ “name”: “Everest” }
).explain(“executionStats”)

طرح پرس و جو بازگشتی از استراتژی IXSCAN با شاخص تازه ایجاد شده استفاده می کند ، درست مانند پرس و جو ارتفاع کوه از مرحله قبل:

 

Output

{
        "queryPlanner" : {
                . . .
                "winningPlan" : {
                        . . .
                        "inputStage" : {
                                "stage" : "IXSCAN",
                                . . .
                                "indexName" : "name_1",
                                . . .
                        }
                },
                . . .
        },
        . . .
}

در مرحله بعد بررسی کنید که آیا می توانید سند دیگری را که نمایانگر کوه اورست است به مجموعه اضافه کنید ، در حالی که فهرست در جای خود قرار دارد. این کار را با اجرای روش insertOne () زیر انجام دهید:

db.peaks.insertOne({
“name”: “Everest”,
“height”: 9200,
“location”: [“India”],
“ascents”: {
“first”: {
“year”: 2020
},
“first_winter”: {
“year”: 2021
},
“total”: 2
}
})

MongoDB سند را ایجاد نمی کند و در عوض پیغام خطا را برمی گرداند:

 

Output

WriteError({
        "index" : 0,
        "code" : 11000,
        "errmsg" : "E11000 duplicate key error collection: test.peaks index: name_1 dup key: { name: \"Everest\" }",
        "op" : {
            . . .

این پیام خطای کلید duplicatye به فهرست name_1 اشاره دارد ، نشان می دهد که این محدودیت منحصر به فرد را در این زمینه اعمال می کند.

با این کار ، شما آموخته اید که چگونه یک فهرست منحصر به فرد ایجاد کنید تا از فیلدهای معین حاوی مقادیر تکراری جلوگیری شود. برای یادگیری نحوه استفاده از نمایه ها با اسناد تعبیه شده ، به خواندن ادامه دهید.

مرحله 4 – ایجاد یک فهرست در یک میدان جاسازی شده

هر زمان که از مجموعه ای با استفاده از فیلدی در سند تو در تو که نمایه ای ندارد ، درخواست می کنید ، MongoDB نه تنها باید همه اسناد را از مجموعه بازیابی کند ، بلکه باید از هر سند تو در تو نیز عبور کند.

به عنوان مثال ، عبارت زیر را اجرا کنید. با این کار اسنادی که مجموع آنها – فیلدی که درون سند صعودهای موجود در هر سند در مجموعه قله ها قرار گرفته است – بیش از 300 است و نتایج را به ترتیب نزولی مرتب می کند:

db.peaks.find(
{ “ascents.total”: { $gt: 300 } }
).sort({ “ascents.total”: -1 })

این پرس و جو چهار قله از مجموعه را باز می گرداند ، با کوه اورست قله با بیشترین صعود ، و پس از آن Lhotse ، Makalu و K2:

Output

{ "_id" : ObjectId("61212a8300c8304536a86b2f"), "name" : "Everest", "height" : 8848, "location" : [ "Nepal", "China" ], "ascents" : { "first" : { "year" : 1953 }, "first_winter" : { "year" : 1980 }, "total" : 5656 } }
{ "_id" : ObjectId("61212a8300c8304536a86b32"), "name" : "Lhotse", "height" : 8516, "location" : [ "Nepal", "China" ], "ascents" : { "first" : { "year" : 1956 }, "first_winter" : { "year" : 1988 }, "total" : 461 } }
{ "_id" : ObjectId("61212a8300c8304536a86b33"), "name" : "Makalu", "height" : 8485, "location" : [ "China", "Nepal" ], "ascents" : { "first" : { "year" : 1955 }, "first_winter" : { "year" : 2009 }, "total" : 361 } }
{ "_id" : ObjectId("61212a8300c8304536a86b30"), "name" : "K2", "height" : 8611, "location" : [ "Pakistan", "China" ], "ascents" : { "first" : { "year" : 1954 }, "first_winter" : { "year" : 1921 }, "total" : 306 } }

اکنون همان پرس و جو را اجرا کنید ، اما روش توضیح ((exeStatStats)) را که قبلاً استفاده شده بود ، وارد کنید:

db.peaks.find(
{ “ascents.total”: { $gt: 300 } }
).sort({ “ascents.total”: -1 }).explain(“executionStats”)

همانطور که مقدار COLLSCAN در این بخش از خروجی نشان می دهد ، MongoDB به یک اسکن مجموعه کامل متوسل شد و تمام اسناد مجموعه peaks را مرور کرد تا آنها را با شرایط پرس و جو مقایسه کند:

 

Output

{
        . . .
                "winningPlan" : {
                        "stage" : "COLLSCAN",
                        . . .
                },
        . . .
}

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

برای کمک به MongoDB در اجرای این پرس و جو ، بیایید یک فهرست در قسمت کل در سند صعودها ایجاد کنیم. از آنجا که کل میدان درون صعودها قرار گرفته است ، هنگام ایجاد این فهرست نمی توان کل را به عنوان نام فیلد مشخص کرد. در عوض ، MongoDB یک نماد نقطه برای دسترسی به فیلدها در اسناد تو در تو ارائه می دهد. برای ارجاع به فیلد کل داخل سند صعودی ، می توانید از علامت ascents.total ، مانند این استفاده کنید:

db.peaks.createIndex( { “ascents.total”: 1 } )

MongoDB با پیام موفقیت آمیز پاسخ می دهد که به شما اطلاع می دهد که اکنون چهار فهرست تعریف شده دارید.

{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 3,
        "numIndexesAfter" : 4,
        "ok" : 1
}

پرس و جو قبلی را یکبار دیگر اجرا کنید تا بررسی کنید که آیا این فهرست به MongoDB کمک کرده است تا از اسکن کامل مجموعه جلوگیری کند:

db.peaks.find(
{ “ascents.total”: { $gt: 300 } }
).sort({ “ascents.total”: -1 }).explain(“executionStats”)

 

Output

{
        "queryPlanner" : {
                . . .
                "winningPlan" : {
                        . . .
                        "inputStage" : {
                                "stage" : "IXSCAN",
                                . . .
                                "indexName" : "ascents.total_-1",
                                . . .
                        }
                },
                . . .
        },
        "executionStats" : {
                . . .
                "nReturned" : 4,
                "executionTimeMillis" : 0,
                "totalKeysExamined" : 4,
                "totalDocsExamined" : 4,
                . . .
                "direction" : "backward",
                . . .
        },
        . . .
}

توجه داشته باشید که در حال حاضر IXSCAN در برابر شاخص تازه ایجاد شده ascents.total_-1 استفاده می شود و فقط چهار سند مورد بررسی قرار گرفته است. این همان تعداد اسنادی است که در فهرست بازگردانده شده و بررسی شده اند ، بنابراین هیچ سند دیگری برای تکمیل پرس و جو بازیابی نشده است.

جهت ، یک فیلد دیگر در بخش ExeStats ، نشان می دهد که MongoDB در کدام جهت تصمیم گرفته است که از ایندکس عبور کند. از آنجا که این شاخص با استفاده از نحو {“ascents.total”: 1} ایجاد صعودی شد و پرس و جو قله های کوه را به ترتیب نزولی مرتب کرد ، موتور پایگاه داده تصمیم گرفت به عقب برگردد. هنگام بازیابی اسناد به ترتیب خاص بر اساس فیلدی که بخشی از فهرست است ، MongoDB از فهرست برای ارائه سفارش نهایی بدون نیاز به مرتب سازی بیشتر اسناد پس از بازیابی کامل آنها استفاده می کند.

مرحله 5 – ایجاد Compound Field Index

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

هنگامی که یک فهرست میدان واحد در زمینه ارتفاع ایجاد کردید ، از مرحله 2 به یاد بیاورید تا به طور م moreثرتری از مجموعه قله ها برای یافتن بلندترین قله های کوه جستجو کنید. با استفاده از این شاخص ، بیایید تجزیه و تحلیل کنیم که چگونه MongoDB یک پرس و جو مشابه اما کمی پیچیده تر را انجام می دهد. سعی کنید کوه هایی با ارتفاع کمتر از 8600 متر پیدا کنید که اولین صعود زمستانی آنها پس از سال 1990 رخ داده است:

db.peaks.find(
{
“ascents.first_winter.year”: { $gt: 1990 },
“height”: { $lt: 8600 }
}
).sort({ “height”: -1 })

فقط یک کوه واحد – ماکالو – هر دو شرایط زیر را برآورده می کند:

 

Output

{ "_id" : ObjectId("61212a8300c8304536a86b33"), "name" : "Makalu", "height" : 8485, "location" : [ "China", "Nepal" ], "ascents" : { "first" : { "year" : 1955 }, "first_winter" : { "year" : 2009 }, "total" : 361 } }

حالا روش توضیح (“executiveStats”) را اضافه کنید تا نحوه انجام این درخواست توسط MongoDB را بیابید:

db.peaks.find(
{
“ascents.first_winter.year”: { $gt: 1990 },
“height”: { $lt: 8600 }
}
).sort({ “height”: -1 }).explain(“executionStats”)

حتی اگر هیچ شاخصی وجود نداشته باشد که ممکن است بر اولین صعود زمستانی تأثیر بگذارد ، MongoDB به جای انجام یک اسکن کامل مجموعه ، از یک شاخص ایجاد شده قبلی استفاده کرد:

 

Output

{
        "queryPlanner" : {
                . . .
                "winningPlan" : {
                                "stage" : "IXSCAN",
                                . . .
                                "indexName" : "height_1",
                                . . .
                        }
                },
                . . .
        },
        "executionStats" : {
                . . .
                "nReturned" : 1,
                "executionTimeMillis" : 0,
                "totalKeysExamined" : 3,
                "totalDocsExamined" : 3,
                . . .
        },
        . . .
}

توجه کنید که این بار ، متفاوت از اعدامهای پرس و جو با نمایه قبلی ، مقدار nReturned که تعداد اسناد برگشتی را نشان می دهد متفاوت از totalKeysExamined و totalDocsExamined است. MongoDB از شاخص میدان واحد در زمینه ارتفاع برای محدود کردن نتایج از 5 به 3 استفاده کرد ، اما سپس مجبور شد اسناد باقی مانده را برای بررسی اولین تاریخ صعود زمستانی اسکن کند.

اگر یک فهرست فقط برای یک قسمت از یک پرس و جو در دسترس باشد ، MongoDB از آن برای محدود کردن نتایج ابتدا قبل از انجام اسکن مجموعه استفاده می کند. این برنامه فقط لیست اسنادی را که ابتدا فیلتر کرده است را برآورده می کند تا بقیه پرس و جو را برآورده کند.

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

تصور کنید که پایگاه داده قله های کوه را مطابق شرایط مطلوب مربوط به اولین صعود و ارتفاع زمستانی آنها به طور منظم جستجو کنید تا به نگرانی عملکرد تبدیل شود و از داشتن یک فهرست سودمند باشد. برای ایجاد یک فهرست بر اساس هر دو زمینه ، روش createIndex (0) زیر را اجرا کنید:

db.peaks.createIndex(
{
“ascents.first_winter.year”: 1,
“height”: -1
}
)

توجه کنید که نحو این عملیات مشابه ایجاد نمایه میدان واحد است ، اما این بار هر دو فیلد در شی تعریف شاخص فهرست شده اند. این شاخص با توجه به اولین صعودهای زمستانی قله ها و با توجه به ارتفاعات آنها صعودی ایجاد می شود.

MongoDB تصدیق می کند که این فهرست با موفقیت ایجاد شده است:

 

Output

{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 4,
        "numIndexesAfter" : 5,
        "ok" : 1
}

با نمایه های تک زمینه ای ، موتور پایگاه داده می تواند آزادانه از شاخص به جلو یا عقب عبور کند. با این حال ، در مورد شاخص های ترکیبی این همیشه صادق نیست. اگر دستور مرتب سازی خاصی برای ترکیبی از زمینه ها بیشتر مورد پرس و جو قرار گیرد ، می تواند عملکرد را افزایش دهد و آن ترتیب را در تعریف فهرست لحاظ کند. MongoDB سپس سفارش درخواستی را با استفاده از ایندکس مستقیماً برآورده می کند ، نه اینکه مرتب سازی بیشتری در لیست اسناد برگشتی انجام دهد.

پرس و جو قبلی را یکبار دیگر اجرا کنید تا آزمایش کنید آیا تغییری در نحوه انجام پرس و جو ایجاد شده است یا خیر:

db.peaks.find(
{
“ascents.first_winter.year”: { $gt: 1990 },
“height”: { $lt: 8600 }
}
).sort({ “height”: -1 }).explain(“executionStats”)

این بار پرس و جو دوباره از اسکن فهرست استفاده کرد ، اما شاخص متفاوت است. اکنون ، شاخص ascents.first_winter.year_1_height_-1 که به تازگی ایجاد کرده اید ، بر روی شاخص height_1 که قبلاً استفاده شده بود ، انتخاب می شود:

 

Output

{
        "queryPlanner" : {
                . . .
                "winningPlan" : {
                                "stage" : "IXSCAN",
                                . . .
                                "indexName" : "ascents.first_winter.year_1_height_-1",
                                . . .
                        }
                },
                . . .
        },
        "executionStats" : {
                . . .
                "nReturned" : 1,
                "executionTimeMillis" : 0,
                "totalKeysExamined" : 1,
                "totalDocsExamined" : 1,
                . . .
        },
        . . .
}

تفاوت مهم در exeStats نهفته است. با نمایه جدید ، یک سند واحد مستقیماً از فهرست مورد بررسی قرار گرفت و سپس بازگردانده شد ، در مقابل سه سند که برای محدود کردن نتایج به اسکن بیشتر سند نیاز داشتند. اگر این مجموعه بزرگتر بود ، تفاوت بین شاخص مرکب جدید و استفاده از یک فهرست میدان واحد با فیلتر بیشتر حتی بیشتر نمایان می شد.

اکنون که نحوه ایجاد فهرست هایی را که شامل بیش از یک زمینه می شود یاد گرفته اید ، می توانید به سراغ یادگیری نمایه های چند کلیدی و نحوه استفاده از آنها بروید.

مرحله 6-ایجاد یک فهرست چند کلیدی

در مثالهای قبلی ، فیلدهای مورد استفاده در فهرستها دارای مقادیر واحد مانند قد ، یک سال یا یک نام در آنها بود. در این موارد ، MongoDB مقدار میدان را مستقیماً به عنوان کلید فهرست ذخیره می کند ، و این شاخص را به سرعت قابل عبور می کند. این مرحله نحوه رفتار MongoDB را نشان می دهد وقتی فیلدی که برای ایجاد ایندکس استفاده می شود ، فیلدی است که مقادیر متعددی مانند آرایه را ذخیره می کند.

برای شروع ، سعی کنید تمام کوه های موجود در مجموعه ای را که در نپال واقع شده اند پیدا کنید:

db.peaks.find(
{ “location”: “Nepal” }
)

چهار قله باز می گردند:

 

Output

{ "_id" : ObjectId("61212a8300c8304536a86b2f"), "name" : "Everest", "height" : 8848, "location" : [ "Nepal", "China" ], "ascents" : { "first" : { "year" : 1953 }, "first_winter" : { "year" : 1980 }, "total" : 5656 } }
{ "_id" : ObjectId("61212a8300c8304536a86b31"), "name" : "Kangchenjunga", "height" : 8586, "location" : [ "Nepal", "India" ], "ascents" : { "first" : { "year" : 1955 }, "first_winter" : { "year" : 1986 }, "total" : 283 } }
{ "_id" : ObjectId("61212a8300c8304536a86b32"), "name" : "Lhotse", "height" : 8516, "location" : [ "Nepal", "China" ], "ascents" : { "first" : { "year" : 1956 }, "first_winter" : { "year" : 1988 }, "total" : 461 } }
{ "_id" : ObjectId("61212a8300c8304536a86b33"), "name" : "Makalu", "height" : 8485, "location" : [ "China", "Nepal" ], "ascents" : { "first" : { "year" : 1955 }, "first_winter" : { "year" : 2009 }, "total" : 361 } }

توجه داشته باشید که هیچ یک از این قله ها فقط در نپال نیستند. هر یک از این چهار قله دارای بیش از یک کشور هستند که توسط فیلدهای مکان آنها مشخص شده است ، که همه آنها مجموعه ای از مقادیر متعدد هستند. علاوه بر این ، این مقادیر می توانند به ترتیب مختلف ظاهر شوند. به عنوان مثال ، لوتسه در [[نپال] ، \ “چین]] ، در حالی که ماکالو در [” چین “،” نپال “] ذکر شده است.

از آنجا که هیچ فهرست موجود در زمینه مکان وجود ندارد ، MongoDB در حال حاضر یک اسکن مجموعه کامل برای اجرای آن پرس و جو انجام می دهد. بیایید یک فهرست جدید برای قسمت مکان ایجاد کنیم:

db.peaks.createIndex( { “location”: 1 } )

توجه داشته باشید که این نحو با هیچ نمای میدان دیگری متفاوت نیست. MongoDB پیام موفقیت را برمی گرداند و ایندکس اکنون برای استفاده در دسترس است:

 

Output

{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 5,
        "numIndexesAfter" : 6,
        "ok" : 1
}

اکنون که یک فهرست برای قسمت مکان ایجاد کرده اید ، پرس و جوی قبلی را مجدداً با متد توضیح (“exeStatStats”) اجرا کنید تا نحوه اجرای آن را درک کنید:

db.peaks.find(
{ “location”: “Nepal” }
).explain(“executionStats”)

خروجی حاصله نشان می دهد که MongoDB از اسکن فهرست بعنوان استراتژی استفاده کرده است و با اشاره به نمای جدید location_1 ایجاد شده است:

 

Output

{
        "queryPlanner" : {
                . . .
                "winningPlan" : {
                        . . .
                        "inputStage" : {
                                "stage" : "IXSCAN",
                                . . .
                                "indexName" : "location_1",
                                "isMultiKey" : true,
                                . . .
                        }
                },
                . . .
        },
        "executionStats" : {
                . . .
                "nReturned" : 4,
                "executionTimeMillis" : 0,
                "totalKeysExamined" : 4,
                "totalDocsExamined" : 4,
                . . .
        }
        . . .
}

تعداد اسناد برگشتی با تعداد کل کلیدهای مورد بررسی و اسناد مورد بررسی مطابقت دارد. این بدان معناست که ایندکس به عنوان تنها منبع اطلاعات برای پرس و جو مورد استفاده قرار گرفت. چگونه ممکن است اگر مقادیر میدان دارای آرایه های بیش از یک مقدار باشند و در درخواست از کوههایی با یکی از مکان های منطبق با نپال خواسته شود؟

به ویژگی isMultiKey که در خروجی true ذکر شده توجه کنید. MongoDB به طور خودکار یک فهرست چند کلیدی برای قسمت مکان ایجاد کرد. اگر یک فهرست برای آرایه های دارای فیلد ایجاد کنید ، MongoDB به طور خودکار تعیین می کند که باید یک فهرست چند کلیدی ایجاد کند و برای هر عنصر از این آرایه ها ورودی های شاخص جداگانه ایجاد می کند.

بنابراین ، برای سندی که دارای فیلد مکان ذخیره آرایه [“چین” ، “نپال”] است ، دو ورودی فهرست جداگانه برای یک سند ، یکی برای چین و دیگری برای نپال ظاهر می شود. به این ترتیب ، MongoDB می تواند از ایندکس به نحو احسن استفاده کند ، حتی اگر query درخواست تطابق جزئی با محتویات آرایه را داشته باشد.

مرحله 7 – فهرست بندی و حذف فهرستها در یک مجموعه

در مراحل قبل ، نحوه ایجاد انواع مختلف فهرست ها را آموخته اید. هنگامی که پایگاه داده رشد می کند یا الزامات تغییر می کند ، مهم است که بتوانید بدانید چه شاخص هایی تعریف شده اند و گاهی اوقات موارد ناخواسته را حذف می کنید. ایندکس هایی که دیگر مفید نیستند می توانند تأثیر منفی بر عملکرد پایگاه داده داشته باشند ، زیرا MongoDB همچنان باید در هر زمان که داده ها را اضافه یا تغییر می دهید ، آنها را حفظ کند.

برای فهرست بندی تمام نمایه هایی که در مجموعه آموزش در این مجموعه آموزشی تعریف کرده اید ، می توانید از روش getIndexes () استفاده کنید:

db.peaks.getIndexes()

MongoDB فهرست فهرست ها را باز می گرداند ، ماهیت آنها را شرح می دهد و نام آنها را فهرست می کند:

 

Output

[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "height" : 1
                },
                "name" : "height_1"
        },
        {
                "v" : 2,
                "unique" : true,
                "key" : {
                        "name" : 1
                },
                "name" : "name_1"
        },
        {
                "v" : 2,
                "key" : {
                        "ascents.total" : 1
                },
                "name" : "ascents.total_1"
        },
        {
                "v" : 2,
                "key" : {
                        "ascents.first_winter.year" : 1,
                        "height" : -1
                },
                "name" : "ascents.first_winter.year_1_height_-1"
        },
        {
                "v" : 2,
                "key" : {
                        "location" : 1
                },
                "name" : "location_1"
        }
]

در طول این آموزش ، شما به طور کلی 6 نمایه را تعریف کرده اید. برای هر یک ، ویژگی کلیدی فهرست شاخص را فهرست می کند ، مطابق با نحوه ایجاد شاخص قبل است. برای هر فهرست ، ویژگی نام شامل نام MongoDB است که به طور خودکار هنگام ایجاد فهرست ایجاد می شود.

برای حذف یک فهرست موجود ، می توانید از هر یک از این ویژگی ها با روش dropIndex () استفاده کنید. مثال زیر با استفاده از تعریف محتویات ، شاخص height_1 را حذف می کند:

db.peaks.dropIndex( { “height”: 1 } )

از آنجا که {“height”: 1} با نمای زمینه واحد در ارتفاع به نام height_1 مطابقت دارد ، MongoDB آن فهرست را حذف کرده و با پیامی موفقیت آمیز نشان می دهد که چند شاخص قبل از حذف این مورد وجود داشت:

 

Output

{ "nIndexesWas" : 6, "ok" : 1 }

این روش تعیین شاخص برای حذف می تواند در صورت پیچیده تر بودن تعریف شاخص ، مانند آنچه که در مورد نمایه های مرکب اتفاق می افتد ، دشوار باشد. به عنوان جایگزین ، می توانید فهرست ها را با استفاده از نام فهرست حذف کنید. برای حذف شاخص ایجاد شده در اولین صعود و ارتفاع زمستانی در مرحله 5 با استفاده از نام آن ، عملیات زیر را اجرا کنید:

db.peaks.dropIndex(“ascents.first_winter.year_1_height_-1”)

بار دیگر ، MongoDB فهرست را حذف کرده و یک پیام موفقیت آمیز نشان می دهد:

 

Output

{ "nIndexesWas" : 5, "ok" : 1 }

با فراخوانی مجدد getIndexes () می توانید تأیید کنید که این دو فهرست در واقع از لیست فهرست مجموعه حذف شده اند:

db.peaks.getIndexes()

این بار ، تنها چهار فهرست باقی مانده فهرست شده است:

 

Output

[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "unique" : true,
                "key" : {
                        "name" : 1
                },
                "name" : "name_1"
        },
        {
                "v" : 2,
                "key" : {
                        "ascents.total" : 1
                },
                "name" : "ascents.total_1"
        },
        {
                "v" : 2,
                "key" : {
                        "location" : 1
                },
                "name" : "location_1"
        }
]

به عنوان آخرین نکته ، توجه داشته باشید که امکان تغییر فهرست موجود در MongoDB وجود ندارد. اگر نیاز به تغییر یک فهرست دارید ، ابتدا باید آن فهرست را رها کرده و یک فهرست جدید ایجاد کنید.

نتیجه

با خواندن این مقاله ، شما با مفهوم نمایه ها آشنا شده اید – ساختارهای داده خاصی که می توانند با کاهش میزان داده هایی که MongoDB باید در طول اجرای پرس و جو تجزیه و تحلیل کند ، عملکرد پرس و جو را بهبود بخشد. شما آموخته اید که چگونه فهرست های تک زمینه ای ، مرکب و چند کلیدی ایجاد کنید ، و همچنین چگونه بررسی کنید که آیا وجود آنها بر اجرای پرس و جو تأثیر می گذارد یا خیر. شما همچنین یاد گرفته اید که چگونه فهرست های موجود را لیست کرده و موارد ناخواسته را حذف کنید.

 

  • behnam gol mohamadi
  • ۰
  • ۰

چگونه برای جهان میزبانهای وب مدیریت شده  cloud-first در حال تکامل هستند

ورود به مدیریت

تعداد کمی از صنایع سریعتر از صنعت میزبانی وب رشد کرده اند زیرا مشاغل کوچک نیاز به حضور در وب را تشخیص می دهند. ظهور پلتفرم هایی مانند وردپرس ، Shopify و Magento باعث شده است که تیم های کوچک توسعه دهندگان وب بتوانند برای کسب و کار خود یا خدمات رسانی به نیازهای مشتریان خود ، صفحات وب پیشرفته و مدرن ایجاد کنند.

امروزه هزاران آژانس ، مترجمان آزاد و مشاغل کوچک به این ابزارها ، که بسیاری از آنها پلتفرم های منبع باز هستند ، تکیه می کنند تا دقیقاً آنچه را که لازم است بدون اختراع مجدد چرخ ایجاد کنند. از جمله چالش هایی که این تیم های کوچک توسعه دهندگان با آن روبرو هستند میزبانی است . وقتی نمایندگی ها. فریلنسرها و مشاغل کوچک می خواهند از مدیریت زیرساخت ها اجتناب کنند ، میزبان وب مدیریت شده می تواند با انتزاع بسیاری از گزینه های ارائه شده توسط سیستم عامل های ابر عمومی ، خدمات ارائه دهد. این به توسعه دهندگان این امکان را می دهد که لزوماً نیازی به تمایز بین سطوح CPU نداشته باشند یا نیازی به درک عمیق قیمت ها برای ترافیک مورد انتظار خود نداشته باشند.

چرا Cloud-First؟

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

یک امتیاز اضافی: مقیاس پذیری و صرفه جویی در هزینه از طرف ارائه دهندگان ابر عمومی ، مزایایی است که میزبان می تواند به مشتری نهایی منتقل کند ، و در نتیجه پیشنهاد بسیار ارزشمندی را ارائه می دهد که باعث می شود توسعه اولین سرویس میزبانی ابری بسیار جذاب تر شود

نکاتی در مورد ایجاد ارائه دهنده میزبانی مدیریت شده

کسانی که به دنبال ایجاد یک تجارت میزبانی مدیریت شده هستند باید چندین عامل کلیدی را در نظر بگیرند. مهمتر از همه ، آنها باید از برآوردن نیازهای مشتریان خود اطمینان حاصل کنند. بسیاری از کاربران نهایی ارائه دهندگان میزبانی مدیریت شده از WordPress استفاده می کنند ، به عنوان غالب ترین سیستم مدیریت محتوا (CMS) که امروزه در دسترس است. یک کاربر نهایی معمولی ممکن است یک آژانس وب کوچک با تیمی از چند توسعه دهنده باشد که همه آنها WordPress را از داخل و خارج می شناسند. نکته کلیدی برای آن آژانس عبارت است از (1) ساختن روی پلتفرمی که کار می کند ، (2) ایجاد بودجه و (3) ساختن به موقع برای مشتریان خود. ارائه دهندگان میزبانی مدیریت شده می توانند با احداث ابرهای قابل اعتماد عمومی مانند DigitalOcean این نیازها را برآورده کنند

ساختن بر پلتفرمی که کار می کند

آژانس ها ، برای گرفتن یک مشتری معمولی مدیریت شده میزبانcloud ، به یک میزبانcloud مدیریت شده نیاز دارند که از هر نظر ممکن است رقابتی باشد: عملکرد ، قابلیت مقیاس بندی ، زمان به روز و پشتیبانی. مشتریان میزبان ابر مدیریت شده ملزم به رعایت الزامات عملکرد و انتظارات از حجم ترافیک هستند. با ایجاد cloud به روشی که در مقیاس قابل اطمینان کار کند ، میزبان می تواند با اطمینان توافقنامه هایی در سطح سرویس ارائه دهد که نشان دهنده این قابلیت حیاتی است.

بر اساس بودجه

دوم ، و بسیار مهم برای کاربران نهایی ، ایجاد بودجه است. برای خود میزبان های ابری مدیریت شده ، درک هزینه های میزبانی در برخی از ابرهای مقیاس بزرگ می تواند پیچیده و مدل قیمت گذاری غیرقابل بررسی باشد. به طور مشابه ، برای مشتریان ، قیمت گذاری یک الزام کلیدی است و در صورت غیرقابل بررسی ، می تواند یک مشکل عمده ایجاد کند.

آژانس معمولی به هزینه استفاده از CPU و پهنای باند یا سطح عملکردی که برای ترافیک مورد انتظار خود نیاز دارند فکر نمی کند. آنها می خواهند این جزئیات با شرایط قیمت گذاری که می توانند بفهمند و پیش بینی کنند ، در پس زمینه محو شود تا بتوانند از پس بودجه برآیند. برای اینکه میزبان ابری مدیریت شده آن قیمت واضح و شفاف را ارائه دهد ، هزینه های خود باید قابل پیش بینی باشد ، به همین دلیل است که آنها باید بر روی سیستم عامل های ابری با مدل های قیمت گذاری روشن ساخته شوند.

ساخت به موقع

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

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

DigitalOcean برای مدیریت Cloud Hosting

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

WPMU DEV یکی از این مشتریان است. WPMU DEV یک میزبان ابری مدیریت شده است که به هزاران کسب و کار کوچک خدمات رسانی می کند. تیم کوچک توسعه دهندگان آنها می خواستند به راه حل کم هزینه مهاجرت کنند بدون اینکه پشتیبانی یا عملکرد مشتریان خود را از دست بدهند. با استفاده از Droplets ، DigitalOcean یک مدل قیمت شفاف و شفاف را در اختیار تیم قرار داد که با نیازهای آنها مطابقت داشت

DigitalOcean تنها سرویسی است که انعطاف پذیری و مقیاس یک پلتفرم ابری با کارایی بالا را با هزینه و نیازهای پشتیبانی یک مشاغل کوچک رو به رشد متعادل می کند.

Cloud HostingCMSسرورسرورمجازیمدیریت محتوامیزبانی وبهاستهاستینگ خرید سرور فروش سرور vps DigitalOcean Droplets پلتفرم ابری

  • behnam gol mohamadi
  • ۰
  • ۰

افزایش امنیت ، بینش و ادغام DBaaS در پلت فرم برنامه DigitalOcean

ورود به سایت

مشاغل به طور فزاینده ای به دنبال راهی هستند تا برنامه های خود را سریعتر به بازار عرضه کنند. پلتفرم برنامه DigitalOcean با ارائه یک راه حل کاملاً مدیریت شده که به شما کمک می کند برنامه های خود را بسازید ، مستقر و مقیاس بندی کنید ، به آن نیازها آدرس می دهد. شما می توانید برنامه ها را به سادگی با اشاره به repo GitHub یا GitLab خود مستقر کنید ، و App Platform وظایف سنگین مدیریت زیرساخت ، زمان اجرای برنامه و سایر وابستگی ها را انجام می دهد.

برنامه های خود را به صورت امن به پایگاه های داده مدیریت شده به عنوان منابع قابل اعتماد متصل کنید

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

با افتخار اعلام می کنیم که اکنون می توانید برنامه های خود را که به طور امن بر روی App Platform ساخته شده اند به پایگاه های مدیریتی DigitalOcean به عنوان منابع قابل اعتماد متصل کنید. افزودن برنامه به عنوان یک منبع قابل اعتماد ، یک اتصال امن به پایگاه داده ایجاد می کند که ترافیک را فقط از برنامه می پذیرد و دیگر اتصالات خصوصی و عمومی را رد می کند و پایگاه داده شما را ایمن تر می کند. به طور مشابه ، اگر پایگاه داده مدیریت شده موجود شما منابع معتبری را فعال کرده باشد ، برنامه به طور خودکار به عنوان یک منبع قابل اعتماد اضافه می شود. این ویژگی برای پایگاه های مدیریتی Redis ، MySQL و PostgreSQL موجود است و به زودی برای Managed MongoDB اضافه می شود

با هشدارها و نظارت ، دید بهتری در برنامه های خود به دست آورید

هنگام ایجاد و نگهداری برنامه ها ، اعلانات مربوط به وضعیت برنامه شما می تواند به شما در کاهش سریع مشکلات کمک کند. دید واضح از وضعیت و سلامت برنامه های شما نیز به شما کمک می کند تا بهره وری بیشتری داشته باشید ، زیرا دیگر نیازی به استخراج گزارش ها ندارید تا بفهمید چرا برنامه شما آنطور که انتظار می رود کار نمی کند. خوشحال می شویم اعلام کنیم که قابلیت هشدار و نظارت را به App Platform اضافه کرده ایم تا بتوانید از وضعیت برنامه های خود مطلع شوید و مشکلات را سریع حل کنید. سیاست های هشدار پیش فرض DigitalOcean به شما در مورد نحوه استقرار و پیکربندی دامنه برنامه های شما اطلاع می دهد ، همانطور که در تصویر زیر نشان داده شده است.

خط مشی های پیش فرض هشدار

می توانید اعلان ها را از طریق ایمیل یا Slack دریافت کنید. همچنین می توانید خط مشی های هشدار جدیدی اضافه کنید که بر اساس شرایطی که تعیین کرده اید ، فعال می شوند.

ادغام بستر برنامه با MongoDB مدیریت شده

در ماه ژوئن ، ما DigitalOcean Managed MongoDB را راه اندازی کردیم – یک پایگاه داده کاملاً مدیریت شده به عنوان سرویس برنامه های مدرن. پلتفرم برنامه به صورت یکپارچه با Managed MongoDB ادغام می شود و به شما این امکان را می دهد که MongoDB مدیریت شده را به عنوان پشتیبان برنامه خود انتخاب کنید. می توانید هنگام ایجاد برنامه خود با استفاده از App Platform ، یک خوشه MongoDB مدیریت شده را بچرخانید یا MongoDB را به برنامه ای که قبلاً ایجاد کرده اید متصل کنید. در اینجا یک ویدیو عالی وجود دارد که نشان می دهد چگونه می توانید از Managed MongoDB با برنامه های App Platforms استفاده کنید.

انعطاف پذیری بیشتری برای استقرار برنامه های خود با پشتیبانی از monorepos

monorepo یک مخزن واحد است که کد بسیاری از پروژه های مختلف را ذخیره می کند. توسعه دهندگان اغلب از monorepos برای استفاده مجدد از کد ، مدیریت وابستگی ها ، بهینه سازی ساختارها و همکاری موثر در بین تیم ها استفاده می کنند. ما مفتخریم اعلام کنیم که Platform App در حال حاضر از استقرار برنامه های مختلف پشتیبانی می کند که همه در یک مخزن واحد git (monorepo) قرار دارند. هر یک از این برنامه ها ممکن است در پوشه جداگانه ای در repo قرار داشته باشند. این به کاهش زمان لازم برای توسعه و استقرار برنامه ها کمک می کند و توسعه دهندگان را کارآمدتر و پربارتر می کند. این ویدئو را ببینید تا این قابلیت را در عمل ببینید.

ادغام بستر برنامه با Stackbit

Stackbit یک پلتفرم است که به شما امکان می دهد در سایت های Jamstack همکاری کنید ، و تیم خود را قادر می سازد تا به جای برخورد با Markdown ، git یا نوشتن کد ، آنها را بصری ویرایش کند. شما می توانید از مزایای Jamstack ، از جمله عملکرد بهتر ، امنیت بیشتر ، هزینه کمتر و مقیاس پذیری بیشتر ، همراه با راحتی ویرایش بصری داخلی استفاده کنید. اکنون می توانید به راحتی سایت های خود را که بر روی Stackbit to App Platform ساخته شده منتشر کرده و از پلتفرم کاملاً مدیریت شده استفاده کنید.

:DBaaSMongoDBStackbitپلتفرمپلتفرمStackbitسرورسرورمجازی ،vps ، خرید سرور ،فروش سرور 

  • behnam gol mohamadi
  • ۰
  • ۰

نیمبلا (Nimbella) به خانواده DigitalOcean می پیوندد

ورود به سایت

خوشحال می شوم به اشتراک بگذارم که امروز صبح اعلام کردیم که Nimbella ، ارائه دهنده پلت فرم بدون سرور را خریداری کرده ایم. افزودن قابلیت های بدون سرور نیمبلا مکمل ارائه خدمات Infrastructure-as-a-Service (IaaS) و Platform-as-a-Service (PaaS) از DigitalOcean خواهد بود. این امر در نهایت با حفظ سادگی تجربه محصول و پیش بینی قیمت که DigitalOcean به آن معروف است ، انتخاب بیشتری را در اختیار سازندگان برنامه قرار می دهد.

ظهور بدون سرور

محاسبات بدون سرور یک روند رایج در توسعه برنامه های ابری است و مزایای زیادی را برای توسعه دهندگان و تیم های سازنده نرم افزار نوید می دهد. برخی از این مزایا ، رهایی از مدیریت سرور ، مقیاس آنی بی نهایت و پرداخت تنها برای آنچه استفاده می کنید است. با این حال ، پذیرش فناوری های بدون سرور می تواند بهایی داشته باشد – تطبیق برنامه های موجود با معماری بدون سرور دشوارتر است ، سیستم عامل های بدون سرور فعلی در درجه اول از حجم کاری بدون حالت پشتیبانی می کنند و مدل های قیمت گذاری به سختی قابل درک هستند و می توانند با قبض های غیر منتظره شما را شگفت زده کنند.

چرا نیمبلا (Nimbella)؟

نیمبلا یک پلتفرم متمایز از ابتدا ایجاد کرده است که نه تنها مشکلات فوق را برطرف می کند بلکه پیاده سازی بدون سرور مبتنی بر استانداردهای باز مدرن را نیز ارائه می دهد که بر روی Kubernetes کار می کند در حالی که همه پیچیدگی های آن را پنهان می کند. نیمبلا نیازهای برنامه های کاربردی مبتنی بر رویداد ، برنامه های طولانی مدت ، حجم کاری حالت دار و موارد استفاده پیچیده تر که از هوش مصنوعی و یادگیری ماشین استفاده می کند را برطرف می کند. این امر باعث می شود محاسبات بدون سرور برای توسعه دهندگان و مشاغل کوچک که برنامه های کاربردی را ایجاد می کنند در دسترس تر باشد. در نتیجه ، نیمبلا به عنوان یک مجری قوی در The Forrester Wave form: Function-As-A-Service Platforms ، Q1 2021 معرفی شد.

تیم بنیانگذار نیمبلا ، آنشو آگاروال ، رودریک ربا و اریک سیلدنز ، دارای تخصص محصول و تکنیک بالایی در ساخت و راه اندازی سیستم های توزیع شده در مقیاس بزرگ هستند. رودریک همچنین یکی از همکاران و همکار فنی اصلی Apache OpenWhisk است ، یک پلت فرم محاسباتی بدون سرور پیشرفته و آماده تولید مبتنی بر منبع. این اختصاص به منبع باز و همسویی با سادگی به همین دلیل است که ما خوشحال می شویم از تیم و فناوری نیمبلا در جامعه DigitalOcean استقبال کنیم.

DigitalOceanNimbellaبدون سرورپلتفرمسرورسرور پیشرفتهسرور نیمبلاسرورمجازیمدیریت سرور

  • behnam gol mohamadi
  • ۰
  • ۰

 نحوه ایجاد و مقیاس بندی مشاغل تجارت الکترونیک در اینترنت

ورود به سایت

سال 2020 در همه صنایع یک سال چالش برانگیز بود زیرا مشاغل خود را با کار از راه دور سازگار کردند ، بخشهایی مانند گردشگری متوقف شد و اقتصادهای جهان تحت تأثیر COVID-19 قرار گرفتند. یکی از بخشهایی که بیشتر تحت تأثیر قرار گرفت خرده فروشی بود ، زیرا فروشگاهها در بسیاری از مناطق مجبور به توقف یا محدود کردن خریدهای شخصی و تغییر جهت خرید آنلاین شدند. با وجود چالش های پیش روی بخش خرده فروشی ، افزایش تجارت الکترونیک به بسیاری از مشاغل اجازه زنده ماندن داد و پیش بینی می شود که رشد خود را تا سال 2021 ادامه دهد.

DigitalOcean ده ها هزار مشتری دارد از جمله JIJI و Centra که مشاغل تجارت الکترونیک را اداره می کنند. در این پست ، ما نحوه استفاده کسب و کارهای تجارت الکترونیک از سرویس هایی مانند DigitalOcean Managed Databases ، Kubernetes و Droplets را برای تقویت رشد آنها به اشتراک می گذاریم.

چالش قیمت گذاری پویا

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

برنامه های قیمت گذاری پویا که در Angular یا JavaScript برای چارچوب های تجارت الکترونیک منبع باز ساخته شده اند ، برخی از تداوم مشتاق تیم های توسعه و در نهایت برای مصرف کنندگان را فراهم می کند. به طور مشابه ، داده های قیمت گذاری تاریخی باید برای تجزیه و تحلیل حفظ شوند ، به طور ایده آل در پایگاه داده MySQL یا PostgreSQL (می توانید آموزش جامعه ما را در زمینه مقابله با یک مشکل مشابه بخوانید). تسهیل زندگی برای توسعه دهندگان همیشه برای یک تجارت خوب است و به ویژه برای مشاغل کوچک که سعی در مدیریت داده های خود دارند صادق است.

علاوه بر مدیریت داده ها ، هر ابزاری برای بنیانگذاران مشتاق به توانایی ایجاد بینش های کاربردی از داده های قیمت گذاری تاریخی نیاز دارد. این جایی است که یک پلت فرم هوشمند رقابتی در زمان واقعی مانند Bungee Tech می تواند مفید باشد. آنها به بیش از 180 مشتری کمک کرده اند تا تصمیمات بلادرنگ را در مورد قیمت گذاری بگیرند تا فروش در حال اجرا بر روی قطرات DigitalOcean ایجاد شود. Bungee Tech با بیش از نیم میلیارد نقطه داده سروکار دارد ، داده های جدیدی که روزانه جمع آوری می شوند. این که بتوانید داده ها را در مقیاس وسیع به دست آورید و پیش بینی و تجزیه و تحلیل را بر روی همه داده ها انجام دهید ، یک چالش واقعی است. DigitalOcean توانست چالش را پیش ببرد و همه بارهای کاری خود را در مقیاس بزرگ اداره کند.

مدیریت موجودی خرده فروشی خود

برای ماندن در تجارت و فروش خود ، مهم است که مشاغل خرده فروشی بدانند چه موجودی دارند و وب سایت خود را با آخرین اطلاعات موجودی به روز کنند – و این برای استارتاپ های تجارت الکترونیک بسیار مهم است که زود هنگام راه حل برنامه ریزی منابع سازمانی (ERP) را اتخاذ کنند. کمک به برنامه ریزی موجودی و کار با مشتریان.

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

در گذشته ، یک ابزار ERP قوی با عملکرد گسترده مانند این بسیار گران بود ، اما خدماتی مانند ZincAPI راه حل های ERP را برای مشاغل کوچک در دسترس قرار داده است. روی نرم افزار ایجاد لیست ، مدیریت موجودی ، قیمت گذاری مجدد و نرم افزارهای تحقق را ایجاد می کند. خدمات آنها بیش از 5،000 سفارش در روز پردازش می کند تا به مشتریان امکان خرید هر چیزی از خرده فروشان آنلاین اصلی مانند آمازون و والمارت با یک درخواست POST را بدهند. استارتاپ هایی که ترجیح می دهند از ابزار ERP خود استفاده کنند ، حتی می توانند از نصب ERPNext با یک کلیک DigitalOcean استفاده کنند.

تجزیه و تحلیل داده ها برای تجارت الکترونیکی

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

تجارت الکترونیک دارای انتخاب گسترده ای از ارائه دهندگان میزبانی است که می توانند برای چنین خدماتی انتخاب کنند ، هر کدام نقاط قوت و ضعف خود را دارند. انتخاب ارائه دهنده ای که نقاط قوت آن برای کسب و کار شما خوب باشد می تواند برای تیم تغییر ایجاد کند. ارائه دهندگان کلید در دست مانند Shopify ممکن است به عنوان یک نقطه ورود عالی برای خدمات رسانی به مشتریان از طریق تجارت الکترونیکی عمل کنند ، اما اغلب با محدودیت همراه هستند یا ممکن است برای توسعه کامل یک فروشگاه به خرید خدمات برتر نیاز داشته باشند. راه حل های سفارشی تر ، مانند برنامه های سفارشی وب پیشرفته GoMage برای Magento ، می تواند اطمینان حاصل کند که فروشگاه برای اطمینان از برآوردن نیازهای فعلی و همچنین زمینه سازی برای رشد آینده فروشگاه شما ایجاد شده است.

یک استراتژی کلیدی برای بازسازی فروش ، ترغیب مشتریان به بازگشت پویا است. غول های تجارت الکترونیک می توانند اعلان های “دوباره خرید کنید” را ارائه دهند یا توصیه هایی مشابه خریدهای قبلی نشان دهند. به طور کلی ، کار با داده های فروش راز جذب مشاغل است.

قدرت تجزیه و تحلیل موفقیت آمیز داده های فروش ، توانایی ایجاد بینش هایی است که باعث فروش بیشتر می شود و سپس شستشو ، تکرار و تکرار می شود. این نوع تجزیه و تحلیل می تواند بین امید به موفقیت در تجارت الکترونیک و رشد در مقیاس بزرگ تفاوت ایجاد کند.

با ابزارهای پشتیبانی شده توسط DigitalOcean ، تجارت الکترونیک خود را ایجاد کنید

ما از مشاغل تجارت الکترونیک مانند Bungee Tech ، Zinc.io و GoMage در هر مرحله از توسعه خود با ابزارهای DigitalOcean از جمله پایگاه داده های مدیریت شده و Droplets پشتیبانی کرده ایم. از بین دانش آموزان جوان که در طول Hacktoberfest با ایده ها مشورت می کردند ، بنیان گذاران فنی تازه کار پذیرش برنامه راه اندازی Hatch ما ، شرکت های فناوری تأثیر اجتماعی با Hollie’s Hub for Good و ارائه دهندگان بزرگ SaaS را ارائه کردند


DigitalOcean Managed DatabasesDropletsERPKubernetesvpsتجارت الکترونیکسرورمجازی 

میزبانی هاست، 

 

 

 

 

 

 

 

 

  • behnam gol mohamadi