لینوکس

درک Objectهای Map و Set در JavaScript

در JavaScript ، توسعه دهندگان اغلب وقت زیادی را صرف تصمیم گیری در مورد ساختار صحیح داده برای استفاده از آن ها می کنند. این امر به این دلیل است که انتخاب ساختار داده صحیح می تواند بعداً دستکاری آن داده ها را آسانتر کند ، باعث صرفه جویی در وقت و تفسیر آسان تر کد میشود. دو ساختار داده غالب برای ذخیره سازی مجموعه داده ها Objects و Arrays (نوعی Object) هستند. توسعه دهندگان برای ذخیره لیست های فهرست بندی شده از Objects استفاده می کنند. با این حال ، برای ارائه انعطاف پذیری بیشتر به توسعه دهندگان ، مشخصات ECMAScript 2015 دو نوع جدید از Objects قابل تکرار را معرفی کرد: maps ، که به آنها مجموعه ای از جفت های کلید / مقدار سفارش داده می شود ، و sets ، که مجموعه ای از مقادیر منحصر به فرد هستند.
در این مقاله به سراغ مباحث Map و Set می رویم ، چه چیزی آنها را به Objects و Arrays شبیه یا متفاوت می کند ، ویژگی ها و روش های در دسترس برای آنها ، و نمونه هایی از کاربردهای عملی.
maps
Map مجموعه ای از جفت کلیدها / مقدارهایی است که می تواند از هر نوع داده به عنوان کلید استفاده کند و می تواند ترتیب ورودی های آن را حفظ کند. Mapها هم عناصر Objects (یک مجموعه جفت کلید /مقدار منحصر به فرد) و هم Arrays (یک مجموعه مرتب شده) را دارند ، اما از نظر مفهومی بیشتر به Objectها شباهت دارند. دلیل این است که ، گرچه اندازه و ترتیب ورودی ها مانند یک Array حفظ می شود ، اما خود ورودی ها دارای جفت کلیدها و مقدار مانند Objects هستند.
Map ها را می توان با دستور new Map() مقدار اولیه داد:
const map = new Map()

این یک map خالی به ما می دهد:
Output
Map(0) {}

افزودن مقادیر به یک map
با روش set() می توانید مقادیر را به map اضافه کنید. اولین آرگومان کلید خواهد بود ، و آرگومان دوم مقدار خواهد بود.
در زیر سه جفت کلید / مقدار به map اضافه می شود:
map.set(‘firstName’, ‘Luke’)
map.set(‘lastName’, ‘Skywalker’)
map.set(‘occupation’, ‘Jedi Knight’)

در اینجا می بینیم که چگونه Maps عناصری از Objects و Arrays را دارند. مانند یک Array ، یک مجموعه دارای فهرست صفر داریم و همچنین می توانیم بطور پیش فرض تعداد موارد موجود در map را مشاهده کنیم. map ها از علامت => syntax برای نشان دادن جفت های کلید / مقدار به صورت key => value استفاده می کنند:
Output
Map(3)
0: {“firstName” => “Luke”}
1: {“lastName” => “Skywalker”}
2: {“occupation” => “Jedi Knight”}

این مثال شبیه به یک object معمولی با کلیدهای مبتنی بر رشته به نظر میرسد ، اما می توانیم از هر نوع داده به عنوان کلید با map استفاده کنیم.
علاوه بر تنظیم دستی مقادیر روی map ، می توانیم به map مقدار اولیه نیز بدهیم . این کار را با استفاده از یک آرایه ای از آرایه ها که حاوی دو عنصر است نیز میتوان انجام دهیم که هر یک جفت کلید / مقدار هستند و شبیه زیر خواهد بود :
[ [ ‘key1’, ‘value1’], [‘key2’, ‘value2’] ]
Copy

با استفاده از دستور زیر می توانیم همان map را دوباره ایجاد کنیم:
const map = new Map([
[‘firstName’, ‘Luke’],
[‘lastName’, ‘Skywalker’],
[‘occupation’, ‘Jedi Knight’],
])

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

اتفاقاً ، این ترکیب همان نتیجه فراخوانی Object.entries () در یک Object است. همانطور که در بلوک کد زیر نشان داده شده ، روشی آماده برای تبدیل یک object به map فراهم می کند:
const luke = {
firstName: ‘Luke’,
lastName: ‘Skywalker’,
occupation: ‘Jedi Knight’,
}

const map = new Map(Object.entries(luke))

از طرف دیگر ، می توانید یک map را با یک خط کد به یک object یا یک آرایه برگردانید.
دستور زیر map را به یک object تبدیل می کند:
const obj = Object.fromEntries(map)
Copy

به مقدار obj زیر منجر می شود:
Output
{firstName: “Luke”, lastName: “Skywalker”, occupation: “Jedi Knight”}

اکنون ، بیایید یک map را به یک آرایه تبدیل کنیم:
const arr = Array.from(map)
Copy

این دستور منجر به آرایه زیر برای arr خواهد شد:
Output
[ [‘firstName’, ‘Luke’],
[‘lastName’, ‘Skywalker’],
[‘occupation’, ‘Jedi Knight’] ]

کلیدهای map
map ها هر نوع داده را به عنوان یک کلید قبول می کنند ، و اجازه نمی دهند مقادیر کلیدی کپی شوند. ما می توانیم با ایجاد یک map و استفاده از مقادیر غیر رشته ای به عنوان کلید ، و همچنین تنظیم دو مقدار روی یک کلید ، این عمل را نشان دهیم.
ابتدا ، بگذارید یک map را با کلیدهای بدون رشته تنظیم کنیم:
const map = new Map()

map.set(‘1’, ‘String one’)
map.set(1, ‘This will be overwritten’)
map.set(1, ‘Number one’)
map.set(true, ‘A Boolean’)

این مثال ، کلید اول 1 را با کلید بعدی لغو خواهد شد و رشته “1” و عدد 1 را به عنوان کلیدهای منحصر به فرد در نظر میگیرد:
Output
0: {“1” => “String one”}
1: {1 => “Number one”}
2: {true => “A Boolean”}

اگرچه این عقیده رایج است که یک Object معمولی JavaScript می تواند شماره ها ، بولین ها (متغیرهای دوبایتی) و سایر انواع داده های ابتدایی را به عنوان کلید مدیرت کند ، اما در واقع اینگونه نیست ، زیرا objectها همه کلیدها را به رشته تغییر می دهند.
به عنوان نمونه ، یک Object را با یک کلید عددی تنظیم کنید و مقدار یک کلید عددی 1 و یک کلید رشته ای “1” را با هم مقایسه کنید:
// Initialize an object with a numerical key
const obj = { 1: ‘One’ }

// The key is actually a string
obj[1] === obj[‘1’] // true

به همین دلیل اگر سعی کنید از یک Object به عنوان کلید استفاده کنید ، در عوض رشته object Object را چاپ می کند.
به عنوان نمونه ، یک Object ایجاد کنید و سپس آن را به عنوان کلید یک Object دیگر استفاده کنید:
// Create an object
const objAsKey = { foo: ‘bar’ }

// Use this object as the key of another object
const obj = {
[objAsKey]: ‘What will happen?’
}

منجر به خروجی زیر میشود:
Output
{[object Object]: “What will happen?”}

که شبیه حالت Map نیست. سعی کنید یک Object ایجاد کنید و آن را به عنوان کلید map تعیین کنید:
// Create an object
const objAsKey = { foo: ‘bar’ }

const map = new Map()

// Set this object as the key of a Map
map.set(objAsKey, ‘What will happen?’)

کلید عنصر Map اکنون Object ای است که ما ایجاد کرده ایم.
Output
key: {foo: “bar”}
value: “What will happen?”

نکته مهم در مورد استفاده از یک Object یا Array به عنوان یک کلید این است: map از مرجع Object برای مقایسه برابری استفاده ، نه مقدار واقعی Object . در JavaScript، {} === {} خروجی false را باز می گرداند ، زیرا دو Object با وجود یک مقدار (خالی) یکسان نیستند.
این بدان معنی است که با اضافه کردن دو Object منحصر به فرد با یک مقدار مشابه ، map ای با دو ورودی ایجاد می کنید:
// Add two unique but similar objects as keys to a Map
map.set({}, ‘One’)
map.set({}, ‘Two’)

خروجی زیر را به دست میدهد:
Output
Map(2) {{…} => “One”, {…} => “Two”}

اما با استفاده از همان مرجع Object دو بار map را با یک ورودی ایجاد می کنید.
// Add the same exact object twice as keys to a Map
const obj = {}

map.set(obj, ‘One’)
map.set(obj, ‘Two’)

که منجر به خروجی زیر خواهد شد:
Output
Map(1) {{…} => “Two”}

set() دوم ابتدا همان کلید دقیقا مشابه را به روزرسانی میکند، بنابراین ما به یک map می رسیم که فقط یک مقدار دارد.
دریافت و حذف آیتم ها از map
یکی از مضرات کار با Objects اینست که شمارش آنها یا کار با همه کلیدها یا مقادیر دشوار است. در عوض ، ساختار Map دارای ویژگی های داخلی زیادی است که کار با عناصر آنها را مستقیم تر می کند.
ما می توانیم یک map جدید را برای نشان دادن روشها و خصوصیات زیر مقداردهی کنیم: delete(), has(), get(), و  size
// Initialize a new Map
const map = new Map([
[‘animal’, ‘otter’],
[‘shape’, ‘triangle’],
[‘city’, ‘New York’],
[‘country’, ‘Bulgaria’],
])

برای بررسی وجود یک مورد در map از روش has () استفاده کنید. has() یک متغیر بولین را برمی گرداند.
// Check if a key exists in a Map
map.has(‘shark’) // false
map.has(‘country’) // true

برای بازیابی مقدار با کلید از روش get () استفاده کنید.
// Get an item from a Map
map.get(‘animal’) // “otter”

یکی از مزایای خاص Maps نسبت به objects ، این است که می توانید اندازه یک map را ، مانند یک آرایه در هر زمان پیدا کنید. می توانید تعداد آیتم ها را در یک map با ویژگی size  دریافت کنید. این کار شامل مراحل کمتری نسبت به تبدیل یک object به یک آرایه برای یافتن طول خواهد بود.
// Get the count of items in a Map
map.size // 4

برای حذف یک مورد از map با کلید از روش delete() استفاده کنید. اگر یک مورد وجود داشته باشد و حذف شود ، این روش یک حالت بولین true را بازمیگرداند و اگر با هیچ مورد مطابقت نداشته باشد ، false را نمایش میدهد.
// Delete an item from a Map by key
map.delete(‘city’) // true

این دستور منجر به map زیر خواهد شد:
Output
Map(3) {“animal” => “otter”, “shape” => “triangle”, “country” => “Bulgaria”}

سرانجام ، تمام مقادیر یک map با کل map.clear()حذف میشود.
// Empty a Map
map.clear()

این خروجی را خواهید گرفت:
Output
Map(0) {}

کلیدها ، مقادیر و ورودی ها برای map ها
Object ها می توانند با استفاده از ویژگی های سازنده Object ، کلیدها ، مقادیر و ورودی ها را بازیابی کنند. از طرف دیگر map ها دارای نمونه های اولیه هستند که به ما امکان می دهند مستقیماً کلیدها ، مقادیر و ورودی های نمونه map را بدست آوریم.
روش هایkeys(), values(),  entries() همه MapIterator را برمی گردانند ، که شبیه به یک Array است که می توانید در آن از for…of برای ایجاد حلقه بین مقادیر استفاده کنید.
در اینجا مثال دیگری از Map وجود دارد که می توانیم برای نشان دادن این روشها استفاده کنیم:
const map = new Map([
[1970, ‘bell bottoms’],
[1980, ‘leg warmers’],
[1990, ‘flannel’],
])

روش keys() کلیدها را برمی گرداند:
map.keys()
Output
MapIterator {1970, 1980, 1990}

روش values() مقادیر را برمی گرداند:
map.values()
Output
MapIterator {“bell bottoms”, “leg warmers”, “flannel”}

روش entries() آرایه ای از جفت کلید ها/ مقدار را برمی گرداند:
map.entries()
Output
MapIterator {1970 => “bell bottoms”, 1980 => “leg warmers”, 1990 => “flannel”}

تکرار با map
map دارای یک روش داخلی forEach  ، شبیه به یک Array ، برای تکرار داخلی است. با این حال ، تفاوتی در چیزی که تکرار می کنند وجود دارد. callback برای هر forEach در map حول value ، key و خود map تکرار انجام میدهد ، در حالی که نسخه Array در خود item ، index و خود array  تکرار می شود.
// Map
Map.prototype.forEach((value, key, map) = () => {})

// Array
Array.prototype.forEach((item, index, array) = () => {})

این یک مزیت بزرگ برای Maps نسبت به Objects است ، زیرا Objects باید با keys(), values(), یا entries() تبدیل شوند و یک روش ساده برای بازیابی ویژگی های یک Object بدون تبدیل آن وجود ندارد.
برای نشان دادن این مسئله ، اجازه دهید از طریق map خود تکرار انجام دهیم و زوج های کلید / مقدار را در کنسول ثبت کنیم:
// Log the keys and values of the Map with forEach
map.forEach((value, key) => {
console.log(`${key}: ${value}`)
})

خروجی زیر را می دهد:
Output
1970: bell bottoms
1980: leg warmers
1990: flannel

از آنجا که حلقه for…of برای تکرار مواردی مانند map و Array وجود دارد ، می توانیم با تجزیه آرایه آیتم های map نتیجه مشابه را بدست آوریم:
// Destructure the key and value out of the Map item
for (const [key, value] of map) {
// Log the keys and values of the Map with for…of
console.log(`${key}: ${value}`)
}

ویژگی ها و روش های map
جدول زیر لیستی از ویژگی ها و روشهای map برای ارجاع سریع را نشان میدهد:
ویژگی ها/روشها توصیف خروجی
set(key, value) یک جفت کلید/مقدار را به map وارد میکند Map Object
delete(key) یک جفت کلید/مقدار را از map حذف میکند Boolean
get(key) یک مقدار را با کلید برمیگرداند مقدار
has(key) با کلید وجود یک عنصر در map را بررسی میکند داده دو بایتی
clear() تمام آیتم ها را از map حذف میکند N/A
keys() تمام کلیدها در map را بازمیگرداند MapIterator object
values() تمام مقادیر در map را بازمیگرداند MapIterator object
entries() تمام کلیدها و مقادیر در map را به صورت [key, value] بازمیگرداند MapIterator object
forEach() به ترتیب الحاقی در map تکرار میشود N/A
size تعداد آیتم ها در map را بازمیگرداند عدد

چه موقع از map استفاده کنیم
به طور خلاصه ، map ها از نظر جفت های کلید و مقدار مانند objectها هستند ، اما map ها چندین مزیت نسبت به objectها دارند:
اندازه – map ها یک ویژگی size  دارند ، در حالی که objectها برای بازیابی اندازه خود روش داخلی ندارند.
تکرار- map ها مستقیماً قابل تکرار هستند ، در حالی که objectها اینگونه نیستند.
انعطاف پذیری – map ها می توانند از هر نوع داده (اولیه یا object) به عنوان کلید یک مقدار برخوردار باشند ، در حالی که object ها فقط می توانند دارای رشته باشند.
ترتیب – map ها ترتیب درج خود را حفظ می کنند ، در حالی که object ها نظم تضمینی ندارند.
با توجه به این عوامل ، map ها یک ساختار داده قدرتمند هستند که باید مورد توجه قرار گیرند. با این حال ، object ها نیز برخی مزایای مهم دارند:
JSON – objectها بی پروا با JSON.parse () و JSON.stringify () کار می کنند ، دو عملکرد اساسی برای کار با JSON ، یک فرمت داده مشترک که بسیاری از REST APIها با آن سر و کار دارند.
کار با یک عنصر واحد – هنگام کار با یک مقدار شناخته شده در Object ، بدون نیاز به استفاده از یک روش ، مانند ویژگی get() در Map ، می توانید مستقیماً به آن دسترسی داشته باشید.
این لیست به شما کمک می کند تصمیم بگیرید که یک Map یا Object ساختار داده مناسب برای مورد استفاده شما باشد.
set
set مجموعه ای از مقادیر منحصر به فرد است. بر خلاف map ، یک set از نظر مفهومی بیشتر شبیه به یک Array است تا یک Object ، زیرا لیستی از مقادیر است و نه جفت کلید / مقدار. با این حال ، set جایگزینی برای Arrays نیست ، بلکه یک مکمل برای ارائه پشتیبانی بیشتر برای کار با داده های کپی شده میباشد.
می توانید set ها را با ترکیب new Set() مقدار دهی کنید.
const set = new Set()

این set خالی به ما می دهد:
Output
Set(0) {}

با استفاده از روش add () موارد را می توان به set اضافه کرد. (نباید این را با روش set() موجود در map اشتباه گرفت ، اگرچه مشابه هستند).
// Add items to a Set
set.add(‘Beethoven’)
set.add(‘Mozart’)
set.add(‘Chopin’)

از آنجا که set ها فقط می توانند حاوی مقادیر منحصر به فرد باشند ، هرگونه تلاش برای افزودن مقداری که از قبل وجود دارد ، نادیده گرفته می شوند.
set.add(‘Chopin’) // Set will still contain 3 unique values

توجه: همان مقایسه برابری که برای کلیدهای Map کاربرد دارد برای موارد set نیز اعمال می شود. دو object که دارای مقدار یکسانی هستند اما دارای یک مرجع یکسان نیستند برابر نخواهند بود.

همچنین می توانید set ها را با یک آرایه از مقادیر مقداردهی کنید. اگر مقادیر تکراری در آرایه وجود داشته باشد ، آنها از set حذف می شوند.
// Initialize a Set from an Array
const set = new Set([‘Beethoven’, ‘Mozart’, ‘Chopin’, ‘Chopin’])
Output
Set(3) {“Beethoven”, “Mozart”, “Chopin”}

در مقابل ، یک set را می توان با یک خط کد به یک آرایه تبدیل کرد:
const arr = […set]
Output
(3) [“Beethoven”, “Mozart”, “Chopin”]

set بسیاری از روشها و خصوصیات مشابه map را دارد ، از جمله delete()،  has()،  clear()، و  size.
// Delete an item
set.delete(‘Beethoven’) // true

// Check for the existence of an item
set.has(‘Beethoven’) // false

// Clear a Set
set.clear()

// Check the size of a Set
set.size // 0

توجه داشته باشید که Set راهی برای دستیابی به یک مقدار توسط یک کلید یا فهرست مانند Map.get(key) یا arr[index] ندارد.
کلیدها ، مقادیر و ورودی ها برای set ها
map و set هر دو دارای eys(), values(), و entries() هستند که یک تکرار کننده را برمی گرداند. با این حال ، در حالی که هر یک از این روشها دارای یک هدف مشخص در Map هستند ، Setها دارای کلید نیستند ، و بنابراین کلیدها یک اسم مستعار برای مقادیر هستند. این بدان معنی است که keys() و values() هر دو همان تکرار کننده ها را برمی گردانند ، و entries() مقدار را دو برابر باز می گردانند. منطقی ترین کار این است که را فقط از values() با set استفاده شود ، زیرا دو روش دیگر برای تناسب و سازگاری متقابل با Map هستند.
const set = new Set([1, 2, 3])
// Get the values of a set
set.values()
Output
SetIterator {1, 2, 3}

تکرار با set
مانند Map ، Set یک متد داخلی forEach() دارد. از آنجا که Setها کلید ندارند ، اولین و دومین پارامتر callback برای forEach() همان مقدار یکسان را برمیگرداند ، بنابراین هیچ مورد استفاده ای خارج از سازگاری با Map وجود ندارد. پارامترهای forEach () عبارتند از (value, key, set)
هم forEach() و هم for…of می توانند در set استفاده شوند. ابتدا ، تکرار forEach() را مشاهده کنیم:
const set = new Set([‘hi’, ‘hello’, ‘good day’])

// Iterate a Set with forEach
set.forEach((value) => console.log(value))

سپس می توانیم نسخه for…of را بنویسیم:
// Iterate a Set with for…of
for (const value of set) {
console.log(value);
}

هر دو روش خروجی زیر را به دست میدهد:
Output
hi
hello
good day

ویژگی ها و روش های set
در جدول زیر لیستی از ویژگی ها و روش های set برای ارجاع سریع نشان داده شده است:
ویژگی ها/روش ها توصیف خروجی
add(value) آیتم جدیدی را به Set وارد میکند Set Object
delete(value) آیتم مشخصی را از Set حذف میکند Boolean
has() وجود آیتمی را در Set بررسی میکند Boolean
clear() تمام آیتم ها را از Set حذف میکند N/A
keys() تمام مقادیر را به set بازمیگرداند مشابه values() SetIterator object
values() تمام مقادیر را به set برمیگرداند مشابه keys() SetIterator object
entries() تمام مقادیر را به صورت [value, value] به set برمیگرداند SetIterator object
forEach() به ترتیب ورود در set تکرار میشود N/A
size تعداد آیتم ها در set را میدهد Number
زمان استفاده از set
set افزونه مفیدی برای ابزار JavaScript است ، به خصوص برای کار با مقادیر تکراری در داده ها.
در یک خط واحد ، می توانیم یک Array جدید بدون مقادیر تکراری از یک Array ایجاد کنیم که دارای مقادیر تکراری باشد.
const uniqueArray = [ …new Set([1, 1, 2, 2, 2, 3])] // (3) [1, 2, 3]
Copy

خروجی زیر را می دهد:
Output
(3) [1, 2, 3]

set می تواند برای یافتن اجماع ، فصل مشترک و تفاوت بین دو مجموعه داده استفاده شود. با این وجود ، آرایه ها به دلیل داشتن روشهای sort(), map(), filter(), و reduce() و همچنین سازگاری مستقیم با روشهای JSON از مزیت قابل توجهی نسبت به Sets برای دستکاری بیشتر داده ها برخوردار هستند.
نتیجه
در این مقاله ، شما آموختید که یک map مجموعه ای از جفت کلید / مقدار سفارشی است ، و set مجموعه ای از مقادیر منحصر به فرد میباشد. هر دوی این ساختارهای داده قابلیت های بیشتری را به JavaScript اضافه می کنند و به ترتیب کارهای ساده ای مانند یافتن طول مجموعه جفت کلید / مقدار و حذف موارد تکراری از یک مجموعه داده را ساده می کنند. از طرف دیگر ، Objects و Arrays به طور معمول برای ذخیره سازی داده ها و دستکاری در JavaScript مورد استفاده قرار گرفته اند ، و سازگاری مستقیمی با JSON دارند که همچنان آنها را به اساسی ترین ساختار داده ها ، به ویژه برای کار با REST API ها تبدیل می کند. map ها و set ها در درجه اول به عنوان ساختارهای پشتیبانی داده برای Objects و Arrays مفید هستند.
اگر می خواهید در مورد جاوا اسکریپت بیشتر بدانید ، از صفحه اصلی کددهی در مجموعه JavaScript دیدن کنید ، یا به مقاله های مربوط به کد دهی در Node.js مراجعه کنید.

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکاخرید سرور مجازی ارزان هلندvpsخرید vps هلندخرید سرور مجازی آمریکاخرید vps فرانسهتست vpsسرور مجازی تستسرور مجازی ویندوزارزانترین vpsخرید وی پی اسvps ارزان – 


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/