Kuukausiarkistot: Tammikuuta 2014

Köyhän on välimuistin ohjelman

[TL;DR versio: käytä evästeitä vanhempi puhelut tulokset; tekevät viime vanhempi puhelut tulokset välittömästi ja vahvistaa niitä jälkeen sivun lataus.]

Olen työskennellyt SharePoint intranet-sivustossa asiakas että ominaisuudet, muun muassa, tyylitelty toissijaiseen selailuun jonka valikkovaihtoehdot hallinnoidaan kautta säännöllisesti vanha mukautetun luettelon.  Ajatuksena on, että asiakas saa hallita "niiden" sivuston valikko vaikuttamatta tai sairastumatta maailmanlaajuisen satelliittinavigointijärjestelmän ojensi sen.

(on jotain uskomattoman kumouksellista lisäämisestä CEWP, joka viittaa HTML-tiedosto joka lataa CSS ja JS perusteellisesti lähes kaikki sivuston käytös... mutta se on toiseen virkaan)

Melko yksinkertainen koodi:

Kipeä paikalla täällä on aina joku osuu sivuston sivut, käyttäjän selain ulottuu saada kohteita luettelosta.  Kun dev on valmis ja testaus on osoittanut asiat on vakaa ja täydellinen, Tämä kutsu on tarpeetonta yli 99% aikaa, koska valikko harvoin muuttuu.  On myös outo UI vaikuttaa, joka on yleinen uudessa uljaassa maailmassa hyper ajaxy verkkosivujen – kohdistuksessa ja vasta sitten valikko tehdä.  Se on hermostunut ja häiritseviä mielestäni.  Ja hermostuneisuus. Niin, välimuistiin. 

Olen muuttanut logiikan thusly:

  • Etsi evästeen selaimessa, joka sisältää valikon olen viimeksi lukenut
    • Jos löytyy, tehdä välittömästi.  Älä odota hotellipoika jotta lopettaa lastaus.  (Haluat Varmista, että HTML on strategisesti sijoitettu tähän, mutta se ei ole vaikea tehdä).
  • Odota, sivu latautunut ja tehdä asynkroninen soittaa lataamaan valikkovaihtoehtojen luettelosta, käyttäen loput tai lists.asmx tai mitä tahansa
  • Vertaa, mitä olen saanut vastaan evästeen
    • Jos se vastaa, Seis
    • Muuten, käyttäen jQuery, dynaamisesti täyttää joukko jos <Li>on tässä <UL>
  • Käytä CSS tehdä kaikki muotoilut
  • Voitto!

Jotkut teistä tulevat sanomaan, "Hei! ei ole todellista caching menossa täällä, kun luet menu joka tapauksessa joka kerta, kun.”  Ja olet oikeassa-en anna palvelimen kaikenlaista tauko.  Mutta koska puhelu asynkronisen ja tapahtuu jälkeen sivun alkuperäinen HTML payload täysin tekee, "tuntuu" enemmän altis jotta käyttäjä.  Valikko tekee melko sivun lähestyessä.  Jos valikon tapahtuu muutos, käyttäjä joutuu hermostunut uudelleen piirtää valikko, mutta vain tämän yhden kerran.

Olemassa joitakin keinoja tehostaa tämä välimuisti ja auttaa palvelimelle samaan aikaan:

  • Sisältö "cookie cache" on voimassa vähintään 24 tuntia tai muut aikataulua. Niin kauan kuin ei ole vanhentunut eväste, käyttää cookie's menu tilannevedosta ja koskaan osuma palvelimen.

No... se on kaikki mitä tulee mieleen juuri nyt :). 

Jos joku on mitään viisaita ajatuksia tästä olisi kiva tietää ne.

Ja lopuksi-tätä tekniikkaa voidaan käyttää muita juttuja.  Tämän asiakkaan sivulla on monia dataan perustuva asioita eri sivuille, Monet niistä muuttuvat melko harvoin (kerran viikossa tai kerran kuukaudessa).  Jos laadit tietyillä aloilla toiminnallisuutta, Voit antaa herkemmin UI vetämällä sisältöä paikallisen evästeen Storesta ja tekee välittömästi.  Tuntuu nopeammin käyttäjälle, vaikka ei tallennetaan palvelimen mitään sykliä.  Voit voi Tallenna palvelimen sykliä päättäessään joitakin edellytyksiä ja laukaisee mitätöidä paikallisen evästeen välimuistin.  Thats kaikki tilannekohtaista ja muka juttuja ja todella hauskaa :). 

</loppu>

undefinedTilaa blogiin.

Noudata minut viserrys http://www.twitter.com/pagalvin

Miten tehdään: Määritä yksikkö testi ja testin kattavuus QUnit.js ja Blanket.js toimisto 365 SharePoint App

Intro

Tutkineet yksikön testaus ja testata kattavuus ohjelman kuten olen työtä uusi SharePoint-app SharePoint Onlinessa toimistossa 365 Sviitti.  Ilmeinen tutkimus polkuja sai minut Qunit.js ja sen jälkeen, - Blanket.js.

QUnit haluan perustaa yksikkö testit ja ryhmittele ne moduulit.  Moduuli on yksinkertainen tapa järjestää liittyvät testit. (En ole varma, olen käyttänyt sitä tarkoitetulla tavalla, mutta se toimi minulle toistaiseksi pieni joukko tähän mennessä määritellyt).

Blanket.js integroituu Qunit ja se näyttää minulle todellinen riviä JavaScript, jotka olivat – ja mikä tärkeintä-ei itse asiassa suoritettu aikana testit.  Tämä on "kattavuus"-linjat, jotka suorittaa katetaan testi, toiset taas eivät.

Välillä perustaa hyvä testitapaukset kattavuus, voimme vähentää riskejä meidän koodi on piilotettu vikoja.  Hyvinä aikoina.

Qunit

Olettaen sinulla on Visual Studio project määrittää, Aloita lataamalla ohjelman Paketti http://qunitjs.com.  Lisää JavaScript- ja vastaavia CSS ratkaisusi.  Mine näyttää tältä:

image

Kuva 1

Kuten näette, Käytin 1.13.0 silloin kirjoitin tämä blogi. Älä unohda ladata ja lisätä CSS-tiedosto.

Että pois tieltä, Seuraava askel on luoda jonkinlainen testi valjaat ja viitata Qunit-bittiä.  Olen testaus joukko toimintoja kutsutaan "QuizUtil.js", joten olen luonut HTML sivu nimeltä "QuizUtil_test.html" kuten komentosarjatiedoston:

image Kuva 2

Tässä on koodi:

<!DOCTYPE HTML>
<HTML xmlns"http =://www.w3.org/ 1999/xhtml">
<pää>
    <otsikko>QuizUtil testi Qunit</otsikko>
    <linkki rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <Script tyyppi= text/javascript"" src="QuizUtil.js" tietoja-kansi></Script>
    <komentosarjan tyyppi ="text/javascript" src ="qunit-1.13.0.js"></Script>
    <komentosarjan tyyppi ="text/javascript" src ="blanket.min.js"></Script>

    <Script>
        moduuli("getIDFromLookup");
        testi("QuizUtil getIDFromLookupField", funktio () {
            var goodValue = "1;#Paul Galvin";

            yhtä suuri(getIDFromLookupField(goodValue) + 1, 2), "Tunnus [" + goodValue + "] + 1 olisi 2";
            yhtä suuri(getIDFromLookupField(ei määritetty), ei määritetty, "Määrittämätön syöteargumentin tulisi palauttaa tulos.");
            yhtä suuri(getIDFromLookupField(""), ei määritetty, "Tyhjä syöteargumentin tulisi palauttaa Määrittämätön arvo.");
            yhtä suuri(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), ei määritetty,"Olisi aina palata tulos convertible kokonaisluku");
            yhtä suuri(getIDFromLookupField("2;#jonkun toisen henkilön"), "2", "Tarkistaminen [2;#jonkun toisen henkilön].");
            yhtä suuri(getIDFromLookupField("9834524;#Long-arvo"), "9834524", "Suuri arvo testi.");
            notEqual(getIDFromLookupField("5;#Kuka tahansa", 6), 6, "Testaus notEqual (5 ei vastaa 6 Tässä esimerkissä: [5;#Kuka tahansa]");

        });

        moduuli("htmlEscape");
        testi("QuizUtil htmlEscape()", funktio () {
            yhtä suuri(htmlEscape("<"), "&lt;", "Paeta vähemmän kuin-operaattori ('<')");
            yhtä suuri(htmlEscape("<div class =  "someclass">Tekstiä</div>"), "&lt;div class =&quot;someclass&quot;&gt;Tekstiä&lt;/div&gt;", "Monimutkaisempi merkkijono.");
        });

        moduuli("getDateAsCaml");
        testi("QuizUtil getDateAsCaml()", funktio () {
            yhtä suuri(getDateAsCaml(Uusi Päivämäärä("12/31/2013")), "2013-12-31T:00:00:00", "Testaus kova koodattu päivämäärä: [12/31/2013]");
            yhtä suuri(getDateAsCaml(Uusi Päivämäärä("01/05/2014")), "2014-01-05T:00:00:00", "Testaus kova koodattu päivämäärä: [01/05/2014]");
            yhtä suuri(getDateAsCaml(Uusi Päivämäärä("01/31/2014")), "2014-01-31T:00:00:00", "Testaus kova koodattu päivämäärä: [01/31/2014]");
            yhtä suuri(getTodayAsCaml(), getDateAsCaml(Uusi Päivämäärä()), "getTodayAsCaml() olisi sama getDateAsCaml(Uusi päivämäärä())");
            yhtä suuri(getDateAsCaml("hölynpölyä arvo"), ei määritetty, "Yritä saada päivämäärä hölynpölyä arvo.");
            yhtä suuri(getDateAsCaml(ei määritetty), ei määritetty, "Yritä saada päivämäärä [ei määritetty] päivämäärä.");
        });

        moduuli("getParameterByName");
        testi("QuizUtil getParameterByName (kyselyn merkkijonosta)", funktio () {
            yhtä suuri(getParameterByName(ei määritetty), ei määritetty, "Yritä saada määrittelemättömän parametrin tulee palauttaa undefined.");
            yhtä suuri(getParameterByName("ei ole olemassa"), ei määritetty, "Yritä saada parametrin arvon, kun tiedämme –parametria ei ole.");

        });

        moduuli("Evästeet");
        testi("QuizUtil eri evästeen toimintoja.", funktio () {
            yhtä suuri(setCookie("test", "1", -1), getCookieValue("test"), "Get asettaa evästeen pitäisi toimia.");
            yhtä suuri(setCookie("anycookie", "1", -1), tosi, "Asettaminen voimassa ruoanlaitto tulisi palauttaa"totta".");
            yhtä suuri(setCookie("hullu evästenimi !@#$%"%\^&*(()?/><.,", "1", -1), tosi, "Asettaminen huono evästenimi tulisi palauttaa"väärä".");
            yhtä suuri(setCookie(ei määritetty, "1", -1), ei määritetty, "Ohimennen epämääräinen kuin evästenimi.");
            yhtä suuri(getCookieValue("ei ole olemassa"), "", "Eväste ei ole testi.");
        });

    </Script>
</pää>
<kehon>
    <div tunnus= "qunit"></div>
    <div tunnus= "qunit-valaisin"></div>

</kehon>
</HTML>

On useita asioita tapahtuu täällä:

  1. Vertailemalla minun koodi (QuizUtil.js)
  2. Vertailemalla Qunity.js
  3. Osien tarkentaminen (getIDFromLookup, Evästeet, ym.)
  4. Saattaminen <div> jonka tunnus on "qunit".

Sitten, Vedän vain tämän sivun ja saat jotain tällaista:

image

Kuva 3

Jos katsot yläosassa, sinulla on muutamia vaihtoehtoja, joista kaksi mielenkiintoista:

  • Piilota läpäissyt testit: Selvältä.  Auttaa silmään vain nähdä ongelma-alueet ja ei paljon sotkua.
  • Moduuli: (pudota alas): Tämä suodattaa alas vain näiden ryhmien haluamasi testit testit.

Mitä testit itse-huomautuksia:

  • On sanomattakin selvää, että sinun täytyy kirjoittaa koodia niin, että se on testattavissa ensimmäinen paikka.  Työkalulla voi auttaa valvoa tätä kurinalaisuus. Esimerkiksi, Minulla oli toiminto nimeltä "getTodayAsCaml()”.  Tämä ei ole hyvin todentaa, koska ei ole syöteargumentin ja testata sitä tasa-arvoa, Meidän on jatkuvasti päivittää testi koodi vastaamaan nykyistä päivämäärää.  Refactored lisäämällä tietojen syöttöparametri sitten kulkee kun haluan päivästä CAML muodossa päivämäärä.
  • Qunit puitteet asiakirjat omat testit ja se näyttää melko vankka.  Se voi tehdä yksinkertaisia asioita, kuten testaus tasa-arvoa ja on myös tukea ajax tyyli vaatii ("oikeaa" tai pilkkasivat käyttämällä suosikki Mockeria).
  • Menossa läpi myös pakottaa ajattelemaan kautta edge tapauksissa – mitä tapahtuu "Määrittämätön" tai tulee toimia välitettiin Null-arvo.  Siinä on kuollut yksinkertainen testata näitä skenaarioita ulos.  Hyvää kamaa.

Kattavuus Blanket.js

Blanket.js täydentää Qunit seuraamalla todellinen riviä koodia, joka suoritetaan aikana näkyä testeissä.  Se yhdistää oikea Qunit joten vaikka se on koko erillinen app, sillä kauniisti-se todella näyttää se on saumaton app.

Tämä on blanket.js toiminnassa:

image Kuva 4

image

Kuva 5

(On todellakin yläreunassa olevaa "Ota kattavuus"-valintaruutua [Katso kuva 3] jotta mahdollistaa nyt kuluva.)

Kuvassa korostettuna rivit 5 ei ole suoritettu mitään minun testit, joten minun täytyy suunnitella testi, joka aiheuttaa ne suoritetaan jos haluan Täysi kattavuus.

Saada blanket.js toimi seuraavasti:

  1. Lataa se http://blanketjs.org/.
  2. Lisääminen projektiin
  3. Päivitä testi valjaat sivu (QuizUtil_test.html minun tapauksessani) Seuraava:
    1. Viite koodi
    2. Sisustaa oman <Script> viittaus näin:
    <Script tyyppi= text/javascript"" src="QuizUtil.js" tietoja-kansi></Script>

Blanket.js poimii "data-cover" määritteen ja ei sen taika.  Se koukut osaksi Qunit, päivittää UI lisätä "Salli kattavuus" vaihtoehto ja voila!

Yhteenveto (TL; DR)

Kirjoittaa testi tapauksissa Qunit avulla.

  • Lataa se
  • Lisääminen projektiin
  • Kirjoittaa testi valjaat sivu
  • Luo testit
    • Refactor koodi voidaan todentaa
    • Olla luova!  Crazy ajatella, mahdotonta skenaarioita ja testata niitä joka tapauksessa.

Blanket.js avulla voidaan kattaa

  • Varmista Qunit toimii
  • Lataa blanket.js ja lisääminen projektiin
  • Lisääminen testisivulle valjaat:
    • Lisätään viittaus blanket.js
    • Lisää "tiedot-cover"-määritteen sinun <Script> Tag
  • Qunit testit.

Ei koskaan ollut mitään vastaavaa ja oli alkeellinen juttuja työskentelevien kourallinen tunteja. 

Happy testaus!

</loppu>

undefinedTilaa blogiin.

Noudata minut viserrys http://www.twitter.com/pagalvin