Во многих организациях, включая электронную коммерцию B2C, при написании кода, который масштабирует клиентов в веб-браузере, выбор структур данных не очень хорош. Манипуляции с DOM и операции на стороне клиента стоят дорого! Любые большие операции, которые вы пишете/выполняете/запрашиваете непосредственно в веб-браузере с помощью javascript, являются дорогостоящими.
Скажем, например, выбор структуры данных корзины покупок, содержащей множество элементов, которые требуют частого обновления/добавления/удаления.
Вместо того чтобы структурировать данные корзины как список товаров, как показано ниже, —
{
"headers": [
"name",
"quantity",
"price"
],
"items": [
{
"id": "1232ewr2",
"name": "Inoculation",
"quantity": "1",
"price": "20",
"sku": "432EGFE"
},
{
"id": "e632r32",
"name": "Pulp Fiction",
"quantity": "3",
"price": "5",
"sku": "432ERFE"
},
...
],
"total": 35
}
Вы можете использовать —
{
"headers": [
"name",
"quantity",
"price"
],
"items": {
"1232ewr2": {
"name": "Inoculation",
"quantity": "1",
"price": "20",
"sku": "432EGFE"
},
"e632r32": {
"name": "Pulp fiction",
"quantity": "3",
"price": "5",
"sku": "432ERFE"
},
...
},
"total": 35
}
Если наблюдать критически и думать, есть несколько наблюдений, которые определяют возможности использования и улучшения временных ограничений в веб-браузере.
-
Поиск товара в корзине занимает — O(1) вместо O(N).
-
Обновление количества (добавление/удаление) товара в корзине занимает O(1) вместо O(N).
-
Удаление товара из корзины занимает O(1) вместо O(N).
Для частого добавления/удаления/обновления элементов — ассоциативные контейнеры, такие как карты, более удобны, чем линейные структуры данных, например, массивы/связанные списки.
Например, при работе с крупномасштабными геопространственными данными, повторяющимися данными, содержащими метаданные, и хранении набора фиксированных ключевых слов или тегов, на которые часто ссылаются.
Поэтому не спешите анализировать свою проблему, сначала определите основные операции, которые должны поддерживаться, и, наконец, выберите правильную структуру данных, чтобы количественно оценить ограничения ресурсов для каждой операции.