onsdag 27 juni 2012

Inkludera externa javascript från bokmärken

Ibland kan det vara bra att kunna ladda in externa JS-bibliotek när man undersöker/felsöker webbapplikationer (oftast av äldre modell utan något JS-bibliotek inkluderat).

Råkade ut för detta i veckan, då jag undersökte en Java Servlet. Denna servlet gjorde lite olika saker beroende på vilka HTTP-headers som skickades in. 

Jag ville undersöka hur servleten fungerade genom att debugga den lokalt. Kom på att jag kunde använda *jQuery för att snabbt skapa ett AJAX-request mot servleten. Dock hade inte denna applikation jQuery inkluderat, så därför lade jag till följande bokmärke i min webbläsare:


OBS: Notera att javascript: måste läggas till innan scriptet.

Genom att bara trycka på en knapp uppe i menyn fick jag nu tillgång till all jQuery biblioteket och dess funktionalitet. Snabbt smidigt och användbart!


Tips: Det andra argumentet (URL:en) i ovanstående kod kan bytas ut mot prompt('url?') för att kunna  lägga till andra JS-bibliotek.

Hade självklart mycket hellre mockat bort anrop mot databas, filsystem etc och skrivit jUnit-tester för att undersöka servleten, men eftersom jag inte ville ändra något av den ursprungliga koden var inte detta ett alternativ.


/Nils - från tåget mellan Alingsås till Jönköping

onsdag 20 juni 2012

Array.prototype.where

Angående förra inlägget...
Kom på att Array.map eller Array.filter hade fixat biffen!

Gjorde en modifiering av metoden och använde Array.prototype istället, vilket gör metoden enklare att använda.



Nyfiken som jag är skapade jag även ett prestandtest på jsperf.com mellan jQuery.filter, Array.filter och min egen implementation av Array.where.

Följande slutsatser kan dras av detta test.

  1. Validering kostar
  2. Function.call kostar

När jag körde koden ovan, klarade den ca 9 operationer/sekund medans Array.filter klarade ca 110 operationer/sekund (testat med Chrome 19 och Firefox 12 på Mac OS X 10.7). Efter att jag modifierade koden och plockade bort validering och Function.call klarade min implementation ca 370 operationer/sekund. Denna kod ses nedan:


Betyder detta att min implementation är bättre än Array.filter eller jQuery.filter? Kort och gott. Nej.
Varför är då min implementation snabbast?
Kanske för att...

  • Den inte har massa validering och annat som bör vara på plats? 
  • Jag råkat missa något? 
  • Mitt prestandatest är felaktigt?

I skrivande stund vet jag inte. Men när jag får tid över ska jag försöka ta reda på mer.
Återkom gärna om du vet!


/Nils

tisdag 19 juni 2012

Söka i en JS-array

Har börjat jobba i ett java-projekt i Alingsås, på ett nytt projekt på ett nytt jobb. Mer om detta vid ett senare inlägg! :)

Ägnade denna kväll med att sitta och hobby-knacka lite Javascript (för första kvällen på väldigt länge).
Slutade med att jag behövde en funktion som kollade om början av en textsträng i något element i en Array fanns.

Då jag inte tyckte Array.indexOf /jQuery.inArray fungerade och inte heller Array.map/jQuery.map skrev jag en egen enkel variant som gjorde jobbet:



Hoppas själv kunna nyttja lösningen i något kommande projekt, om inte var det en bra lärdom/repetition om anonyma funktioner i Javascript.

PS: Jag är medveten om att jag troligen kunde hittat någon färdig variant av funktionaliteten jag sökte. Troligen relativt enkelt genom att antingen använda Array.map/jQuery.map. Men jag ville testa att uppfinna hjulet själv ikväll :)

/Nils