Сіз жолақтар туралы естігеніңізге немесе онымен бірге қолданбаны пайдаланғаныңызға сенімдімін. Бірақ жолақтардың неге соншалықты танымал және күшті екендігі туралы ойландыңыз ба? Қолданбалар мүмкіндігінше сіздің назарыңызды аударғысы келетіні анық, бірақ сонымен қатар танымал Duolingo оқу қолданбасы жолақтарды көрсету үшін iOS виджеттерін ұсынғанда, пайдаланушының міндеттемесі 60%-ға өскенін білесіз бе. Алпыс пайыз - бұл мінез-құлықтағы ауқымды өзгеріс және «жолақ» үлгілерін қатысуды арттыру және диск пайдалануды қалай пайдалануға болатындығын көрсетеді. Ең бастысы, жолақ - бұл пайдаланушы белгілі бір әрекетті орындайтын қатарынан күндер саны. Кейбір адамдар оны «ойындық» әдет немесе тұрақты пайдалануды ынталандыруға арналған метрика ретінде де анықтайды. Бірақ жолақтар қолданбадағы көрсеткіш немесе жазба болудан асып түседі; бұл одан да психологиялық. Адамның түйсіктеріне дұрыс факторлармен әсер ету оңай. Осы үш факторды қараңыз: прогресс, мақтаныш және жіберіп алу қорқынышы (әдетте FOMO деп аталады). Бұлардың барлығына ортақ не бар? Күш. Сіз бір нәрсеге неғұрлым көп күш жұмсасаңыз, соғұрлым ол сіздің жеке басыңызды қалыптастырады, осылайша жолақтар мінез-құлық психологиясы әлеміне өтеді. Енді үлкен күш үлкен жауапкершілікті тудырады, сондықтан жолақтардың қараңғы жағы бар. Бұл мақалада біз тиімді жолақ жүйесін құрудың артындағы психология, UX және дизайн принциптерін қарастырамыз. Біз (1) неліктен миымыздың инстинктивті түрде жолақ белсенділігіне жауап беретінін, (2) пайдаланушыларға шынайы көмектесетін жолдарды қалай жасау керектігін және (3) жолақ үлгісін құруға қатысты техникалық жұмысты қарастырамыз. Жолақтардың артындағы психология Тиімді жолақ жүйесін жобалау және құру үшін оның миымыздың сымды байланысымен қалай үйлесетінін түсінуіміз керек. Мысалы, біз өз жолақтарымызды қорғауға соншалықты қатты берілгендік сезінетін дәрежеде оны соншалықты тиімді ететін не? Жолақтарды соншалықты күшті және тәуелді ететін нәрсені қолдайтын үш қызықты, жақсы құжатталған психология принциптері бар. Жоғалтудан бас тарту Бұл жолақтардың артындағы ең күшті күш болуы мүмкін. Мен мұны айтамын, өйткені сіз көп жағдайда өмірде мұны болдырмауға болмайды. Осылай ойлап көріңіз: егер досыңыз сізге 100 доллар берсе, сіз бақытты боласыз. Бірақ егер сіз әмияныңыздан 100 доллар жоғалтсаңыз, бұл одан да көп зиян тигізеді. Бұл жағдайлардың эмоционалдық салмағы бірдей емес. Жоғалту жақсы сезінуден гөрі көбірек ауыртады. Әрі қарай жалғастырайық және мен сізге 100 доллар беремін және құмар ойын ойнауыңызды сұраймын. Тағы 100 доллар ұтып алу мүмкіндігінің 50% және бастапқы $100 жоғалтудың 50% мүмкіндігі бар. Сіз оны аласыз ба? мен жасамас едім. Көп адамдар жасамайды. Бұл жоғалтудан бас тарту. Ойлап қарасаңыз, қисынды, түсінікті, адамдық. Жоғалтудан бас тартудың тұжырымдамасы мынада: біз бір нәрсені жоғалтудың азабын бірдей құнды нәрсені алу ләззатынан екі есе көп сезінеміз. Психологиялық тұрғыдан алғанда, табысқа қарағанда жоғалту ұзаққа созылады. Сіз мұның жолақтарға қалай қатысты екенін көрген шығарсыз. Айтарлықтай жолақ салу үшін күш қажет; жолақ өскен сайын, оның артындағы мотивация жоғала бастайды; немесе дәлірек айтсақ, ол екіншілік бола бастайды. Мысал: Досыңыздың Apple Watch телефонындағы «Сақиналарды жылжыту» функциясын жабатын үш күндік сызығы бар делік. Олардың мақсатына жету және дәйекті болудан басқа жоғалтатын ештеңесі жоқ. Сонымен қатар, сізде 219 күндік әсерлі кезең бар. Сіз оны жоғалтып аламын ба деген қорқыныштың құрсауында қалуыңыз мүмкін. Сіз бұл кезде жетістік туралы ойламайтын шығарсыз; бұл сіздің инвестицияланған күш-жігеріңізді қорғау туралы көбірек, және бұл жоғалтудан бас тарту. Duolingo жоғалтудан бас тарту пайдаланушының тіпті ең жалқау күндерінде де ұзақ жолды үзгісі келмейтініне қалай ықпал ететінін түсіндіреді. Белгілі бір жолмен, жоғалтудан жиіркеніш пайда болған кезде жолақ әдетке айналуы мүмкін. Тұмандық мінез-құлық үлгісі (B = MAP) Енді біз ұзақ жолақтарға жұмсалған күш-жігерді жоғалтып алу қорқынышын түсінгендіктен, тағы бір сұрақ туындайды: бізді күн сайын, тіпті жолақ үлкен болмай тұрып, бірінші кезекте не істеуге мәжбүр етеді? Фогг мінез-құлық моделі осыған байланысты. Бұл салыстырмалы түрде қарапайым. Мінез-құлық (B) тек үш фактор - Мотивация (М), Қабілет (A) және Шақыру (P) - бір сәтте теңестірілгенде ғана пайда болады. Осылайша, B=MAP теңдеуі. Егер осы факторлардың кез келгені, тіпті біреуі де жоқ болса, мінез-құлық болмайды. Осылайша, жолақ жүйесі тиімді және қайталанатын болуы үшін барлық үш фактор болуы керек: МотивацияБұл нәзік және үнемі болатын нәрсе емес. Сіз болатын күндер барИспан тілін үйренуге құмар болдыңыз, ал тілді үйренуге тіпті ерік-жігеріңізді де сезінбейсіз. Әдет қалыптастыруға деген мотивацияның өзі сенімсіз және бірінші күннен жеңілу. Қабілет Мотивацияның шектеулерінің орнын толтыру үшін қабілет өте маңызды. Бұл тұрғыда қабілет әрекеттің қарапайымдылығын білдіреді, яғни күш-жігер соншалықты оңай, бұл мүмкін емес деп айту шындыққа жанаспайды. Көптеген қолданбалар мұны әдейі пайдаланады. Apple Fitness-ке стендтік мақсатыңызға жету үшін бір сағатта бір минут тұру керек. Duolingo-ға бір ғана аяқталған сабақ қажет. Бұл тапсырмалар соншалықты көп күш салуды қажет етпейді. Кедергі соншалықты төмен, тіпті ең нашар күндеріңізде де оны жасай аласыз. Бірақ жалғасып келе жатқан серияның біріккен күш-жігері - бұл жолақты жоғалту идеясы пайда болатын жерде. PromptБұл теңдеуді аяқтайтын нәрсе. Адамдар табиғи түрде ұмытшақ, сондықтан иә, қабілет бізді 90% жеткізе алады. Бірақ ескерту бізге әрекет етуді еске салады. Жолақтар дизайн бойынша тұрақты, сондықтан пайдаланушыларға әрекет етуді үнемі ескертіп отыру керек. Сұрау қаншалықты күшті екенін көру үшін Duolingo қолданба белгішесінде қызыл белгі тұрақты пайдалануды арттыратынын білу үшін A/B сынағы жасады. Бұл күнделікті белсенді пайдаланушылардың 6%-ға артуына әкелді. Тек қызыл белгі. Модельдік шектеулер Осының барлығын айта отырып, Фогг моделінің шектеуі бар, оның көмегімен сыншылар мен заманауи зерттеулер агрессивті хабарландырулар сияқты ескертулерге тым көп сүйенетін дизайн психикалық шаршауды тудыруы мүмкін екенін байқады. Тұрақты хабарландырулар мен артық жұмыс уақыттары пайдаланушылардың бас тартуына әкелуі мүмкін. Сондықтан, бұған сақ болыңыз. Зейгарник эффектісі Сіз жобаның тапсырмасын жартылай аяқтаған кезде қалай сезінесіз? Бұл көптеген адамдарды тітіркендіреді, өйткені аяқталмаған тапсырмалар біз аяқтаған нәрселерге қарағанда көбірек ақыл-ой кеңістігін алады. Бірдеңе біткен соң, біз оны ұмытып кетеміз. Бір нәрсе орындалмай қалса, ол біздің санамызға салмақ түсіреді. Дәл осы себепті цифрлық өнімдер пайдаланушыға профилінің тек «60% аяқталғанын» хабарлау үшін Upwork профилінің аяқталу жолағы сияқты жасанды прогресс көрсеткіштерін пайдаланады. Ол пайдаланушыны бастаған ісін аяқтауға итермелейді.
Басқа мысалды қарастырайық. Істер тізімі қолданбасында сізде бес тапсырма бар және күннің соңында олардың тек төртеуі аяқталғанын тексересіз. Көпшілігіміз сол бір аяқталмаған тапсырманың кесірінен өзімізді орындалмағандай сезінеміз. Дәл осы жерде Зейгарник эффектісі. Зейгарник эффектісін психолог Блума Зейгарник көрсетті, ол біз аяқталмаған тапсырмаларды орындалған тапсырмаларға қарағанда жадымызда ұзақ уақыт белсенді ұстайтынымызды сипаттады. UX дизайнында жолақ үлгісі табиғи түрде оған әсер етеді. Сіз оқу сериясының 63-ші күні болдыңыз делік. Бұл кезде сіз аяқталмаған бизнестің үздіксіз үлгісіндесіз. Сіздің миыңыз бұл туралы сирек ұмытады, өйткені ол сіздің ойыңыздың артында отырады. Бұл кезде сіздің миыңыз сізге хабарландырулар жіберетін болады. Осы психологиялық күштерді біріктіргенде, жолақтардың неге қарапайым қолданба мүмкіндігі емес екенін шынымен түсіне бастайсыз; олар адамның мінез-құлқын өзгертуге қабілетті. Бірақ бір жерде - мен нақты қашан екенін айта алмаймын, өйткені бұл әркім үшін әр түрлі болады - іс "қызықтан" жоғалтуға мүмкіндігіңіз жоқ нәрсеге ауысатын нүктеге жетеді. Сіз 58 күндік күш-жігердің босқа кеткенін қаламайсыз, солай ма? Бұл стриак жүйесін тиімді етеді. Дұрыс орындалса, жолақтар пайдаланушыларға мақсатқа қол жеткізетін таңғажайып әдеттер қалыптастыруға көмектеседі. Бұл күнделікті оқу немесе спортзалға үнемі бару болуы мүмкін. Бұл қайталанатын әрекеттер (кейде шағын) уақыт өте келе қосылып, күнделікті өмірімізде айқын көрінеді. Бірақ әр тиынның екі жағы бар. Әдет пен мәжбүрлік арасындағы жіңішке сызық Егер сіз қадағалап жүрсеңіз, жүйені бұзудың қараңғы жағы бар екенін айта аласыз. Әдетті қалыптастыру - бұл қайталанатын мақсатқа сәйкестік. Алайда мәжбүрлеу - бұл енді қажет емес, бірақ қорқыныштан немесе қысымнан ұстанатын мақсатпен жұмыс істеудің жүйелілігі. Бұл ұстарадай жұқа сызық. Күнде таңертең тісіңізді еш ойланбастан жуасыз; бұл автоматты және инстинктивті, оның мақсаты жақсы тыныс алу. Бұл жақсы әдетті қалыптастыратын жолақ. Этикалық жолақ жүйесі пайдаланушыларға тыныс алу үшін кеңістік береді. Егер қандай да бір себептермен таңертең щеткамен тазаламасаңыз, түсте щеткамен тазалауға болады. Ұзақ күш-жігерді жоғалтудан қорықпай, жетілмегендікке жол беріледі. Мәжбүр қарама-қарсы бағытты ұстанады, соның нәтижесінде сіз алаңдаушылық тудырады, өзіңізді кінәлі сезінесіз немесе тіпті шаршайды, кейде сіз барлық күш-жігеріңізге қарамастан ештеңеге қол жеткізбегендей сезінесіз.жұмыс. Сіз әрекет етесіз, өйткені сіз қалағаныңыз үшін емес, сіздің прогрессіңіздің нөлге қайтарылғанын көруден қорқатындықтан. Біреу тіпті мұны керемет сипаттап берді: «Мен өзімді алдайтынымды сезіндім, бірақ жай ғана мән бермедім. Бұл адамның бойындағы шектен тыс ұстама жолақтарын көрсетеді. Пайдаланушылар өздерінің құндылығын бастапқы мақсатқа немесе олардың бірінші кезекте бастаған себебіне емес, ерікті метрикаға байланыстыра бастайтын дәрежеде. Сызық олардың не істейтініне емес, кім екеніне айналады. Жақсы жобаланған этикалық жолақ жүйесі қысым немесе міндеттеме емес, пайдаланушыны ынталандыру сияқты болуы керек. Бұл ішкі және сыртқы мотивацияның тепе-теңдігіне қатысты. Сыртқы мотивация (сыртқы сыйақылар, жазадан аулақ болу) пайдаланушыларды іске қосуы мүмкін, бірақ ішкі мотивация (испан тілін үйрену сияқты жеке мақсат үшін тапсырманы орындау, өйткені сіз шынымен жақын адамыңызбен сөйлескіңіз келеді) ұзақ мерзімді қатысу үшін күштірек. Жақсы жүйе сыртқы элементтерді мұқият пайдалана отырып, ішкі мотивацияға ұмтылуы керек, яғни пайдаланушыларға жоғалуы мүмкін нәрселермен қорқытпай, олардың қаншалықты жеткенін еске түсіруі керек. Тағы да, бұл жұқа сызық. Жолақты жүйені жобалау кезінде қарапайым сынақ - бұл біраз уақытты алу және сіздің өніміңіз жасаған алаңдаушылыққа арналған шешімдерді сату арқылы сіздің өнімдеріңіз ақша таба ма деп ойлану. Егер иә болса, пайдаланушыларды пайдалану ықтималдығы жоғары. Енді келесі сұрақ туындайды: Егер мен жолақты пайдалануды таңдасам, оны пайдаланушыларға өз мақсаттарына жетуге шынайы көмектесетіндей етіп қалай құрастыруға болады? Good Streak жүйесінің дизайнының UX Менің ойымша, бұл жерде көптеген жобалар тиімді жолақ жүйесін жасайды немесе оны толығымен бұзады. Жақсы сызық дизайнының кейбір UX принциптерін қарастырайық. Оны еш қиындықсыз ұстаңыз Сіз мұны бұрын, мүмкін Atomic Habits сияқты кітаптардан естіген шығарсыз, бірақ әдеттерді қалыптастырудың ең оңай жолдарының бірі әрекетті кішкентай және жеңіл ету екенін атап өткен жөн. Бұл біз Фогг мінез-құлық үлгісінде талқылаған қабілет факторына ұқсас. Кез келген жолақ дизайнының бірінші ережесі прогресске қол жеткізу кезінде талап етілетін әрекетті мүмкіндігінше кішірек ету керек. Күнделікті әрекетті орындау үшін ерік күші қажет болса, бұл әрекет бес күннен аспайды. Неліктен? Сіз бес күн қатарынан мотивация ала алмайсыз. Жағдай: медитация қолданбасын іске қоссаңыз, жолақты сақтау үшін пайдаланушыларды 20 минуттық сеанстан өтуге мәжбүрлеудің қажеті жоқ. Оның орнына бір минут, тіпті отыз секунд сияқты кішкентай нәрсені көріңіз. «Кішкене су тамшылары құдіретті мұхит жасайды» дегендей. Кішкентай күш-жігер уақыт өте келе үлкен жетістіктерге айналады. Бұл мақсат болуы керек: үйкелісті жою, әсіресе сәт қиын болуы мүмкін. Пайдаланушылар күйзеліске түскенде немесе шамадан тыс күйде болғанда, оларға жай ғана бірнеше секундқа көріну күш-жігер ретінде есептелетінін айтыңыз. Таза визуалды кері байланысты қамтамасыз етіңіз Адамдар табиғатынан көрнекі. Көбінесе біз сену үшін бір нәрсені көруіміз керек; заттарды жақсырақ түсіну және перспективаға қою үшін заттарды визуализациялау қажет. Сондықтан жолақ үлгілері күш-жігерді визуализациялау үшін диаграммалар, құсбелгілер, орындалу сақиналары және торлар сияқты көрнекі элементтерді жиі пайдаланады. GitHub үлес графигін қараңыз. Бұл жүйеліліктің қарапайым визуализациясы. Дегенмен әзірлеушілер оны оттегі сияқты дем алады.
Ең бастысы - жолақ жүйесін дерексіз сезінбеу. Ол шынайы және табысты сезінуі керек. Мысалы, Duolingo және Apple фитнес белсенділік сақиналары кезең аяқталғаннан кейін таза анимация дизайндарын пайдаланады және GitHub уақыт бойынша пайдаланушының тұрақтылығының тарихи деректерін көрсетеді.
Жақсы уақытты пайдаланыңыз Мен жоғарыда айттым, адамдар табиғатынан әдетте ұмытшақ болады және бұл ескертулер алға серпін сақтауға көмектеседі. Сұрауларсыз жаңа пайдаланушылардың көпшілігі жалғастыруды ұмытады. Өмір қарбалас болуы мүмкін, мотивация жоғалады және оқиғалар орын алуы мүмкін. Ұзақ уақыт қолданушылар да шақырулардың пайдасын көреді, бірақ көбінесе олар әдеттер циклінде құлыпталған. Соған қарамастан, тіпті ең адал адам бір күнді кездейсоқ өткізіп жіберуі мүмкін. Сіздің жолақ жүйеңіз міндетті түрде еске салғыштарды қажет етеді. Ең жиі қолданылатын жедел еске салғыштар push хабарландырулары болып табылады. Push хабарландыруларымен жұмыс істегенде уақыт өте маңызды. Қолданбаның түрі де маңызды. Таңертеңгі сағат 9-да «Сіз бүгін жаттығу жасамадыңыз» деп хабарландыру жіберу оқу қолданбасы үшін таңқаларлық, өйткені көпшілігінің сабақты аяқтау туралы ойлануына бір күн бұрын істеу керек нәрселері бар. Егер біз фитнес қолданбасы туралы айтатын болсақ, олақылға қонымды және тіпті күннің басында еске түсірілуі мүмкін. Push хабарландырулары қолданба санатына байланысты айтарлықтай өзгереді. Мысалы, фитнес қолданбалары таңертеңгі хабарландырулармен (7-8: 00) жоғары белсенділікті көрсетеді, ал өнімділік қолданбалары түсте жақсырақ жұмыс істеуі мүмкін. Ең бастысы - барлығына бірдей сәйкес келеді деп ойламай, пайдаланушылардың мінез-құлқына негізделген қолданбаның уақытын A/B сынау. Медитация қолданбасы үшін жұмыс істейтін нәрсе кодтау трекерінде жұмыс істемеуі мүмкін. Басқа шақыру әдістері - қолданба белгішесіндегі қызыл нүктелер және тіпті қолданба виджеттері. Зерттеулер әртүрлі, бірақ орташа адам өз құрылғысының құлпын күніне 50-150 рет ашады (PDF). Пайдаланушы телефон құлпын ашқан сайын ағымдағы жолды көрсететін қолданбада немесе виджетте қызыл нүктені көрсе, бұл міндеттемені арттырады. Тек оны асыра алмаңыз; шақыру наг емес, ескерту ретінде қызмет етуі керек. Маңызды кезеңдерді атап өту Жолақ жүйесі эмоцияларды қайта жандандыру үшін маңызды кезеңдерді атап өтуге тырысуы керек, әсіресе жолаққа терең енген пайдаланушылар үшін. Пайдаланушы 7-күн, 30-күн, 50-күн, 100-күн, 365-күнге жеткенде, сіз одан үлкен мәміле жасауыңыз керек. Жетістіктерді мойындау — әсіресе ұзақ уақыт қолданушылар үшін.
Бұрын көргеніміздей, Duolingo мұны түсініп, маңызды кезеңдерді конфеттимен атап өтетін анимациялық графиканы жүзеге асырды. Кейбір платформалар тіпті пайдаланушылардың күш-жігерін растайтын қомақты бонустар береді. Бұл қолданбалар үшін пайдалы болуы мүмкін, сондықтан пайдаланушылар өздерінің маңызды кезеңдерін әлеуметтік желілерде жалпыға ортақ бөлісуге бейім. Тағы бір артықшылығы - межелерге жеткенге дейін күту. Бұл тек жолақты шексіз тірі қалдыру емес; пайдаланушылардың күтетін нәрсесі бар. Grace механизмдерін пайдаланыңыз Өмірді болжау мүмкін емес. Адамдардың назары аударылады. Кез келген жақсы жолақ жүйесі кемелсіздікті күтуі керек. Сызық жүйесіне ең үлкен психологиялық қатерлердің бірі өткізіп алған бір күннен кейін нөлге қайта орнату болып табылады. «Этикалық» жолақ жүйесі пайдаланушыға біраз босаңсуды қамтамасыз етуі керек. Сізде 90 күндік шахматты үйрену сериясы бар делік. Сіз үш жақсы ай бойы тұрақты болдыңыз және бір күні телефоныңыз саяхаттау кезінде өледі және дәл осылай 90 0 болады — бәрі, барлық күш-жігер жойылады және прогресс жоғалады. Пайдаланушы толығымен жойылуы мүмкін. Оны нөлден қалпына келтіру туралы ой соншалықты құнсыздандыратыны сонша, күш салудың қажеті жоқ. Ең нашар жағдайда, пайдаланушы сәтсіздікті сезінгеннен кейін қолданбадан бас тартуы мүмкін. Жолақ жүйесіне «рақымдылық» механизмін қосуды қарастырыңыз:
Streak Freeze Пайдаланушыларға айыппұлсыз бір күнді әдейі өткізіп жіберуге мүмкіндік беріңіз. Қосымша уақыт Қалпына келтіруді іске қоспас бұрын әдеттегі мерзімнен бірнеше сағат (2–3) өткенге рұқсат беріңіз. Шыру үлгілері Қатты қалпына келтірудің орнына жолақ аз мөлшерге азаяды, мысалы, өткізіп алған күн үшін жолақтан 10 күн шегеріледі.
Ынталандыру үнін қолданыңыз Жолақ үзілген кезде пайдаланушыларға көрсетілетін екі хабарды салыстырайық:
"Сіз 42 күндік жолыңызды жоғалттыңыз. Қайтадан бастаңыз." "Сіз 42 күн қатарынан келдіңіз. Бұл керемет прогресс! Тағы бір рет сынап көргіңіз келе ме?"
Екеуі де бірдей ақпаратты береді, бірақ эмоционалды әсер әртүрлі. Бірінші хабарлама пайдаланушының моральсызданғанын сезініп, оның шығуына себеп болуы мүмкін. Екінші хабар қол жеткізген нәрсені атап өтеді және пайдаланушыны әрекетті қайталауға ақырын шақырады. Streak Systems жобалау қиындықтары Жолақты жүйені құрудың техникалық ерекшеліктеріне кіріспес бұрын, сіз кезігуі мүмкін қиындықтарды білуіңіз керек. Сіз күткендей жағдай күрделі болуы мүмкін. Уақыт белдеулерін өңдеу Уақыт пен күнді өңдеу әзірлеушілер айналысатын ең қиын тұжырымдамалардың бірі болуының себебі бар. Пішімдеу, интернационалдандыру және тағы басқаларды қарастыру керек. Сізден сұрайын: бір күн нені білдіреді? Біз әлемнің әртүрлі уақыт белдеуінде жұмыс істейтінін білеміз және бұл жеткіліксіз сияқты, кейбір аймақтарда жылына екі рет болатын жазғы уақыт (DST) бар. Сіз бұл шеткі істерді қайдан бастайсыз? Ертеңгі күннің «басталуы» нені білдіреді? Кейбір әзірлеушілер UTC сияқты бір орталық уақыт белдеуін пайдалану арқылы мұны болдырмауға тырысады. Кейбір пайдаланушылар үшін бұл дұрыс нәтиже береді, бірақ кейбіреулер үшін ол бір сағатқа, екі сағатқа немесе одан да көп уақытқа өшірілуі мүмкін. Бұл сәйкессіздік пайдаланушы тәжірибесін бұзады. Пайдаланушылар сахнаның артындағы уақытты қалай басқаратыныңызға мән бермейді; олар күтетін нәрсе, егер олар сағат 23:40-та жолақ әрекетін орындаса, ол дәл сол уақытта, олардың контекстінде тіркелуі керек. Сіз сервер уақытына емес, пайдаланушының жергілікті уақыт белдеуіне негізделген «бір күнді» анықтауыңыз керек. Әрине, сіз жеңілдетуге боладыUTC түн ортасында барлық пайдаланушылар үшін жолдарды жаһандық деңгейде бағыттаңыз және қалпына келтіріңіз, бірақ сіз өте әділетсіздік жасайсыз. Калифорниядағы біреудің Лондонда тұратын адамға қарағанда өз тапсырмасын орындау үшін әрқашан сегіз қосымша сағаты бар. Бұл кейбір пайдаланушыларды орналасқан жеріне байланысты жазалайтын әділетсіз дизайн ақауы. Ал егер ол Лондондағы адам тек қонаққа келіп, тапсырманы орындап, содан кейін басқа уақыт белдеуіне оралса ше? Бұлардың барлығына тиімді шешімнің бірі - пайдаланушылардан бортқа қосу кезінде уақыт белдеуін нақты орнатуды сұрау (алғашқы аутентификациядан кейін жақсырақ). Уақыт белдеуі туралы ақпаратты беру жеке сәйкестендірілетін деректер ретінде пайдаланылмай, тек бағдарламаның прогресті дәл бақылау үшін пайдаланылатыны туралы нәзік ескертпені қосу жақсы идея. Оны өзгермелі параметрге айналдыру тағы бір жақсы идея. Кез келген адамға қолданбадағы уақыт белдеуі логикасын тікелей өңдеуден аулақ болуды ұсынамын. Moment.js немесе pytz (Python) және т.б. сияқты сыналған және шынайы күндер кітапханаларын пайдаланыңыз. Мұндай күрделі нәрсе үшін дөңгелекті қайта ойлап табудың қажеті жоқ. Қабылданбаған күндер және шеткі істер Сіз алаңдататын тағы бір мәселе - пайдаланушылардың шамадан тыс ұйықтауы, сервердің тоқтап қалуы, кешігу, желі ақаулары және т.б. сияқты басқарылмайтын шеткі жағдайлар. Біз бұрын талқылағандар сияқты рақымдылық тетіктері идеясын пайдалану көмектесе алады. Екі сағаттық жеңілдік терезесі пайдаланушыға да, әзірлеушіге де көмектесуі мүмкін, яғни пайдаланушылар бақыланбайтын өмірлік жағдайлар үшін қатаң жазаланбайды. Әзірлеушілер үшін түн ортасында сервер істен шыққан бақыланбайтын сәттерде жеңілдік терезелері пайдалы. Ең бастысы, клиентке ешқашан сенбеңіз. Әрқашан сервер жағында растаңыз. Сервер шындықтың жалғыз көзі болуы керек. Алданудың алдын алу Тағы да, мен мұны жеткілікті түрде атап өте алмаймын: сервер жағынан барлығын растаңыз. Пайдаланушылар - адамдар, егер мүмкіндік берілсе, адамдар алдауы мүмкін. Бұл сөзсіз. Сіз көріңіз:
Барлық әрекеттерді UTC уақыт белгілерімен сақтау. Клиент өзінің жергілікті уақытын жібере алады, бірақ сервер оны бірден UTC-ге түрлендіре алады және сервер уақытымен салыстыра алады. Осылайша, егер клиенттің уақыт белгісі күдікті түрде алыс болса, жүйе оны қате ретінде қабылдамайды және UI сәйкесінше жауап бере алады. Оқиғаға негізделген бақылауды пайдалану. Басқаша айтқанда, пайдаланушы идентификаторы, орындалған әрекет түрі, уақыт белгісі мен уақыт белдеуі сияқты ақпаратты қамтитын метадеректермен әрбір әрекеттің жазбасын сақтаңыз. Бұл тексеруге көмектеседі.
Streak System қозғалтқышын құру Бұл код оқулығы емес, сондықтан мен сізге көптеген кодтарды тастаудан аулақ боламын. Мен мұны практикалық түрде сақтаймын және сәулет, ағын және сенімділік тұрғысынан әдетте сызықтық жүйе қозғалтқышының қалай жұмыс істейтінін сипаттаймын. Негізгі архитектура Бірнеше рет айтқанымдай, серверді жолақ деректері үшін ақиқаттың жалғыз көзі етіңіз. Архитектура серверде келесідей болуы мүмкін:
Әрбір пайдаланушының деректерін дерекқорда сақтаңыз. Ағымдағы жолақ қоймасын (әдепкі 0) бүтін сан ретінде сақтаңыз. Уақыт белдеуі теңшелімін сақтаңыз, яғни IANA уақыт белдеуі жолын (жергілікті уақыт белгісінен жасырын түрде немесе пайдаланушыдан өз уақыт белдеуін таңдауды сұрау арқылы анық түрде). Мысалы, «Америка/Нью_Йорк». Пайдаланушының жергілікті уақыт белдеуіне қатысты уақыт белдеуін тексеру арқылы жолдың жалғасуын немесе үзілуін анықтау үшін барлық логиканы өңдеңіз.
Сонымен қатар, клиент тарапынан:
Әдетте серверден алынған ағымдағы жолақты көрсетіңіз. Метадеректер түрінде орындалған әрекетті пайдаланушының шын мәнінде біліктілік жолақ әрекетін орындағанын растау үшін серверге жіберіңіз. Сервер жауаптарына негізделген көрнекі кері байланысты қамтамасыз етіңіз.
Сонымен, қысқаша айтқанда, ми серверде, ал клиент көрсету және оқиғаларды жіберу үшін. Бұл көптеген сәтсіздіктер мен соңғы жағдайларды үнемдейді, сонымен қатар жаңартулар мен түзетулерді жеңілдетеді. Логикалық ағын Пайдаланушы әрекетті аяқтаған кезде минималды тиімді жолақ жүйесінің қозғалтқышы қалай жүретінін мысалға келтірейік:
Пайдаланушы квалификациялық жолақ әрекетін аяқтайды. Клиент оқиғаны серверге метадеректер ретінде жібереді. Бұл «Z уақыт белгісінде X пайдаланушы орындаған Y әрекеті» болуы мүмкін. Сервер бұл оқиғаны қабылдайды және негізгі тексеруді орындайды. Бұл нақты пайдаланушы ма? Олар аутентификацияланған ба? Әрекет жарамды ма? Уақыт белдеуі сәйкес пе? Бұл орындалса, сервер дерекқордан пайдаланушының жолақ деректерін шығарып алады. Содан кейін қабылданған әрекет уақыт белгісін пайдаланушының жергілікті уақыт белдеуіне түрлендіріңіз. Серверге пайдаланушының жергілікті уақыт белдеуіндегі күнтізбе күндерін (уақыт белгілерін емес) салыстыруға рұқсат етіңіз: Егер дәл сол күн болса, онда әрекет артық болып табылады және онда ешқандай өзгеріс болмайдыжолақ. Егер бұл келесі күні болса, онда жолақ ұзарып, 1-ге артады. Бір күннен артық үзіліс болса, жолақ үзіледі. Дегенмен, бұл жерде сіз мейірімді механиканы қолдана аласыз. Егер жеңілдік механизмі өткізілмесе, жолақты 1-ге қайта орнатыңыз.
Егер маңызды кезең жетістіктері үшін тарихи деректерді сақтауды таңдасаңыз, «ең ұзақ жолақ» немесе «жалпы белсенді күндер» сияқты айнымалы мәндерді жаңартыңыз. Содан кейін сервер дерекқорды жаңартады және клиентке жауап береді. Мынадай нәрсе:
{ "current_streak": 48, "ең ұзақ_жолақ": 50, "жалпы_белсенді_күндер": 120, "streak_extended": шын, }
Қосымша шара ретінде сервер әрекетті қайталауы немесе қабылдамау керек және процесс барысында кез келген нәрсе сәтсіз болғанда клиентке хабарлауы керек. Тұрақтылық үшін құрылыс Жоғарыда айтылғандай, қателер немесе сервердің тоқтап қалуы салдарынан жолды жоғалтқан пайдаланушылар қорқынышты UX болып табылады және пайдаланушылар бұл үшін құлдырауды күтпейді. Осылайша, сіздің жолақ жүйеңізде осы сценарийлер үшін қорғау құралдары болуы керек. Сервер техникалық қызмет көрсету үшін (немесе қандай да бір себеппен) жұмыс істемей тұрса, әрекеттер кеш жіберіліп, әлі де есептелуі үшін оны түзету үшін қосымша сағаттардың уақытша терезесіне рұқсат беруді қарастырыңыз. Сондай-ақ, пайдаланушыларды хабардар етуді таңдауға болады, әсіресе жағдай жалғасып жатқан жолға әсер етуі мүмкін болса. Ескертпе: Деректерді қолмен қалпына келтіруге болатын әкімші бэкдорын орнатыңыз. Қателер сөзсіз және кейбір пайдаланушылар қолданбаңызға телефон соғуы мүмкін немесе олар басқара алмайтын себептермен олардың жолақтары бұзылғанын қолдау үшін хабарласады. Тергеуден кейін пайдаланушы дұрыс болса, жолақтарды қолмен қалпына келтіру мүмкіндігі болуы керек. Қорытынды Бір нәрсе анық: жолақтар шынымен күшті, өйткені адам психологиясы іргелі деңгейде жұмыс істейді. Ең жақсы жолақ жүйесі - бұл пайдаланушылар саналы түрде ойланбайтын жүйе. Бұл әдеттегі әдетке айналған тістерді тазалау сияқты тез нәтиже беретін немесе көрінетін прогрестің әдетіне айналды. Мен жай ғана айтайын: барлық өнімдерге жолақ жүйесі қажет емес. Күнделікті белсенді пайдаланушыларды қалағаныңыз үшін ғана тұрақтылықты мәжбүрлеу керек пе? Жауап «жоқ» болуы мүмкін.