Неговият примитивен API позволява планиране за интернет, а неговият клиент е шедьовър на сдържаност. Как работи Google Календар и какво можем да научим от него като инженери. Архитектурата Само няколко вътрешни библиотеки за неща като удостоверяване и споделени инструменти. Frontend framework : CSS класови имена, призовани от JS. Frontend Styling Cache Storage, IndexedDB (офлайн режим), CDN (изображения и шрифтове) Frontend Storage Spanner на DB. API Storage Google Meet, Google Контакти и Google Auth. External APIs : сърцебиене, събития, известия Services : Вътрешен компилатор, който прави JS изтегляне и работи по-бързо. Other Интересни проблеми Разбира се, календарът е едно голямо CRUD приложение, но не позволявайте това да ви заблуди - имаше много изискващи технически проблеми, които трябваше да бъдат решени. Календар на огъня REST+JSON от 2011 г. (първоначално REST+RSS-стил) Моделът на данните се опира силно на RFC 5545 iCalendar рециклиращи се струни (Microsoft и Apple използват собствени обекти) Клиентите могат да гледат / да се абонират, за да получат известие за webhook, когато се променят събитията Поддържа увеличени синхронизации за скорост... но също така изисква от вас да се справяте с изтичане на срока и повторно синхронизиране сами Използва квоти и лимити за намаляване на проблемите с изпълнението Те ще ви дадат достатъчно, за да направите всичко, от което се нуждаете, но няма да го измислят за вас. HTML оформление Да, структурирането на HTML всъщност може да бъде интересно! Тъй като изгледите на календара са богати на съдържание, Ако не са изолирани. Големи проблеми с изпълнението се случват Ето и най-важните HTML слоеве: Мрежата: дневен ред, дневни колони, навременни събития, контейнер Събитието за преглед, което не може да бъде заключено в ред/колона Това ви позволява да DND задачи в мрежата Форми: плаващи до събития в мрежата и разширени в диалог на цял екран Тост: За потвърждаващи съобщения Фронтални алгоритми Всеки клиент на календара има няколко сочни алгоритма : the length, height, and coordinates (X, Y) of each event div. To compute this, you need to account for the event duration and view scale. Event position : The width and Y coordinates, which need to be adjusted based on the surrounding events. All-day event lengths : how to adjust events when they share times. Gcal’s implementation is more sophisticated compared to Outlook’s (which halves each event). Pseudo-code below. Overlapping events // overlapping events logic if start or end of targetEvent overlaps with any(events): if start and end of targetEvent = start and end of any(events): orderEventsAlphabeticallyByTitle() if start of targetEvent = start of any(events) and end != end of any(events): orderByDuration() //longest events go behind shorter events if start or end of targetEvent != start or end of any(events): if targetEvent overlaps multiple events: targetEventGoesInFrontOfEvents() else: orderEventsByStart() //events that start earlier go behind това за пълното изпълнение на тези алгоритми. Комплектът Compass Repo Услуги Това са външните работни коне, които позволяват на клиентския код да остане прост и надежден Сервиз за сърцебиене — позволява на GCal да бъде надежден и да се върне в офлайн режим грациозно Служба за събития — събития в стил pub/sub, които захранват уеб-хакове за клиенти. Услуга за уведомления — координиране на времето на уведомленията ви преди събитие. Клиентът може да направи това сам по себе си, но би било по-малко надеждно. [ Вземи Изграждането на приложение CRUD в глобален мащаб може да изглежда просто от архитектурната диаграма, но тази простота все още изисква високо ниво на изпълнение. API надеждност: Тъй като толкова много приложения разчитат на двупосочно синхронизиране с GCal на потребителя, API трябва да бъде проста, разширяема и надеждна. Сигурност на данните: Данните от календара са изключително чувствителни.Те разчитат силно на роли, базирани на обхвата, за да гарантират, че само хората / приложенията, които упълномощавате, могат да имат достъп до данните ви. Услуги за мониторинг: Здравните проверки, регистрирането и синхронизирането се случват непрекъснато зад кулисите. Като се има предвид мащабът на изискванията, можете да направите живота по-лесен за себе си, като просто . not doing things Да не правим нещата Не е нужно да използвате стека за тенденции. Представете си, че са изпуснали всичко, за да пренапишат приложението си в Angular. След това реагирайте. След това Svelete. След това NextJS. След това HTMX. Всички те дойдоха след като Google Календар беше изпратен. GCal избра JS, премести се в дясната лента и от десетилетия се движи на 64MPH. Никой не се интересува. Не е нужно да публикувате на всяка платформа. Изтеглете настолното приложение Google Календар сега. Не е нужно да следвате тенденциите в стила. Bootstrap. Bulma. стилизирани компоненти. Tailwind. имена на класове CSS. Не е нужно да имате най-добрия UX. Тъмен режим. Форми, които спестяват пространство. #FFFFFF светъл режим. Форми с пълна страница. Не е нужно да имате най-добрата производителност. Техният рейтинг за производителност е 31/100. Както и в живота, си струва да се опознаете, когато изпращате продукт. Календарът на Google не се опитва да бъде модерното приложение, което изпълнителните асистенти използват, за да планират 40 срещи на ден (за това е Vimcal). Google Календар има за цел да бъде просто приложение, което всеки от неговите 2 милиарда потребители може да работи без ръчно задържане. Той получава 88/100 по достъпност. UI не се променя. Той не пада, и има поддръжка офлайн, ако го прави. Това просто работи. Това е изобилие. За да получите тези дълбоки гмуркания във вашата пощенска кутия, се абонирайте за моя бюлетин, . пълномащабен инженер