Tag Archives: Кеш

Бедният човек на кеширане в JavaScript

[TL;Д-р версия: използва бисквитки за да съхранява резултатите от async повиквания; сравнимостта на резултатите от минали async повиквания веднага и след това ги утвърждава след зареждане на страницата.]

Съм бил на работа в интранет сайта на SharePoint за клиент, което функции, наред с други неща, стилизирана допълнителна навигация, чието меню опции се управляват чрез редовни стар списък по избор.  Идеята е, че клиентът получава за контрол на сайта "тяхната" меню без чувства или са засегнати от глобалната навигационна, изведен от нея.

(има нещо невероятно подривни за добавянето на CEWP, който сочи към HTML файл, който зарежда някои CSS и JS да променят фундаментално почти всичко за поведението на даден сайт..., но това е за друг пост)

Кодът за тази доста проста:

  • Изчакайте страницата да завърши зареждането и асинхронно повикване към товаря горе меню елементи от списък с помощта на почивка или lists.asmx или каквото и
  • Използване на jQuery, динамично пренесат китка, ако <Li>снимки на вътре родител <UL> (Вижте Кристиан Pinder статия тук за опростено обяснение на това tecnnique)
  • Използвайте CSS за цялото форматиране
  • Печалба!

Възпалено място тук е, че всеки път, когато някой удари един от страници на сайта, този потребител уеб браузър се достига до получите елементи от списъка.  След като dev е пълна и изпитване е доказано неща, за да бъде стабилна и пълна, тази покана е необходимо повече от 99% на времето, тъй като менюто рядко промени.  Тя също има странни UI влияние, което е често срещани в този смел нов свят на хипер-ajaxy уеб сайтове – страницата се рендира и само тогава прави менюто.  Той е нервен и разсейващи по мое мнение.  И нервност. Така, кеширане. 

Аз промяна логиката thusly:

  • Потърсете "бисквитка" в браузъра, която съдържа менюто, тъй като аз последно го прочетете
    • Ако намерени, направи го веднага.  Не чакайте за страницата, за да завърши зареждането.  (Трябва да се уверете, че HTML е стратегическо място тук, но това не е трудно да се направи).
  • Изчакайте страницата да завърши зареждането и асинхронно повикване към товаря горе меню елементи от списък с помощта на почивка или lists.asmx или каквото и
  • Сравнете това, което получих срещу бисквитката
    • Ако тя съвпада, Стоп
    • В противен случай, използване на jQuery, динамично пренесат китка, ако <Li>снимки на в <UL>
  • Използвайте CSS за цялото форматиране
  • Печалба!

Някои от вас ще кажат, "Ей! Няма реален кеширане връщане тук, тъй като вие сте четене на менюто все пак всеки път.”  И вие сте прав-не съм дава сървъра всякакъв вид на почивка.  Но тъй като повикването е готино и се случва след първоначалните констатации на страницата HTML payload напълно прави, Той се "чувства" по-отзивчиви към потребителя.  Менюто прави доста много, тъй като страницата равенства.  Ако менюто се случва с промяната, потребителят е подложен на нервност водих на менюто, но само че едно време.

Има няколко начина да направите това кеширане по-ефективно и да помогне на сървъра в същото време:

  • В едно правило, че кеша на"бисквитка" е валиден за най-малко 24 часове или някои други срокове. Както дълъг както там е не издишвам бисквит, Използвайте бисквитка меню снимка и никога не хит на сървъра.

Ами..., това е всичко, което дойде на ум в момента :). 

Ако някой има някакви умни идеи тук бих искал да ги знаят.

И на последно място-тази техника може да се използва за други неща.  Този клиент страница има няколко неща, данни задвижване на различни страници, много от тях промяна сравнително рядко (като веднъж седмично или веднъж месечно).  Ако насочвате конкретни области на функционалност, Можете да дадете по-отзивчиви потребителски интерфейс чрез издърпване на съдържанието от местните бисквитка се съхранява и оказване незабавно.  Той се чувства по-бързо за потребителя дори ако не записвате сървъра всички цикли.  Вие може да запишете на сървъра цикли от вземане на решение за някои условията и предпоставките да обезсили кеш тази местна бисквитка.  Това е всички ситуационни и artsy неща и наистина най-забавно :). 

</край>

undefinedАбонирайте се за моя блог.

Следвайте ме на Twitter в http://www.twitter.com/pagalvin