Node Js Forex


Dette er sannsynligvis en av de mest spennende tingene jeg har opplevd siden jeg begynte å spille rundt med JavaScript. Hvis du noen gang har skrevet en noe komplisert JS-kode, kan du ha lagt merke til at tregere datamaskiner-nettlesere (som FF2 på Mac) vil fryse hvis du løper gjennom en stor sløyfe som gjør noen tunge operasjoner (hendelsesbindinger, dom manipulasjoner, etc.). For meg hos en bruker har dette alltid vært veldig irriterende siden det bare kommer inn i arbeidsflyten din, og hvis du blir uheldig, kan det til og med krasje nettleseren din. Så langt trodde jeg at den eneste måten å unngå dette var ved å skrive mindre intens JavaScript og å optimalisere helvete ut av det. Men med de siste oppgraderingene som kommer til PostTask, har vi nådd det punktet hvor vi ofte trenger å binde opptil 300 hendelser () på sidebelastning, samt utføre en hel rekke andre operasjoner. Det kom til det punktet hvor lasting av siden ville fryse FF2 på mac for en vanvittig 16 sekunder - helt uakseptabel av hvilken som helst standard. Dette innlegget handler om hvordan et enkelt triks reduserer initialiseringstiden ned til 5 sekunder, samtidig som du unngår en hvilken som helst nettleser på fryseren. Den store hemmeligheten - Bruke JavaScript til partisjon arbeidsbelastning Nøkkelproblemet jeg identifiserte som er ansvarlig for nettleseren er at JavaScript kjører i en enkelt tråd. Dette betyr at mens det er noen JS-kode som kjøres, kan ingen annen kode kjøre samtidig. Fra mine gamle VB-dager husket jeg at det pleide å være en funksjon kalt doEvents () som du kunne sette inn i store løkker for å holde appene dine fra å fryse. Det som var gjort, var i hovedsak å se om det var noen annen kode som måtte løpe, kjøre den og deretter gå tilbake til sløyfen din. JavaScript har ikke en slik funksjon, men noe som kommer veldig nært - timere. John har nylig gjort et godt innlegg om dem som bekreftet mine tidligere eksperimenter med dem: Hvis du angir et intervall eller timeout av la oss si 50ms i JavaScript, er det ingen garanti for når hendelsen vil brenne. Det eneste JS lover deg, er ikke å skyte hendelsen før 50m er over. Annet da det bare prøver å utføre hendelsen ASAP. Det betyr at hvis det er noen JS-kode som kjører, vil ingen brann skje til koden med kode er ferdig. Det betyr også at flere hendelser (intervalltidsavbrudd osv. Tilbakeringinger) kan kjøre opp over en stund og så brann tilbake til baksiden. Det som virker som et veldig irriterende problem som du må jobbe rundt hvis du vil gjøre, kan si jevne animasjoner, viser det seg at dette også åpner en bred rekke muligheter for å skrive asynkron kode i JS. Og ved asynkron mener jeg kode som ikke vil utføres som en del av din normale programflyt, men når det er praktisk for JS, må nettleseren utføre den. Du har kanskje allerede kommet til den konklusjonen jeg gjorde for en liten stund siden: Dette er en perfekt mekanisme for å dele en stor operasjon opp i mindre biter som nettleseren kan behandle når den er praktisk og ikke vil forårsake noen fryser. Dette virker alltid best hvis du lar noen plass til å puste for nettleseren mellom å utføre kodebiter (1-5m er vanligvis nok). Her er noen kode som kan oppnå dette på en enkel måte å bruke:. kø 123 timer: null, kø: 91 93, legg til: funksjon 40 fn, kontekst, tid 41 123 var sattTimerfunksjon 40 tid 41 123. kø. Timer settTid ut 40 funksjon 40 41 123 gang. kø. legg til 40 41 hvis 40. kø. lengde 41 123 settTimer 40 gang 41 125 125. tid 2 41 125 hvis 40 fn 41 123. kø. trykk 40 91 fn, kontekst, tid 93 41 hvis 40. kø. lengde 1 41 123 setTimer 40 gang 41 125 retur 125 var neste. kø. skift 40 41 hvis 40 neste 41 123 tilbake 0 125 neste 91 0 93. ring 40 neste 91 1 93 vindu 41 retur neste 91 2 93 125, klart: funksjon 40 41 123 clearTimeout 40. kø. timer 41. kø. Måned 91 93 125 125 Forsinket hendelse En av tingene vi bruker dette til i PostTask er det jeg kaller sen hendelse bindende. La oss si at du har følgende kode: (Merk: Dette kan forenkles mye, men på denne måten er det lettere å forstå hvordan refactoring fungerer) 40 dokument 41. klar 40 funksjon 40 41 123 mye lis, la oss si 500 40 li 41. hver 40 funksjon 40 41 123 40 denne 41. bind 40 klikk. funksjon 40 41 123 varsel 40 Ja du klikket meg 41 125 41 125 41 125 41 Du vil sikkert merke at det allerede har en merkbar innvirkning på sidens initialiseringstid mens du fryser nettleseren under den. For å unngå det kan det være like enkelt som: 40 dokument 41. klar 40 funksjon 40 41 123 mye lis, la oss si 500 40 li 41. hver 40 funksjon 40 41 123 var selv dette. doBind-funksjon 40 41 123 40 selv 41. bind 40 klikk. funksjon 40 41 123 varsel 40 Ja du klikket meg 41 125 41 125. kø. legg til 40 doBind, dette 41 125 41 125 41 Dette bør minimere sidens initialiseringstid ned til nesten sin ikke-JS-hastighet, mens du også binder hendelsene i tide. I hovedsak i stedet for å knytte hendelsen direkte sammen med dokumentet ferdig oppfinnelse, innlemmer du bare hver binde i sin egen lukking som du legger til i en kø for senere utførelse. Dette betyr at brukeren vil se siden veldig raskt, mens i bakgrunnen hver 2ms får et nytt li-element bindingen sin ferdig. Selvfølgelig kan brukeren nå gjøre noe veldig irriterende og klikke på et element før bindingen er ferdig, noe som kan skru opp ting. Dette er imidlertid svært lite sannsynlig. For en, brukeren må være veldig rask, fordi helvete må klikke i Neat. Jeg har brukt ExtJS til å utvikle min webapp og har ikke spilt inn i dette problemet (enda) eller til og med vurdert om det var en DoEvents som å ringe for js. Jeg lurer på om denne strategien enkelt kan implementeres i ExtJS. når jeg trenger det, kommer jeg til å slå) For noen av dere står fast i dag som meg selv, for intensive løkker i VB, ring DoEvents og søvn API-anropet (null ms er tilstrekkelig) for å virkelig gi behandling. Ellers forblir CPUen festet under løkken. Flott artikkel Felix Im tucking dette bort for en regnfull dag sikkert. Im med Atanas om håndtering av hendelsesbinding til foreldrene ul i stedet for de enkelte barna, men selvfølgelig er alle hendelser som er bindende, ikke alltid denne rene kuttet. Skal linje 6 i din første kode leses:.queue. timer setTimeout (funksjon () Jeg tror logikken er litt vanskelig og kan bruke noen kommentarer. Javascript er som en vits. Det gir feil mye tid. De er alle basert på nettleserens kompatibilitet. Hvorfor programvareleverandørene slutter å slå seg selv og utvikle en felles nettleser Peter: Jeg fikser det, takk for at du skjønte det. Beklager koden, dette er ment som en PoC, og jeg vil gjøre noen endringer i det før du setter ut en utgivelsesversjon. Forex: Nei, prøver å øke PR med en ikke-følger-link er en vits). Du bør tenke på en karrierebryter - verken JS eller spamming synes å være noe du er glad i. Din internkompetanse er utvidet og diversifisert etter behov. Co-source-prosjekter med oss ​​- gjør det mest ambisiøse av dine forpliktelser. Programutviklingstjenester Bygg en nyskapende applikasjon fra grunnen, integrere programvareverdier eller opprettholde en levende distribusjon mdash uansett mål, vi kan hjelpe deg med å oppnå det. Application modernization amp migration Renovate monolithic , koblede eldre applikasjoner og dra nytte av den nyeste teknologien. Invester i fremtiden for virksomheten din i dag QA amp Software Testing QA er en hjørnestein i en prosjektsuksess. Vi lager en effektiv, banebrytende testprosess for å levere kvalitet som overgår kundens forventninger. Nød å laste ned historiske lagerdata Trenger en stor mengde, dvs: siden 1962 Vel, se ikke lenger, jeg har deg dekket. Slik laster du ned historisk lagerinformasjon fra Yahoo Yahoo har en hemmelig API de bruker på egne sider som lar deg vise historiske lagerdata. APIen er REST basert og veldig enkel å bruke. Du må spesifisere hvert lager ticker du leter etter og startdatoen du vil ha historien fra. (Den eldste datoen ser ut til å være rundt 1962.) C Historisk lager Nedlastingskode Hvis du vil bruke den uutokumenterte Yahoo API-en for å laste ned historiske lagerdata, må du definere en lager slik: Koden til å faktisk laste ned og analysere resultatene av den historiske bestanden data, vil du trenge noe som ligner på C-koden nedenfor: Eksempel på bruk av C Historical Stock Downloader Lag en enkel C-konsollprogram og legg til denne koden:

Comments