เบšเบฑเบ™เบ—เบถเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Habr front-end: refactoring เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™

เบšเบฑเบ™เบ—เบถเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Habr front-end: refactoring เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบชเบฐเป€เบซเบกเบตเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ Habr เบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบˆเบฒเบเบžเบฒเบเปƒเบ™, เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เบงเบดเบ—เบตเบเบฒเบ™เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ”เบ—เบตเปˆเปƒเบŠเป‰เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เป‚เบŠเบเบ”เบต, เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฑเบšเป‚เบญเบเบฒเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เป€เบžเบฒเบฐเบงเปˆเบฒเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ—เบตเบก habra. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ refactoring เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบกเบทเบ–เบท, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบ•เบญเบšเบ„เปเบฒเบ–เบฒเบก: เบกเบฑเบ™เป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเบ—เบฒเบ‡เบซเบ™เป‰เบฒ. เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™: Node, Vue, Vuex เปเบฅเบฐ SSR เบเบฑเบšเบŠเบญเบ”เบˆเบฒเบเบšเบฑเบ™เบ—เบถเบเบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเบชเบปเบšเบเบฒเบ™เบชเปˆเบงเบ™เบ•เบปเบงเปƒเบ™ Habr.

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบšเปเปˆเบžเบฝเบ‡เบžเป - เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบชเบฒเบกเบซเบ™เป‰เบฒ, เบชเบญเบ‡เบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡เปเบฅเบฐเบซเบปเบงเบซเบ™เป‰เบฒเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ‚เบญเบ‡ Habr - Baxley เบ—เบฑเบ‡เบซเบกเบปเบ”. เปเบ™เปˆเบ™เบญเบ™, เบเบฑเบ‡เบกเบตเบ™เบฑเบเบ—เบปเบ”เบชเบญเบš, เบœเบนเป‰เบญเบญเบเปเบšเบš, เบชเบฒเบก Vadim, เบ”เบญเบเปเบ‚เบกเบกเบฐเบซเบฑเบ”เบชเบฐเบˆเบฑเบ™, เบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เบ”เป‰เบฒเบ™เบเบฒเบ™เบ•เบฐเบซเบผเบฒเบ”เปเบฅเบฐ Bumburum เบญเบทเปˆเบ™เป†. เปเบ•เปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบปเบเบœเบนเป‰เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเปเบซเบผเปˆเบ‡ Habr. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบซเบฒเบเบฒเบ - เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเบœเบนเป‰เบŠเบปเบกเบซเบผเบฒเบเบฅเป‰เบฒเบ™เป‚เบ”เบฅเบฒ, เป€เบŠเบดเปˆเบ‡เบˆเบฒเบเบžเบฒเบเบ™เบญเบเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบงเบดเบชเบฒเบซเบฐเบเบดเบ”เบเบฑเบเปƒเบซเบเปˆ, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เปเบฅเป‰เบงเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ—เบตเปˆเบฅเบฝเบšเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”.

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบšเปเบฅเบดเบชเบฑเบ”เป„เบญเบ—เบตเบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ, Habr เบ›เบฐเบเบญเบšเบญเบฒเบŠเบตเบšเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ” Agile, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” CI, เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”. เปเบ•เปˆเบ•เบฒเบกเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ‚เบญเบ‡เบ‚เป‰เบญเบ, Habr เป€เบ›เบฑเบ™เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเบนเปˆเปƒเบ™เบ„เบทเป‰เบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบฅเปˆเบ™เบซเบผเบฒเบเป†เบ„เบฑเป‰เบ‡เบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ”เบธเบซเบกเบฑเปˆเบ™เบฅเบฐเบซเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบเบฒเบ™เบญเบญเบเปเบšเบšเปเบฅเบฐเบเบฒเบ™เบญเบญเบเปเบšเบšเปƒเบซเบกเปˆ, เบ—เปเบฒเบฅเบฒเบเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบฅเบฐเปเบเป‰เป„เบ‚เบกเบฑเบ™, เปเบเป‰เป„เบ‚เบ›เบตเป‰เปเบฅเบฐเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆ, เบเป‰เบฒเบงเป€เบ—เบดเบ‡ rake เปเบฅเบฐเบซเบ™เปเปˆเป„เบกเป‰เบชเปˆเบงเบ™เบซเบผเบฒเบเบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡เบขเบนเปˆเปƒเบ™เบ•เบตเบ™, เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบ›เปˆเบญเบเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™. เบเบฒเบ™เบœเบฐเบฅเบดเบ”. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบต lull เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เบทเบ™เปƒเบซเบกเปˆ, เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบชเบตเปˆเบซเบฅเปˆเบฝเบก "เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™ - เบšเปเปˆเบฎเบตเบšเบ”เปˆเบงเบ™".

เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ™เบตเป‰ "เบ™เบญเบเบฅเบฐเบ”เบนเบเบฒเบ™" sprint เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. เป€เบงเบฅเบฒเบ™เบตเป‰เบกเบฑเบ™เบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™ refactoring เบชเบฐเบšเบฑเบšเบกเบทเบ–เบทเบ‚เบญเบ‡ Habr. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบšเปเบฅเบดเบชเบฑเบ”เบกเบตเบ„เบงเบฒเบกเบซเบงเบฑเบ‡เบชเบนเบ‡เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™, เปเบฅเบฐเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ—เบปเบ”เปเบ—เบ™เบชเบงเบ™เบชเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ Habr incarnations เปเบฅเบฐเบเบฒเบเป€เบ›เบฑเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เป‰เบฒเบกเป€เบงเบ—เบต. เบกเบทเป‰เบซเบ™เบถเปˆเบ‡เบˆเบฐเบกเบตเบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ›เบฑเบšเบ•เบปเบง, PWA, เป‚เบซเบกเบ”เบญเบญเบšเป„เบฅเบ™เปŒ, เบเบฒเบ™เบ›เบฑเบšเปเบ•เปˆเบ‡เบœเบนเป‰เปƒเบŠเป‰, เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ.

เปƒเบซเป‰เบเปเบฒเบ™เบปเบ”เบงเบฝเบเบ‡เบฒเบ™

เป€เบกเบทเปˆเบญ, เบขเบนเปˆเบ—เบตเปˆเบเบฒเบ™เบขเบทเบ™เบ‚เบถเป‰เบ™เปเบšเบšเบ—เปเบฒเบกเบฐเบ”เบฒ, เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเป„เบ”เป‰เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบšเบฑเบ™เบซเบฒเปƒเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ„เปเบฒเป€เบซเบฑเบ™เบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบกเบทเบ–เบท. เบ”เป‰เบงเบเบ„เบงเบฒเบกเบ„เบดเบ”เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบˆเบธเบ™เบฅเบฐเบžเบฒเบเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบเบฒเบ™เบ›เบดเปˆเบ™เบ›เบปเบงเบˆเบดเบ”เบ•เบฐเบงเบดเบ—เบฐเบเบฒเบเบธเปˆเบก. เบ—เบธเบเป†เบ„เบปเบ™เป„เบ”เป‰เบ›เปˆเบฝเบ™เบเบฑเบ™เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบกเบฑเบ™เป€เบˆเบฑเบšเบขเบนเปˆเปƒเบช, เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบšเบฑเบ™เบ—เบถเบเบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบชเปˆเป€เบˆเป‰เบ, เป€เบซเบฑเบ™เบญเบปเบเป€เบซเบฑเบ™เปƒเบˆ, เป€เบ‚เบปเป‰เบฒเปƒเบˆ, เบเบปเบเป€เบงเบฑเป‰เบ™เบšเปเปˆเบกเบตเปƒเบœเบ•เบปเบšเบกเบท. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ 20 เบšเบฑเบ™เบซเบฒ, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒ Habr เบกเบทเบ–เบทเบเบฑเบ‡เบกเบตเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบเบฒเบงเบ™เบฒเบ™เปเบฅเบฐ thorny เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเปเบฒเป€เบฅเบฑเบ”.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบ›เบฑเบ™เบซเปˆเบงเบ‡เบ•เบปเป‰เบ™เบ•เปเบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเป‰เบฝเบ‡. เบ—เบธเบเป†เบกเบทเป‰, เปƒเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบšเป‰เบฒเบ™ - เป€เบฎเบฑเบ”เบงเบฝเบ - เป€เบฎเบทเบญเบ™, เบ‚เป‰เบญเบเป€เบซเบฑเบ™เป‚เบ—เบฅเบฐเบชเบฑเบšเป€เบเบปเปˆเบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเบชเบฐเปเบ”เบ‡เบซเบปเบงเบ‚เปเป‰ 20 เบซเบปเบงเบ‚เปเป‰เปƒเบ™เบญเบฒเบซเบฒเบ™. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเปเบ™เบงเบ™เบตเป‰:

เบšเบฑเบ™เบ—เบถเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Habr front-end: refactoring เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Habr เบกเบทเบ–เบทเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ refactoring

เป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เบขเบนเปˆเบ™เบตเป‰? เปƒเบ™เบชเบฑเป‰เบ™, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป„เบ”เป‰เบฎเบฑเบšเปƒเบŠเป‰เบซเบ™เป‰เบฒ HTML เปƒเบซเป‰เบเบฑเบšเบ—เบธเบเบ„เบปเบ™เปƒเบ™เปเบšเบšเบ”เบฝเบงเบเบฑเบ™, เป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบงเปˆเบฒเบœเบนเป‰เปƒเบŠเป‰เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบซเบผเบทเบšเปเปˆ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบฅเบนเบเบ„เป‰เบฒ JS เบ–เบทเบเป‚เบซเบฅเบ”เปเบฅเบฐเบฎเป‰เบญเบ‡เบ‚เปเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เปเบ•เปˆเบ–เบทเบเบ›เบฑเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบ”เบฝเบงเบเบฑเบ™เบชเบญเบ‡เบ„เบฑเป‰เบ‡. เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป„เบ”เป‰ flickered, เปเบฅเบฐเบœเบนเป‰เปƒเบŠเป‰เป„เบ”เป‰เบ”เบฒเบงเป‚เบซเบผเบ”เบ—เบตเปˆเบ”เบตเบซเบผเบฒเบเบฎเป‰เบญเบเบเบดเป‚เบฅเป„เบšเบžเบดเป€เบชเบ”. เป‚เบ”เบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เบ—เบธเบโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบธเบโ€‹เบขเปˆเบฒเบ‡โ€‹เป€เบšเบดเปˆเบ‡โ€‹เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™ creepy เบซเบผเบฒเบโ€‹.

เบšเบฑเบ™เบ—เบถเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Habr front-end: refactoring เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™ SSR-CSR เป€เบเบปเปˆเบฒ. เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™ C3 เปเบฅเบฐ C4, เป€เบกเบทเปˆเบญ Node JS เบšเปเปˆเบซเบงเปˆเบฒเบ‡เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡ HTML เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบฎเป‰เบญเบ‡เบ‚เปเบ•เบปเบงเปเบ—เบ™เป„เบ›เบซเบฒ API.

เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เป€เบงเบฅเบฒเบ™เบฑเป‰เบ™เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เป‚เบ”เบเบซเบ™เบถเปˆเบ‡เปƒเบ™เบœเบนเป‰เปƒเบŠเป‰ Habr:

เบชเบฐเบšเบฑเบšเบกเบทเบ–เบทเปเบกเปˆเบ™ crap. เบ‚เป‰เบญเบเบšเบญเบเบกเบฑเบ™เบ„เบทเบเบฑเบ™. เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบ‚เบญเบ‡ SSR เปเบฅเบฐ CSR.

เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบญเบกเบฎเบฑเบšเบกเบฑเบ™, เบšเปเปˆเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป‚เบชเบเป€เบชเบปเป‰เบฒเบ›เบฒเบ™เปƒเบ”.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ›เบฐเป€เบกเบตเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบชเป‰เบฒเบ‡เบ›เบตเป‰เปƒเบ™ Jira เบ”เป‰เบงเบเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡ "เบกเบฑเบ™เบšเปเปˆเบ”เบตเบ”เบฝเบงเบ™เบตเป‰, เป€เบฎเบฑเบ”เบกเบฑเบ™เบ–เบทเบเบ•เป‰เบญเบ‡" เปเบฅเบฐเบ—เปเบฒเบฅเบฒเบเบงเบฝเบเบ‡เบฒเบ™เปƒเบ™เบˆเบฑเบ‡เบซเบงเบฐเบเบงเป‰เบฒเบ‡:

  • เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เบทเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹,
  • เบซเบผเบธเบ”โ€‹เบœเปˆเบญเบ™โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡ redraws เป„เบ”เป‰โ€‹,
  • เบฅเบปเบšเบฅเป‰เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบŠเป‰เปเบฒเบเบฑเบ™,
  • เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป‚เบซเบผเบ”เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบ‚เบถเป‰เบ™.

เบกเบฒเปƒเบŠเป‰เบ‚เปเป‰เบกเบนเบ™เบ„เบทเบ™เปƒเปเปˆ

เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบ‚เป‰เบฒเบ‡เป€เบŠเบตเบšเป€เบงเบตเบ–เบทเบเบญเบญเบเปเบšเบšเป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบชเบญเบ‡เบขเปˆเบฒเบ‡: เบšเปเปˆเปƒเบซเป‰เบ›เบฐเบชเบปเบšเบเบฑเบšเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบŠเบญเบเบซเบฒเปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡. เบเบฒเบ™เบชเป‰เบฒเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบต SPA เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡ metric FMP (เบขเปˆเบฒเบ‡โ€‹เบซเบฅเบตเบโ€‹เบฅเป‰เบฝเบ‡โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเป‰เบฒเบโ€‹เปเบฎเบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹ TTI). เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบฅเบฒเบชเบชเบดเบเบ—เบตเปˆเบชเบธเบ”เบ—เป‰เบฒเบ เบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบขเบนเปˆ Airbnb เปƒเบ™เบ›เบต 2013 เบ›เบต (เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ Backbone.js), SSR เปเบกเปˆเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ isomorphic JS เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก Node. เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฝเบ‡เปเบ•เปˆเบชเบปเปˆเบ‡เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™ rehydration เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบ”เป‰เบฒเบ™เบฅเบนเบเบ„เป‰เบฒ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป‚เบซเบผเบ”เบซเบ™เป‰เบฒ. เบชเปเบฒเบฅเบฑเบš Habr, เบชเปเบฒเบฅเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ—เบตเปˆเบกเบตเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก, เบเบฒเบ™เบชเบฐเปเบ”เบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบ›เบฑเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบกเบดเบ”เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบŠเบญเบเบซเบฒ.

เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบปเบเบ›เบตเป„เบ”เป‰เบœเปˆเบฒเบ™เป„เบ›เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบกเบฒเบฎเบญเบ”เบ‚เบญเบ‡เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบต, เปเบฅเบฐเปƒเบ™เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ™เบตเป‰, เบ™เป‰เปเบฒเบซเบผเบฒเบเป„เบ”เป‰เป„เบซเบผเบฅเบปเบ‡เปƒเบ•เป‰เบ‚เบปเบงเปƒเบ™เป‚เบฅเบเบ—เบฒเบ‡เบซเบ™เป‰เบฒ, เบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ„เบงเบฒเบกเบ„เบดเบ”เบ™เบตเป‰เบเบฑเบ‡เบ–เบทเบเบ›เบปเบเบ„เบธเบกเบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบฅเบฑเบš. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบขเบทเบ™เบซเบฅเบตเบเป„เบ›เบ—เบฒเบ‡เบซเบ™เบถเปˆเบ‡เปเบฅเบฐ rolled เบญเบญเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Vue เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ SSR เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบ‚เบฒเบ”เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡: เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปƒเบซเป‰เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เบšเปเปˆเบกเบตเบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบ–เบฒเบกเบ™เบตเป‰. เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเบขเบฒเบเป€เบžเบตเปˆเบกเบ‚เบฐเปœเบฒเบ”เบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เบˆเบฒเบเป€เบŠเบตเบšเป€เบงเบต, เบซเบผเบทเบเป‰เบญเบ™เบšเบฑเบ™เบซเบฒเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณเบญเบทเปˆเบ™เป†เบซเบผเบฒเบเบญเบฑเบ™, เบซเบผเบทเบกเบฑเบ™เบšเปเปˆเบขเบธเบ”. เบšเปเปˆเบงเบดเบ—เบตเบ—เบฒเบ‡เบซเบ™เบถเปˆเบ‡, เบเบฒเบ™เบ–เบดเป‰เบกเบฅเบฑเบ”เบญเบญเบเปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบ„เบทเบ™เปƒเบซเบกเปˆเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป„เบ”เป‰เป€เบฎเบฑเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบซเบกเบฒเบฐเบชเบปเบกเปเบฅเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”. เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง, เบงเบฝเบเบ‡เบฒเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเป†เบ™เป‰เบญเบเป† - เบฅเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบชเบฑเบเบžเบฝเบ‡เปเบ•เปˆ เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเปเบฅเบดเบšเบปเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบฅเบฐ Vue เบˆเบฐเป€เบžเบตเปˆเบกเบกเบฑเบ™เปƒเบชเปˆเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ: window.__INITIAL_STATE__.

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปเบกเปˆเบ™เบเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบฎเบญเบšเบงเบฝเบ™เป€เบ›เบฑเบ™ JSON (เบเบฐเบชเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบงเบปเบ‡); เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เป‚เบ”เบเบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ›เปˆเบฝเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบเบฑเบšเบ„เบนเปˆเบฎเปˆเบงเบกเบ‡เบฒเบ™เบฎเบฒเบšเบžเบฝเบ‡.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเป€เบ™เบทเป‰เบญเบซเบฒ UGC, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ„เบงเบ™เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบซเบ™เปˆเบงเบเบ‡เบฒเบ™ HTML เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบ—เปเบฒเบฅเบฒเบ HTML. เบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ he.

เบซเบผเบธเบ”เบเบฒเบ™เปเบ•เป‰เบกเบ„เบทเบ™เปƒเปเปˆ

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบˆเบฒเบเปเบœเบ™เบงเบฒเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบซเบ™เบถเปˆเบ‡ Node JS instance เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ: SSR เปเบฅเบฐ "proxy" เปƒเบ™ API, เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เป€เบเบตเบ”เบ‚เบทเป‰เบ™. เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฅเบฐเบซเบฑเบ” JS เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ node เป€เบ›เบฑเบ™เบเบฐเบ—เบนเป‰เบ”เบฝเบง, เปเบฅเบฐเบŸเบฑเบ‡เบŠเบฑเบ™ SSR เปเบกเปˆเบ™ synchronous. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบเบฑเบšเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ callstack เบซเบเบธเป‰เบ‡เบเบฑเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡. เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เบชเบฐเบ–เบฒเบ™เบฐ, เปเบ•เปˆเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบšเปเปˆเป„เบ”เป‰เบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™ twitching, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบฅเบนเบเบ„เป‰เบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เป‚เบ”เบเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบœเบนเป‰เปƒเบŠเป‰. เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบญเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เป‚เบ”เบเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ:

  • เบ„เบฑเบ”เบ•เบดเบ”เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เป‰เบฒเบกเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ;
  • เปเบšเปˆเบ‡เบŠเบฑเป‰เบ™ Node JS เบญเบญเบเป€เบ›เบฑเบ™เบชเบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.

เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เปเบฒเบญเบดเบ”เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡เป„เบ”เป‰เบ‚เบฐเบซเบเบฒเบเป€เบชเบฑเป‰เบ™เบ•เบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เป€เบ”เบทเบญเบ™.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบทเบญเบ? Habr เบกเบฑเบเบˆเบฐเบเป‰เบฒเบเบญเบญเบเป„เบ›เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ•เปเปˆเบ•เป‰เบฒเบ™เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ. เป‚เบ”เบเบšเปเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบกเบตเบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเปœเบฒเบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบˆเบฐเบซเบผเบธเบ”เบงเบปเบ‡เบˆเบญเบ™เบˆเบฒเบเบ„เบงเบฒเบกเบ„เบดเบ”เป„เบ›เบชเบนเปˆเบ•เบปเป‰เบ™เปเบšเบšเปƒเบซเป‰เปœเป‰เบญเบเบ—เบตเปˆเบชเบธเบ”. เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ—เบฑเบ”เบชเบฐเบ™เบฐเบ„เบฐเบ•เบดเบ•เปเปˆเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เปเบกเปˆเบ™ reminiscent เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ‚เบญเบ‡ postulates เบ‚เบญเบ‡ booking.com, เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒ Habr เปƒเบŠเป‰เป€เบงเบฅเบฒเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบฎเบธเบ™เปเบฎเบ‡เปเบฅเบฐเป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเบ—เปˆเบฒเบ™, เป€เบ›เบฑเบ™เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปƒเบ™เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง.

เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™เบ™เบตเป‰เปเบฅเบฐเบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบญเบ‡เบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบขเปˆเบฒเบ‡เป„เบงเบงเบฒ, เบ‚เป‰เบญเบเป€เบฅเบทเบญเบเบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ. เปเบฅเบฐ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เป€เบฅเบทเป‰เบญเบเป†, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบˆเปˆเบฒเบเป€เบ‡เบดเบ™เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเป„เบงเบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™. เบžเบงเบเป€เบฎเบปเบฒเบˆเปˆเบฒเบเป€เบ‡เบดเบ™เป€เบเบทเบญเบšเบ—เบฑเบ™เบ—เบต: เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ—เป‰เบฒเบเบญเบฒเบ—เบดเบ”, เบฅเป‰เบฒเบ‡เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™, เบ‚เบฝเบ™ เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ mortem เปเบฅเบฐเป€เบฅเบตเปˆเบกเปเบšเปˆเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบญเบญเบเป€เบ›เบฑเบ™เบชเบญเบ‡เบชเปˆเบงเบ™. เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปเบกเปˆเบ™เป‚เบ‡เปˆเบซเบผเบฒเบ, เปเบฅเบฐเปเบกเบ‡เป„เบกเป‰เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบกเบฑเบ™เบšเปเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเปเบœเปˆเบžเบฑเบ™. เปเบฅเบฐเปเบกเปˆเบ™เปเบฅเป‰เบง, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบญเบฑเบšเบญเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เปเบ•เปˆเบงเบดเบ—เบตเบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบญเบทเปˆเบ™, stumbled เปเบฅเบฐ groaning, PoC เบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบšเบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบเบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบกเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เปเบฅเบฐเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฅเปเบ–เป‰เบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเป‰เบฒเบเป„เบ›เบชเบนเปˆเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ "เบชเบญเบ‡เป‚เบซเบ™เบ”" เปƒเบซเบกเปˆ. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ”เบเป‰เบฒเบงเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบšเบฑเบ™เบฅเบธเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ - SSR เป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เปเบฅเบฐ UI เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบชเบฐเบซเบ‡เบปเบšเบซเบผเบฒเบ.

เบšเบฑเบ™เบ—เบถเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Habr front-end: refactoring เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Habr เบกเบทเบ–เบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบเบฒเบ™ refactoring

เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ SSR-CSR เบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบกเบทเบ–เบทเบ™เปเบฒเป„เบ›เบชเบนเปˆเบฎเบนเบšเบ™เบตเป‰:

๏ฟผเบšเบฑเบ™เบ—เบถเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Habr front-end: refactoring เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบปเบ‡เบˆเบญเบ™ "เบชเบญเบ‡เป‚เบซเบ™เบ”" SSR-CSR. Node JS API เปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบกเบชเบฐเป€เปเบตเบชเปเบฒเบฅเบฑเบš I/O asynchronous เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบšเบฅเบฑเบญเบเป‚เบ”เบเบŸเบฑเบ‡เบŠเบฑเบ™ SSR, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบญเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก #3 เปเบกเปˆเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™.

เบเบฒเบ™เบฅเบปเบšเบฅเป‰เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบŠเป‰เปเบฒเบเบฑเบ™

เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบเบฒเบ™เบชเบฐเปเบ”เบ‡เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบซเบ™เป‰เบฒเป€เบงเบฑเบšเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบžเบฐเบเบฒเบ”เบšเป‰เบฒเบซเบกเบนเบญเบตเบเบ•เปเปˆเป„เบ›. เปเบ•เปˆเบเบฒเบ™เปƒเบŠเป‰ Habr เบ•เบทเปˆเบกเบญเบตเบเปƒเบ™เบฎเบนเบšเปเบšเบš SPA เบเบฑเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เป„เบซเบผเป€เบ‚เบปเป‰เบฒเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เปเบกเปˆเบ™เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบ‚เบญเบ‡เปเบšเบšเบŸเบญเบก เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก โ†’ เบšเบปเบ”เบ„เบงเบฒเบก โ†’ เบ„เปเบฒเป€เบซเบฑเบ™ เปเบฅเบฐเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบ™เบตเป‰เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เปเบฒเบญเบดเบ”.

เบšเบฑเบ™เบ—เบถเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Habr front-end: refactoring เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบŸเบตเบ”เป‚เบžเบชเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ‚เปเป‰เบกเบนเบ™เปƒเปเปˆ

เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ‚เบธเบ”เป€เบฅเบดเบ. เปƒเบ™ screencast เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป„เบ”เป‰เบฎเป‰เบญเบ‡เบ‚เปเบ„เบทเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ swiping เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™, เปเบฅเบฐเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบซเบฑเบ™เบšเบปเบ”เบ„เบงเบฒเบก, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบซเบฒเบเป„เบ›เบšเบฒเบ‡เบšเปˆเบญเบ™. เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบฅเบฒเบเบเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบŠเป‰เบฅเบฑเบ”เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบชเบนเบ™เป€เบชเบเบกเบฑเบ™เปƒเบ™เบเบฒเบ™เบ—เปเบฒเบฅเบฒเบ. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป„เบ”เป‰เบ™เปเบฒเปƒเบŠเป‰เบฅเบฑเบ”เบ—เบปเปˆเบงเป‚เบฅเบ, เปเบ•เปˆเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ Vuex เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™เบซเบปเบง: เป‚เบกเบ”เบนเบ™เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบซเบ™เป‰เบฒ, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™เปเบกเปˆเบ™เบ•เบดเบ”เบเบฑเบšเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ—เบธเบเป†เป‚เบกเบ”เบนเบ™เปเบกเปˆเบ™ "เปƒเบŠเป‰เปเบฅเป‰เบงเบ–เบดเป‰เบกเป„เบ”เป‰" - เปเบ•เปˆเบฅเบฐเบเบฒเบ™เบขเป‰เบฝเบกเบขเบฒเบกเบ•เปเปˆเป„เบ›เปƒเบ™เบซเบ™เป‰เบฒ rewrite เป‚เบกเบ”เบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”:

ArticlesList: [
  { Article1 },
  ...
],
PageArticle: { ArticleFull1 },

เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเป‚เบกเบ”เบนเบ™ เบฅเบฒเบเบŠเบทเปˆเบšเบปเบ”เบ„เบงเบฒเบก, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบงเบฑเบ”เบ–เบธเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” เบšเบปเบ”เบ„เบงเบฒเบก เปเบฅเบฐเป‚เบกเบ”เบนเบ™ เบšเบปเบ”เบ„เบงเบฒเบกเปœเป‰เบฒ, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเบฐเบšเบฑเบšเบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ เบšเบปเบ”เบ„เบงเบฒเบก, เบŠเบฐโ€‹เบ™เบดเบ”โ€‹เบ‚เบญเบ‡ เบšเบปเบ”เบ„เบงเบฒเบกเป€เบ•เบฑเบก. เป‚เบ”เบเปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡ - เบกเบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ, เบ„เบปเบ™เป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ naive, เปเบ•เปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ—เบตเปˆเบชเบธเบ”. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเบ—เบธเบเป†เบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเปเปˆเบชเบฒเบกเบฒเบ”เบขเบนเปˆเบเบฑเบšเบกเบฑเบ™เป„เบ”เป‰. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบšเบปเบ”เบ„เบงเบฒเบก, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡ / feed โ†’ /all, เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ—เบตเปˆเบˆเบฐเบ–เบดเป‰เบกเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบญเบฒเบซเบฒเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡ เบฅเบฒเบเบŠเบทเปˆเบšเบปเบ”เบ„เบงเบฒเบก, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆ. เบ™เบตเป‰เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบŠเป‰เปเบฒเบเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป.

เป‚เบ”เบเป„เบ”เป‰เบฅเบงเบšเบฅเบงเบกเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ‚เบธเบ”เบ„เบปเป‰เบ™เปƒเบ™เบซเบปเบงเบ‚เปเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบฅเบฑเบ”เปƒเบซเบกเปˆเปเบฅเบฐเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ. เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเปเบกเปˆเบ™เบเบฒเบงเบ™เบฒเบ™, เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปƒเบ™เบ„เบงเบฒเบกเป‚เบ›เบ”เบ›เบฒเบ™เป„เบ”เป‰เป€เบเบตเบ™เบ„เบงเบฒเบกเบชเบปเบ‡เปƒเบช, เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เป€เบœเบตเบเบ”เบตเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบชเบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบžเบฐเบเบฒเบเบฒเบก decouple เป‚เบกเบ”เบนเบ™ Vuex เบˆเบฒเบเบซเบ™เป‰เบฒเบ•เปˆเบฒเบ‡เป†เปเบฅเบฐเบœเบนเบเบกเบฑเบ”เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡. เปเบกเปˆเบ™เปเบฅเป‰เบง, เบˆเบฐเบกเบตเบ‚เปเป‰เบกเบนเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เบฎเป‰เบฒเบ™, getters เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเป‚เบซเบฅเบ”เบšเบปเบ”เบ„เบงเบฒเบกเบชเบญเบ‡เบ„เบฑเป‰เบ‡. เบชเปเบฒเบฅเบฑเบšเบชเบฐเบšเบฑเบšเบกเบทเบ–เบท, เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบ—เบตเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡เบ—เบตเปˆเบชเบธเบ”. เบกเบฑเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

ArticlesList: {
  ROUTE_FEED: [ 
    { Article1 },
    ...
  ],
  ROUTE_ALL: [ 
    { Article2 },
    ...
  ],
}

เปเบ•เปˆเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบฅเบฒเบเบเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบฑเบšเบŠเป‰เบญเบ™เบเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบซเบผเบฒเบเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบ„เบทเบ™เบ‚เปเป‰เบกเบนเบ™เบงเบฑเบ”เบ–เบธ เบšเบปเบ”เบ„เบงเบฒเบก เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบซเบ™เป‰เบฒเบ•เบญเบš, เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ เบšเบปเบ”เบ„เบงเบฒเบกเป€เบ•เบฑเบก? เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบกเบฑเบ™เบˆเบฐเบกเบตเป€เบซเบ”เบœเบปเบ™เบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง:

ArticlesIds: {
  ROUTE_FEED: [ '1', ... ],
  ROUTE_ALL: [ '1', '2', ... ],
},
ArticlesList: {
  '1': { Article1 }, 
  '2': { Article2 },
  ...
}

เบฅเบฒเบเบŠเบทเปˆเบšเบปเบ”เบ„เบงเบฒเบก เบ—เบตเปˆเบ™เบตเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ repository เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก. เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบ–เบทเบเบ”เบฒเบงเป‚เบซเบผเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰. เบžเบงเบเป€เบฎเบปเบฒเบ›เบดเปˆเบ™เบ›เบปเบงเบžเบงเบเป€เบ‚เบปเบฒเบ”เป‰เบงเบเบ„เบงเบฒเบกเบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เบ—เบตเปˆเบชเบธเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เบœเปˆเบฒเบ™เบ„เบงเบฒเบกเป€เบˆเบฑเบšเบ›เบงเบ”เบšเปˆเบญเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡เปƒเบ™ metro เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบฐเบ–เบฒเบ™เบต, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเปเบ™เปˆเบ™เบญเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเป€เบˆเบฑเบšเบ›เบงเบ”เบ™เบตเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เป‚เบ”เบเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบฅเบฒเบงเป‚เบซเบฅเบ”เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบฅเบฒเบงเบกเบตเบขเบนเปˆเปเบฅเป‰เบง. เบ”เบฒเบงเป‚เบซเบผเบ”เปเบฅเป‰เบง. เบงเบฑเบ”เบ–เบธ ArticlesIds เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆ array เบ‚เบญเบ‡ IDs (เบ„เบทเบเบฑเบšเบงเปˆเบฒ "เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ") เบเบฑเบšเบงเบฑเบ”เบ–เบธ เบšเบปเบ”เบ„เบงเบฒเบก. เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบŠเป‰เปเบฒเบเบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›เบเบฑเบšเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบงเบฑเบ”เบ–เบธเบ„เบทเบ™เปƒเบซเบกเปˆ เบšเบปเบ”เบ„เบงเบฒเบก เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบซเบ™เป‰เบฒโ€‹เบ•เบญเบšโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบฅเบงเบกโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบกเบฑเบ™โ€‹.

เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเป‚เบ›เปˆเบ‡เปƒเบชเบซเบผเบฒเบ: เบญเบปเบ‡เบ›เบฐเบเบญเบš iterator iterates เบœเปˆเบฒเบ™ array เบ—เบตเปˆเบกเบต ID เบšเบปเบ”เบ„เบงเบฒเบกเปเบฅเบฐเปเบ•เป‰เบกเบญเบปเบ‡เบ›เบฐเบเบญเบš teaser เบšเบปเบ”เบ„เบงเบฒเบก, เบœเปˆเบฒเบ™ Id เป€เบ›เบฑเบ™ prop, เปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เป€เบ”เบฑเบเบ™เป‰เบญเบ, เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบˆเบฒเบ. เบฅเบฒเบเบŠเบทเปˆเบšเบปเบ”เบ„เบงเบฒเบก. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบชเบดเปˆเบ‡เบžเบดเบก, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบงเบฑเบ™เบ—เบตเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบˆเบฒเบ เบฅเบฒเบเบŠเบทเปˆเบšเบปเบ”เบ„เบงเบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ›เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบกเบกเบฑเบ™เปƒเบชเปˆเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบ”เบตเบเบงเปˆเบฒ? เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ‚เบฝเบ™เป„เบงเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบญเปˆเบญเบ™เป‚เบเบ™เบ•เปเปˆเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ”เบฒเบงเป‚เบซเบฅเบ”เบกเบฒเปเบฅเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเบกเบฑเบ™เบกเบฒเปƒเบŠเป‰เปƒเบซเบกเปˆเป„เบ”เป‰. เปเบ•เปˆเบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบกเบฑเบ™เป€เบ›เบตเบ”เบ—เบฒเบ‡เป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบซเบกเปˆเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบฅเบปเบ‡เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡เปเบฅเบฐเบเบฒเบ™เป‚เบซเบผเบ”เบšเบปเบ”เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŸเบตเบ”เบ•เบฒเบกเบ—เบตเปˆเบ›เบฒเบเบปเบ”. เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เปƒเบชเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเบซเบฅเป‰เบฒเบชเบธเบ”เปƒเบ™ "เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ" เบฅเบฒเบเบŠเบทเปˆเบšเบปเบ”เบ„เบงเบฒเบก, เบšเบฑเบ™เบ—เบถเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ‚เบญเบ‡ IDs เปƒเบซเบกเปˆเปƒเบ™ ArticlesIds เปเบฅเบฐเปเบˆเป‰เบ‡เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบก "เบชเบฐเปเบ”เบ‡เบชเบดเปˆเบ‡เบžเบดเบกเปƒเบซเบกเปˆ", เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเปƒเบชเปˆ Ids เปƒเบซเบกเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ array เบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป€เบเบทเบญเบš magically.

เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เบกเบตเบ„เบงเบฒเบกเบกเปˆเบงเบ™เบซเบผเบฒเบ

icing เปƒเบ™ cake refactoring เปเบกเปˆเบ™เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡ skeletons, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เป€เบ™เบทเป‰เบญเปƒเบ™เปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบŠเป‰เบฒเป€เบ›เบฑเบ™เบซเบ™เป‰เบฒเบเบฝเบ”เบŠเบฑเบ‡เบซเบ™เป‰เบญเบเบฅเบปเบ‡. เบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰; เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบˆเบฒเบเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เป„เบ›เบชเบนเปˆเบ•เบปเบงเปเบšเบšเบ•เบปเป‰เบ™เปเบšเบšเปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡. เบเบฒเบ™เบญเบญเบเปเบšเบšเบ•เบปเบงเบˆเบดเบ‡เป„เบ”เป‰เปเบ•เป‰เบกเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบญเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เบชเบฐเปเบ”เบ‡เบšเบฅเบฑเบญเบ div เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ, เป€เบเบทเบญเบšเบšเปเปˆเบชเบฐเป€เบเบฑเบ”เป€เบ‡เบดเบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฅเปเบ–เป‰เบฒเบ‚เปเป‰เบกเบนเบ™. เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบงเบดเบ—เบตเบเบฒเบ™เป‚เบซเบผเบ”เบ™เบตเป‰เบŠเปˆเบงเบเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบฎเปเป‚เบกเบ™เบ„เบงเบฒเบกเบเบปเบ”เบ”เบฑเบ™เปƒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰. เป‚เบ„เบ‡เบเบฐเบ”เบนเบเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฑเปˆเบ‡เบ™เบตเป‰:

เบšเบฑเบ™เบ—เบถเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Habr front-end: refactoring เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™
เบเบฒเบ™เป‚เบซเบผเบ”

เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™

เบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ Habre เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบปเบเป€เบ”เบทเบญเบ™เปเบฅเป‰เบง เปเบฅเบฐเปเบนเปˆเบ‚เบญเบ‡เบ‚เป‰เบญเบเบเบฑเบ‡เบ–เบฒเบกเบงเปˆเบฒ: เป€เบˆเบปเป‰เบฒเบกเบฑเบเบกเบฑเบ™เบขเบนเปˆเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™เป„เบ”เป‰เปเบ™เบงเปƒเบ”? เบ•เบปเบเบฅเบปเบ‡, เบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบ - เปเบกเปˆเบ™เปเบฅเป‰เบง. เปเบ•เปˆเบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบ„เบปเบ™เบญเบทเปˆเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบ—เบตเบกเบ‡เบฒเบ™เบ—เบตเปˆ indifferent เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบเบฑเบšเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เบšเปเปˆเบฎเบนเป‰เบซเบผเบทเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เปƒเบœ. เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ—เบตเปˆเบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบฎเบนเป‰เบชเบถเบเบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบ•เปเปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”. เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”, เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบšเบฒเบ‡เบชเปˆเบงเบ™, เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบเบญเบ‡เบ›เบฐเบŠเบธเบกเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบชเบฐเป€เบซเบ™เบตเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡. เบเบฒเบ™เบชเป‰เบฒเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เบ—เบธเบเป†เบกเบทเป‰เบ”เป‰เบงเบเบ•เบปเบงเป€เบญเบ‡เปเบกเปˆเบ™เป€เบขเบฑเบ™เบซเบผเบฒเบ, เปเบ•เปˆเบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบ”เบตเบเปˆเบงเบฒเป€เบˆเบปเป‰เบฒเป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ—เบตเปˆเบšเปเปˆเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญ (เบšเปเปˆเบกเบตเบ„เปเบฒเป€เบงเบปเป‰เบฒเบˆเบฒเบฅเบถเบ).

เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบญเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™เปƒเบ™เบ—เบฒเบ‡เบšเบงเบ, เปเบฅเบฐเบกเบฑเบ™เบ”เบตเบซเบผเบฒเบ. เบกเบฑเบ™เป€เบ›เบฑเบ™เปเบฎเบ‡เบšเบฑเบ™เบ”เบฒเบ™เปƒเบˆ. เบ‚เบญเบšโ€‹เปƒเบˆ! เบ‚เบฝเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เปเป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ›เปˆเบฝเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเปเบฅเบฐเบˆเบฑเบ”เบชเบฑเบ™เบŠเบฑเป‰เบ™เบ•เบปเบงเปเบ—เบ™เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ "เบชเบญเบ‡เป‚เบซเบ™เบ”" เป„เบ”เป‰เบšเบฑเบ™เบฅเบธเบเบฒเบ™เบ›เปˆเบญเบเบญเบญเบเบกเบฒเปเบฅเป‰เบงเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบšเบ•เป‰เบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบ„เบปเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป„เบ›เปƒเบŠเป‰เบกเบฑเบ™เปเบฅเบฐเบŠเปˆเบงเบเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปƒเบซเป‰ Habr เบกเบทเบ–เบทเบ”เบตเบ‚เบถเป‰เบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเบฅเบฑเบšเบกเบทเป‰เบ™เบตเป‰. เบ‚เป‰เบญเบเบˆเบฐเบเบดเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบ•เบญเบšเบ—เบธเบเบ„เปเบฒเบ–เบฒเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™