инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это

Каскадная инвалидация кэша. Π§Π°ΡΡ‚ΡŒ 1

Π’ΠΎΡ‚ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΈ каТдая ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ… ΠΊ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°ΠΌΠΈ:

ВсС извСстныС ΠΌΠ½Π΅ срСдства для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ…ΡΡˆΠ° ΠΈΡ… содСрТимого. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простого ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° (Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅):

Π‘Ρ‚ΠΎΠ»ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ подобная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° стала Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ распространённой.

ЭкспСрты Π² сфСрС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π΅Π±-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°ΠΌΠΈ раздСлСния ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ JavaScript-ΠΊΠΎΠ΄ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π°Π½Π΄Π»Ρ‹. Π’Π°ΠΊΠΈΠ΅ Π±Π°Π½Π΄Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ лишь Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² Π½ΠΈΡ… Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΏΠΎ запросу Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

Одним ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… прСимущСств раздСлСния ΠΊΠΎΠ΄Π°, Π² частности, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°ΠΌ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ измСнСния, внСсённыС Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π΅ приводят ΠΊ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша всСго Π±Π°Π½Π΄Π»Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли для npm-ΠΏΠ°ΠΊΠ΅Ρ‚Π°, созданного Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Β«XΒ», Π²Ρ‹ΡˆΠ»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ бСзопасности, ΠΈ ΠΏΡ€ΠΈ этом содСрТимоС node_modules Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ придётся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚, содСрТащий ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, созданныС Β«XΒ».

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΡƒΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли всё это ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ эффСктивности Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ….

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ измСнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² исходного ΠΊΠΎΠ΄Π° ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда приводят ΠΊ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° систСмы сборки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². И это происходит ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ…ΡΡˆΠΈ, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ вСрсии содСрТимого этих Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠ°ΡΠ°ΡŽΡ‰Π°ΡΡΡ вСрсионирования ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ создали ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Π²Π΅Π±-сайт. Π’Ρ‹ воспользовались Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ большая Ρ‡Π°ΡΡ‚ΡŒ JavaScript-ΠΊΠΎΠ΄Π° вашСго сайта загруТаСтся ΠΏΠΎ запросу.

инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это

Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй JavaScript-модуля

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ содСрТимоС Ρ„Π°ΠΉΠ»Π° main измСнилось, имя этого Ρ„Π°ΠΉΠ»Π° Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° зависимостСй.

инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ инвалидация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ это

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π² Π΄Π΅Ρ€Π΅Π²Π΅ зависимостСй, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ повлияло СдинствСнноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· листовых ΡƒΠ·Π»ΠΎΠ² Π΄Π΅Ρ€Π΅Π²Π°

Из этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, сдСланноС всСго лишь Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша 80% Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π±Π°Π½Π΄Π»Π°.

Π₯отя ΠΈ ΠΏΡ€Π°Π²Π΄Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС измСнСния приводят ΠΊ ΡΡ‚ΠΎΠ»ΡŒ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ послСдствиям (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, инвалидация кэша листового ΡƒΠ·Π»Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша всСх ΡƒΠ·Π»ΠΎΠ² Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ, Π½ΠΎ инвалидация кэша ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ каскадной ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, доходящСй Π΄ΠΎ листовых ΡƒΠ»ΠΎΠ²), Π² идСальном ΠΌΠΈΡ€Π΅ Π½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π±Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ инвалидациями кэша.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ нас ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ вопросу: «МоТно Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСимущСства, Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ рСсурсами ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ каскадных ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΉ кэша?Β».

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠ°ΡΠ°ΡŽΡ‰Π°ΡΡΡ Ρ…ΡΡˆΠ΅ΠΉ содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ², находящихся Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², с тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ…ΡΡˆΠΈ находятся Π² ΠΈΠΌΠ΅Π½Π°Ρ…. Она Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эти Ρ…ΡΡˆΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ кэш этих Ρ„Π°ΠΉΠ»ΠΎΠ² инвалидируСтся ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ…ΡΡˆΠ΅ΠΉ Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ зависят.

Как оказалось, сущСствуСт нСсколько способов достиТСния этой Ρ†Π΅Π»ΠΈ:

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ β„–1: ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

ΠšΠ°Ρ€Ρ‚Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° β€” это ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ каскадной ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэшСй. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π»Π΅Π³Ρ‡Π΅ всСго Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Но ΠΎΠ½, ΠΊ соТалСнию, поддСрТиваСтся лишь Π² Chrome (эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π½ΡƒΠΆΠ½ΠΎ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ).

НСсмотря Π½Π° это я Ρ…ΠΎΡ‡Ρƒ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ с рассказа ΠΎ ΠΊΠ°Ρ€Ρ‚Π°Ρ… ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠ²Π΅Ρ€Π΅Π½ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ станСт Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённым. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, описаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΈ особСнности Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ нашСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

ИспользованиС ΠΊΠ°Ρ€Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° для прСдотвращСния каскадной ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… шагов.

▍Шаг 1

НуТно Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±Π°Π½Π΄Π»Π΅Ρ€ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½, ΠΏΡ€ΠΈ сборкС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π» Π±Ρ‹ Ρ…ΡΡˆΠΈ содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΈΡ… ΠΈΠΌΠ΅Π½Π°.

Если ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π² ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ…ΡΡˆΠΈ ΠΈΡ… содСрТимого, Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… модулях Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя Ρ…ΡΡˆΠΈ:

▍Шаг 2

НуТно Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтом, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ rev-hash, ΠΈ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ копию ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ…ΡΡˆ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ Π΅Π³ΠΎ содСрТимого.
ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ эта Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, содСрТимоС Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ присутствуСт ΠΏΠΎ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°):

▍Шаг 3

НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, хранящий свСдСния ΠΎ соотвСтствии ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Ρ…ΡΡˆΠ°, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ, Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ…ΡΡˆ Π΅ΡΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² HTML-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹.

Π­Ρ‚ΠΎΡ‚ JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ являСтся ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ:

ПослС этого всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Ρ„Π°ΠΉΠ»Π°, находящСгося ΠΏΠΎ адрСсу, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π°.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ исходный ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ спокойно ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π½Π΅ содСрТащих Ρ…ΡΡˆΠ΅ΠΉ, Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТат свСдСния ΠΎ вСрсиях ΠΈΡ… содСрТимого. А, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ…ΡΡˆΠ΅ΠΉ Π½Π΅Ρ‚ Π² исходном ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ лишь Π² ΠΊΠ°Ρ€Ρ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°), Ρ‚ΠΎ измСнСния этих Ρ…ΡΡˆΠ΅ΠΉ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ Ρ‚Π΅Ρ…, содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ измСнилось.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ сСйчас Π·Π°Π΄Π°Ρ‘Ρ‚Π΅ΡΡŒ вопросом ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ я создал копию ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ увидят лишь Ρ„Π°ΠΉΠ» /vendor.mjs ΠΈ просто загрузят этот Ρ„Π°ΠΉΠ», поступив Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚, встрСчая ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ конструкции. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈ оказываСтся, Ρ‡Ρ‚ΠΎ Π½Π° сСрвСрС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° Ρ„Π°ΠΉΠ»Π°.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π² дСйствии, Ρ‚ΠΎ Π²ΠΎΡ‚ β€” Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… всС способы Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ каскадной ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, взглянитС Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π° Ρ‚ΠΎΡ‚ случай, Ссли Π²Π°ΠΌ интСрСсно ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ я Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π» ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈ Ρ…ΡΡˆΠΈ вСрсий для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Π—Π½Π°ΠΊΠΎΠΌΠ° Π»ΠΈ Π²Π°ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° каскадной ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

К вопросу ΠΎΠ± ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кСша

ΠŸΠΎΠ»Π½ΠΎΡ‚Π° ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ

Начнём всё ΠΆΠ΅ с ΠΎΠ±Ρ‰ΠΈΡ… сообраТСний Π½Π΅ спСцифичных Π½ΠΈ для SQL-запросов, Π½ΠΈ для ORM. УпомянутыС ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ я ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΠΎΠ»Π½ΠΎΡ‚Π° ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ β€” это Π΅Ρ‘ характСристика, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ насколько часто ΠΈ Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΌΠΎΠΆΠ΅Ρ‚/Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ситуация ΠΊΠΎΠ³Π΄Π° Π² кСшС Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ грязныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ. Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ Ρ‚ΠΎ ΠΊΠ°ΠΊ часто кСш Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· нСобходимости.

Рассмотрим для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° распространённый способ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΎΠ½ практичСски Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ сразу послС измСнСния Π΄Π°Π½Π½Ρ‹Ρ… кСш грязСн. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, врСмя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ кСш остаётся грязным, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ² врСмя ΠΆΠΈΠ·Π½ΠΈ (Ρ‡Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сократит ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ). Π’.Π΅. ΠΏΡ€ΠΈ сокращСнии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ кСша ΠΏΠΎΠ»Π½ΠΎΡ‚Π° ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ΡΡ, Π° ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ΡΡ. Π’ ΠΈΡ‚ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ΡŒ идСальной ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ (Π½ΠΈΠΊΠ°ΠΊΠΈΡ… грязных Π΄Π°Π½Π½Ρ‹Ρ…) ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ Π² 0, ΠΈΠ»ΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ кСш. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ устарСваниС Π΄Π°Π½Π½Ρ‹Ρ… Π² кСшС допустимо. НапримСр, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ Ссли Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ Π² Π±Π»ΠΎΠΊΠ΅ послСдних новостСй появится Ρ‚Π°ΠΌ Π½Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚ ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ вашСй ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΎ с ошибкой Π² ΠΏΠ°Ρ€Ρƒ-Ρ‚Ρ€ΠΎΠΉΠΊΡƒ тысяч.

Π˜Π½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ

Бпособ с ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ…ΠΎΡ€ΠΎΡˆ своСй простотой, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ всСгда ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ. Π§Ρ‚ΠΎ ΠΆ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ кСш ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Одной ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ΄ для Π΅Π³ΠΎ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ORM, Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ (Π² Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ случаС) Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС β€” ΠΏΡ€ΠΈ сохранСнии ΠΌΠΎΠ΄Π΅Π»ΠΈ. НаличиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° измСнСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΡ€ΠΈ большом количСствС Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… запросов ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ всё врСмя Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° всё Π½ΠΎΠ²Ρ‹Π΅ ΠΈ Π½ΠΎΠ²Ρ‹Π΅ строки сброса Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… кусочков кСша. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π° свою Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. ΠŸΠΎΡ€Π° Π΅Ρ‘ ΠΎΡΠ»Π°Π±ΠΈΡ‚ΡŒ.

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ событиями β€” ORM ΠΏΡ€ΠΈ сохранСнии/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ события Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΠΈ Π²Π΅ΡˆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ событиС, ΡƒΠ΄Π°Π»ΡΡŽΡ‰ΠΈΠΉ это Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠ· кСша. Всё ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, написаниС большого количСства ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² утомляСт, плюс Π»ΠΎΠ³ΠΈΠΊΠ° прилоТСния зарастаСт Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ/ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ свинья ΠΆΠΈΡ€ΠΎΠΌ.

АвтоматичСская инвалидация ORM-запросов

Вспомним, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ORM, Π° для Π½Π΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос прСдставляСт Π½Π΅ просто тСкст, Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ структуру β€” ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π΄Π΅Ρ€Π΅Π²ΠΎ условий ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, ΠΏΠΎ ΠΈΠ΄Π΅Π΅, ORM ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ прямо ΠΏΡ€ΠΈ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ надобности. ЧСртовски ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Π»Π΅Π½ΠΈΠ²Ρ‹Ρ… рСбят, Π²Ρ€ΠΎΠ΄Π΅ мСня.

НСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим ΠΌΡ‹ выполняСм запрос:

select * from post where category_id =2 and published

ΠΈ Ρ‚.Π΄.
Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Π°Ρ… ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ списки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ кСша, Π° Π½Π΅ тСксты запросов, тСксты здСсь для наглядности.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ всСму списку ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ кСша для условий, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ для Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Но ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Π°ΠΌ ΠΆΠ΅ Π³Π΄Π΅ сам кСш, Ρ‚.Π΅. скорСС всСго Π½Π΅ Π² памяти процСсса ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈΡ… всС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, Π΄Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° всСх условий больно Π΄ΠΎΠ»Π³Π°.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΡΠ΅ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹ Π±Π΅Π· ΠΈΡ… ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° ΠΊΠΎΠ³Π΄Π° условия Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСниями. НапримСр, ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ post всС ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄ category_id=? and published=. Π‘Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ схСмам:

Ρ‚ΠΎ СдинствСнный подходящий ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ ΠΈΠ· сСмСйства Π±ΡƒΠ΄Π΅Ρ‚ category_id=2 and published=true ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΅ΠΌΡƒ 3 ΠΊΠ»ΡŽΡ‡Π° кСша. Π’.Π΅. Π½Π΅ трСбуСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условий ΠΌΡ‹ сразу ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ ΠΏΠΎ схСмС ΠΈ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Однако, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ слоТными условиями? Π’ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ: or Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π° ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Π°, in Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² or. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях Π»ΠΈΠ±ΠΎ придётся всё ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΉ, отбросив Ρ‚Π°ΠΊΠΈΠ΅ условия. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹ для foo послС Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ схСмы (просто списки ΠΏΠΎΠ»Π΅ΠΉ), ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈ надобности ΠΌΡ‹ строим ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ списки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

О ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша. Π’Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ кэша.ΒΆ

О ΠΌΠΎΠ΅ΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша, ΠΈ ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ cache-dependencies.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° зависимостСй Π² ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈΒΆ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ достаточно ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС зависимыС кэши автоматичСски ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ. Π­Ρ‚Π° тСхнология Π½Π΅ Π½ΠΎΠ²Π°, ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования. Одно врСмя Π΅Π΅ Π΄Π°ΠΆΠ΅ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π² memcached, см. memcached-tag.

НакладныС расходы ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ кэша ΠΈΠ»ΠΈ Π΅Π³ΠΎ создании?ΒΆ

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ зависимых ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ кэшСй. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

1. ΠŸΡ€ΠΈ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ физичСски ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ всС зависимыС кэши. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΏΡ€ΠΈ создании кэша, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΌ Π² список (Ρ‚ΠΎΡ‡Π½Π΅Π΅, мноТСство) зависимостСй ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ SADD). НСдостаток Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ инвалидация большого количСства зависимых кэшСй Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

2. ΠŸΡ€ΠΈ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ просто ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ этой ΠΌΠ΅Ρ‚ΠΊΠΈ. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ потрСбуСтся Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² кэш ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ вСрсиях ΠΌΠ΅Ρ‚ΠΎΠΊ. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ кэша ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы для свСрки вСрсии ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΈ, Ссли вСрсия устарСла, Ρ‚ΠΎ кэш считаСтся Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Достоинство этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ всСх Π΅Π΅ зависимых кэшСй. МоТно Π½Π΅ Π±ΠΎΡΡ‚ΡŒΡΡ вытСснСния ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π°ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ вСрсии ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎ LRU ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΊΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π°Ρ‰Π΅ самого кэша.

Π― Π²Ρ‹Π±Ρ€Π°Π» Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

ΠœΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΒΆ

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ систСма ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° автоматичСски ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ кэшами, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎΡ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ кэша ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΒΆ

ΠŸΡ€ΠΈ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΏΠ΅Ρ‚ΡŒ Π²ΠΎΡΡΠΎΠ·Π΄Π°Ρ‚ΡŒ кэш с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· slave Π² ΠΏΠ΅Ρ€ΠΈΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ послС ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша, Π½ΠΎ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° обновлСния slave.

Π›ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ создания кэша Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° обновлСния slave. Но, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это сопряТСно с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами, Π° Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ (Π² Ρ‚ΠΎΠΌ числС ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ) ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· slave (Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ явноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· мастСра). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, компромиссным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ просто повторная инвалидация кэша Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ обновлСния slave.

Π’ своСй ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊΠ°ΠΊ рСгСнСрация кэша вмСсто Π΅Π³ΠΎ удалСния/ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой Π½Π΅ совсСм эффСктивноС использованиС памяти кэша (Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎ LRU ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ). К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΎΠ½ Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ слоТности ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, ΠΈ, Π² Π΄Π°Π½Π½ΠΎΠΌ вопросС, ΠΌΠ°Π»ΠΎ Ρ‡Π΅ΠΌ отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ удалСния кэша ΠΏΠΎ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, возлагая всю ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π° само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ Ρ‚Π°ΠΈΡ‚ мноТСство ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±Π°Π³. НапримСр, ΠΎΠ½ чувствитСлСн ΠΊ качСству ORM, ΠΈ Ссли ORM Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ инстанции ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΏΡ€ΠΈ сохранСнии, Ρ‚ΠΎ Π² кэш Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. МнС ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ случай, ΠΊΠΎΠ³Π΄Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΄Π°Ρ‚Ρ‹ записывался ΠΊ кэш Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ строки, Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΆΠ΅ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π₯отя ΠΎΠ½ ΠΈ записывался Π² Π‘Π” ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Π½ΠΎ модСль Π½Π΅ Π΄Π΅Π»Π°Π»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… манипуляций ΠΏΡ€ΠΈ сохранСнии (сСмантичСскоС сопряТСниС).

Updated on Nov 10, 2016

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ описаниС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ.

РСализация Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊΒΆ

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠΊ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ сохранСния кэша, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ прСпятствиС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пСссимистичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈΒΆ

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π°, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, для управлСния ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ кэша.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΏΠΎΡ‚ΠΎΠΊ П1 Π½Π°Ρ‡Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ с ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ изоляции Repeatable read.

Π‘Π»Π΅Π΄ΠΎΠΌ Π·Π° Π½ΠΈΠΌ, ΠΏΠΎΡ‚ΠΎΠΊ П2 Π½Π°Ρ‡Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π΄Π°Π½Π½Ρ‹Π΅ Π² Π‘Π”, ΠΈ Π²Ρ‹Π·Π²Π°Π» ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΊΠΈ М1, Ρ‡Ρ‚ΠΎ Π½Π°Π»ΠΎΠΆΠΈΠ»ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° ΠΌΠ΅Ρ‚ΠΊΡƒ М1 Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π’ΠΎ врСмя фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΊ П2 освобоТдаСт ΠΌΠ΅Ρ‚ΠΊΡƒ М1. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ П1 записываСт Π² кэш ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. Бмысла ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅Ρ‚.

Но Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ статус ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π΅ Π²ΠΎ врСмя создания кэша, Π° Π²ΠΎ врСмя чтСния кэша? ИзмСнило Π±Ρ‹ это Ρ…ΠΎΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ?

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‡Π°Ρ‚Ρ‹ΠΌ, Π½Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈ содСрТало Π±Ρ‹ Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ. Для 2-Ρ… ΠΈΠ· 4-Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π‘ΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ прСпятствия Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пСссимистичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈΒΆ

ΠšΡ€ΠΎΠΌΠ΅ конструктивного прСпятствия Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π° Π²Π΅Π±-прилоТСния. ОТиданиС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° окончания Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΈΠ»ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° обновлСния slave, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π»ΠΈΡ‚ΡŒΡΡ 8 сСкунд ΠΈ Π±ΠΎΠ»Π΅Π΅, практичСски Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎ Π² Π²Π΅Π±-прилоТСниях.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ здСсь Ρ‚Ρ€ΠΈ:

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π±Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΈΠΌ запросом Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ строк Π² Π‘Π” ΠΏΡ€ΠΈ использовании выраТСния SELECT FOR UPDATE. Но это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΠ±Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ SELECT FOR UPDATE, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС:

Однако, Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Π΄Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅, Π² Π²Π΅Π±-прилоТСниях Π΅Π΅ ΠΌΠ°Π»ΠΎ ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ этот вопрос пСрСкрываСтся ΡƒΠΆΠ΅ вопросом ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ бизнСс-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ), соотвСтствСнно, Π΅Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠ°Π»ΠΎ Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° Π² этом вопросС. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ½Π° Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Thundering herdΒΆ

Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π·Π°ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ рСсурсоСмка?

Dogpile извСстСн Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Thundering Herd effect ΠΈΠ»ΠΈ cache stampede.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ вСсь Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΎΡ‚ чтСния кэша Π΄ΠΎ Π΅Π³ΠΎ создания. Она Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, которая Π½Π΅ связана с ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ.

БущСствуСт ряд Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π²ΠΎΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉΒΆ

Если Π’Π°Ρˆ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΡΠ΅Ρ‰Π°Π΅ΠΌΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ кэша ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΏΠ΅Ρ‚ΡŒ Π²ΠΎΡΡΠΎΠ·Π΄Π°Ρ‚ΡŒ кэш с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, здСсь проявлСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сильно зависит ΠΎΡ‚ качСства ORM, ΠΈ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сниТаСтся ΠΏΡ€ΠΈ использовании ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° Unit of Work.

Рассмотрим ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Read uncommittedΒΆ

Π’ΡƒΡ‚ всС просто, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅. Π’ случаС использования Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ достаточно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ обновлСния slave.

Read committedΒΆ

Π’ΡƒΡ‚ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, особСнно Ссли Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ActiveRecord. ИспользованиС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° DataMapper Π² сочСтании с Unit of Work Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ сниТаСт ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сохранСниСм Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ фиксациСй Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ всС Ρ€Π°Π²Π½ΠΎ остаСтся.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, здСсь ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ создания кэша Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π²ΠΈΠ΄ΠΈΡ‚ Π² Π‘Π” Π½Π΅ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ видят ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нСльзя Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ, создаст Π½ΠΎΠ²Ρ‹ΠΉ кэш, Ρ‚ΠΎ созданиС кэша Π΄ΠΎ фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, этот ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции Π½Π΅ являСтся достаточно ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ, ΠΈ выбираСтся, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ стСпСни ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, Ρ‚.Π΅. с Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΡŒΡŽ Ρ‡Ρ‚ΠΎ ΠΈ рСпликация. А Π² Ρ‚Π°ΠΊΠΎΠΌ случаС, эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ поглощаСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, вСдь Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ дСлаСтся всС Ρ€Π°Π²Π½ΠΎ ΠΈΠ· slave.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, дорогостоящая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ компромисно Π·Π°ΠΌΠ΅Π½Π΅Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Repeatable readΒΆ

Π­Ρ‚ΠΎΡ‚ случай Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсСн. Π—Π΄Π΅ΡΡŒ ΡƒΠΆΠ΅ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ создания кэша Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, хотя Π±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ список ΠΌΠ΅Ρ‚ΠΎΠΊ, Π½ΠΎ ΠΈ врСмя фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, которая осущСствила ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΊΠΈ кэша.

Мало Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΌΡ‹ Π΅Ρ‰Π΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ кэш Π² Ρ‚Π΅Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… транзакциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° фиксации Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π· ΡƒΠΆ ΠΌΡ‹ ΠΈ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΌΠΈΡ€ΠΈΡ‚ΡŒΡΡ с Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠΊ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ обновлСния slave, ΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· компромисов.

SerializableΒΆ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ρ‚ΠΎ здСсь достаточно ограничится Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ для уровня Repeatable read.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ соСдинСния с Π‘Π”ΒΆ

Но Ссли Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ нСсколько соСдинСний ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π‘Π” (Ρ‡Ρ‚ΠΎ само ΠΏΠΎ сСбС странно, Π½ΠΎ тСорСтичСски ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ случаи ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ возмоТности Ρ€Π°ΡΡˆΠ°Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ORM Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅), ΠΈΠ»ΠΈ ΠΆΠ΅ просто Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π‘Π” Π½Π΅ синхронны, Ρ‚ΠΎ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ внСшний кэш Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ экзСмпляру внСшнСго кэша Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ соСдинСниС с Π‘Π” для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ кэша.

ДинамичСскиС ΠΎΠΊΠ½Π° Π² кэшС¢

Но Π±ΠΎΠ»Π΅Π΅ интСрСсной ΠΌΠ½Π΅ показалась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС динамичСского ΠΎΠΊΠ½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Python-ΠΊΠΎΠ΄, ΠΈ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ сторонних Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.

Updated on Nov 06, 2016

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ абстрактный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ зависимостСй.

Абстрактный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ зависимостСй¢

Π”ΠΎΠ»Π³ΠΎΠ΅ врСмя ΠΌΠ½Π΅ Π½Π΅ Π½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅, отвСтствСнной Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‚Π΅Π³ΠΎΠ², Π±Ρ‹Π»ΠΈ освСдомлСны сразу нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ обязанностями.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρƒ мСня Ρ‚Π°ΠΌ Π±Ρ‹Π» Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ со спутанными обязанностями для обСспСчСния возмоТности Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ запросов Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Ρ‡Ρ‚ΠΎ большого восторга Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ.

Но ΠΌΡ‹ΡΠ»ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π³Π°ΠΌΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ абстрактном классС, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΌ Π·Π° управлСния зависимостями, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для управлСния ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Π³ΠΈ, Π½ΠΎ ΠΈ любой ΠΈΠ½ΠΎΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ², ΠΌΠ½Π΅ Π½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ.

РСшСниС появилось с Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ класса Deferred. БобствСнно это Π½Π΅ Deferred Π² чистом Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² асинхронном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΈΠ½Π°Ρ‡Π΅ я просто использовал Π±Ρ‹ эту ΡΠ»Π΅Π³Π°Π½Ρ‚Π½ΡƒΡŽ ΠΈ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡ΠΊΡƒ, любСзно ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ рСбятами ΠΈΠ· Canonical.

Π’ ΠΌΠΎΠ΅ΠΌ ΠΆΠ΅ случаС, трСбуСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π½ΠΎ ΠΈ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… с Ρ†Π΅Π»ΡŒΡŽ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ( cache.get_many() являСтся ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Π°ΠΊΠΈΠΌ случаСм).

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Queue ΠΈΠ»ΠΈ Aggregator здСсь подошло Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния интСрфСйса ΠΌΡ‹ всСго лишь ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π½Π΅ вникая Π² Π΄Π΅Ρ‚Π°Π»ΠΈ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Π» ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Deferred.

ВсС это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ интСрфСйс абстрактного класса, отвСтствСнного Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ кэша стало всСго лишь ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Π² Π²ΠΈΠ΄Π΅ класса TagsDependency.

Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ пСрспСктивы создания Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ управлСния зависимостями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° основС наблюдСния Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΈΠ»ΠΈ SQL-запроса, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ систСмного события.

Благодарности¢

Моя Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ @akorn Π·Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ обсуТдСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Control. Invalidate ΠœΠ΅Ρ‚ΠΎΠ΄

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

НСкоторыС свСдСния относятся ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ вСрсии ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎ выпуска ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ внСсСны сущСствСнныС измСнСния. ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚ Π½Π΅ прСдоставляСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ, явных ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌΡ‹Ρ…, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… здСсь свСдСний.

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ элСмСнта управлСния ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСния рисования элСмСнту управлСния.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ элСмСнта управлСния (добавляСт Π΅Π΅ ΠΊ области обновлСния элСмСнта, которая Π±ΡƒΠ΄Π΅Ρ‚ пСрСрисована ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рисования) ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСния рисования элСмСнту управлСния. ΠŸΡ€ΠΈ нСобходимости ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ элСмСнту управлСния Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты.

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ элСмСнта управлСния (добавляСт Π΅Π΅ ΠΊ области обновлСния элСмСнта, которая Π±ΡƒΠ΄Π΅Ρ‚ пСрСрисована ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рисования) ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСния рисования элСмСнту управлСния. ΠŸΡ€ΠΈ нСобходимости ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ элСмСнту управлСния Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты.

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ элСмСнта управлСния (добавляСт Π΅Π΅ ΠΊ области обновлСния элСмСнта, которая Π±ΡƒΠ΄Π΅Ρ‚ пСрСрисована ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рисования) ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСния рисования элСмСнту управлСния.

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ элСмСнта управлСния (добавляСт Π΅Π΅ ΠΊ области обновлСния элСмСнта, которая Π±ΡƒΠ΄Π΅Ρ‚ пСрСрисована ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рисования) ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСния рисования элСмСнту управлСния.

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ элСмСнта управлСния ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСния рисования элСмСнту управлСния. ΠŸΡ€ΠΈ нСобходимости ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ элСмСнту управлСния Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты.

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ всю ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ элСмСнта управлСния ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ пСрСрисовку.

Invalidate(Region, Boolean)

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ элСмСнта управлСния (добавляСт Π΅Π΅ ΠΊ области обновлСния элСмСнта, которая Π±ΡƒΠ΄Π΅Ρ‚ пСрСрисована ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рисования) ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСния рисования элСмСнту управлСния. ΠŸΡ€ΠΈ нСобходимости ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ элСмСнту управлСния Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Region, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСлаСтся Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Π’Ρ‹Π·ΠΎΠ² Invalidate ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ синхронной прорисовкС; Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Π·Π°Π»ΠΈΠ²ΠΊΡƒ, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Update ΠΌΠ΅Ρ‚ΠΎΠ΄ послС Π²Ρ‹Π·ΠΎΠ²Π° Invalidate ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² вся клиСнтская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ добавляСтся Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ обновлСния.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *