Knoten Js Forex


Das ist wohl eines der aufregendsten Dinge, mit denen ich da bin. Wenn du jemals einen etwas komplizierten JS-Snippet geschrieben hast, dann hättest du vielleicht bemerkt, dass langsame Computer-Browser (wie FF2 auf Mac) einfrieren, wenn du eine große Schleife durchläuft, die schwere Operationen (Eventbindungen, Dommanipulationen etc.) macht. Für mich bei einem Benutzer ist das schon immer sehr ärgerlich, da es gerade in Ihren Arbeitsablauf kommt und wenn man Pech bekommt, könnte man sogar deinen Browser stürzen. Bisher habe ich gedacht, der einzige Weg, um dies zu vermeiden war, indem Sie einfach weniger intensive JavaScript undor optimieren die Hölle aus ihm heraus. Doch mit den jüngsten Upgrades, die für PostTask kommen, erreichten wir den Punkt, an dem wir oft bis zu 300 Events () auf Seite laden müssen, sowie eine ganze Reihe anderer Operationen durchführen. Es kam zu dem Punkt, wo das Laden der Seite FF2 auf Mac für eine wahnsinnige 16 Sekunden einfrieren würde - absolut inakzeptabel von jedem Standard. Dieser Beitrag geht es darum, wie ein einfacher Trick die Initialisierungszeit auf 5 Sekunden reduziert hat, während jeglicher Browser gleichzeitig einfrieren wird. Das große Geheimnis - Verwenden von JavaScript zur Partition Workload Das Schlüsselproblem, das ich identifiziert habe, das für das Browser-Einfrieren verantwortlich ist, ist, dass JavaScript in einem einzigen Thread läuft. Dies bedeutet, während es einige JS-Code ausgeführt wird, kann kein anderer Code zur gleichen Zeit laufen. Von meinen alten VB-Tagen erinnerte ich mich, dass es früher eine Funktion namens doEvents () gab, die man in große Loops setzen konnte, um deine Apps vor dem Einfrieren zu halten. Was es tat, war im Grunde zu sehen, ob es irgendeinen anderen Code gab, der laufen musste, ihn ausführen und dann wieder in deine Schleife zurückkehren musste. JavaScript hat keine solche Funktion, aber etwas, das kommt sehr nah - Timer. John hat vor kurzem eine gute Post über sie, die meine früheren Experimente mit ihnen bestätigt: Wenn Sie ein Intervall oder Timeout von Lets sagen, 50ms in JavaScript gibt es keine Garantie, was auch immer, wenn das Ereignis wird Feuer. Die einzige Sache, die JS verspricht, ist, das Ereignis nicht zu feuern, bevor 50ms vorbei sind. Andere dann, dass es nur versucht, das Ereignis ASAP auszuführen. Das bedeutet, wenn es irgendeinen JS-Code gibt, der gerade läuft, dann wird kein Ereignis ausgelöst, bis der Codeblock fertig ist. Es bedeutet auch, dass mehrere Ereignisse (Intervall-Timeout-Klick etc. Rückrufe) können sich über eine Weile und dann Feuer zurück nach hinten. Was scheint ein sehr lästiges Problem zu sein, dass du dich umgehen musst, wenn du willst, sagen wir glatte Animationen, es stellt sich heraus, dass dies auch eine breite Palette von Möglichkeiten zum Schreiben von asynchronem Code in JS eröffnet. Und durch asynchrone ich meine Code, der nicht als Teil Ihres normalen Programmablaufs ausgeführt wird, aber wann immer es für JS der Browser bequem ist, es auszuführen. Sie sind vielleicht schon zu dem Schluss gekommen, den ich vor einiger Zeit gemacht habe: Dies ist ein perfekter Mechanismus, um eine große Operation in kleinere Stücke aufzuteilen, die der Browser verarbeiten kann, wann immer es bequem ist und keine Einfrierungen verursacht. Dies funktioniert immer am besten, wenn Sie den Raum verlassen, um für den Browser zwischen der Ausführung der Code-Chunks (1-5ms sind in der Regel genug) zu atmen. Hier ist ein Code, der das in einer einfach zu bedienenden Weise erreichen kann:. Warteschlange 123 Timer: null, Warteschlange: 91 93, add: Funktion 40 fn, Kontext, Zeit 41 123 var setTimerfunktion 40 mal 41 123. Warteschlange. timer setTimeout 40 Funktion 40 41 123 Zeit. Warteschlange. Füge 40 41 hinzu, wenn 40. Warteschlange. Länge 41 123 setTimer 40 Zeit 41 125 125. Zeit 2 41 125 wenn 40 fn 41 123. Warteschlange. Push 40 91 fn, Kontext, Zeit 93 41 wenn 40. Warteschlange. Länge 1 41 123 setTimer 40 Zeit 41 125 zurück 125 var next. Warteschlange. Umschalten 40 41 wenn 40 weiter 41 123 zurück 0 125 nächste 91 0 93. anrufen 40 weiter 91 1 93 fenster 41 zurück nächstes 91 2 93 125, klar: funktion 40 41 123 clearTimeout 40. Warteschlange. timer 41 Warteschlange. queue 91 93 125 125 Spätereignis Bindung Eines der Dinge, die wir hier für PostTask verwenden, ist das, was ich spätes Ereignis binden kann. Lets sagen, dass Sie den folgenden Code haben: (Anmerkung: Das könnte viel vereinfacht werden, aber auf diese Weise ist es einfacher zu verstehen, wie das Refactoring funktioniert) 40 Dokument 41. bereit 40 Funktion 40 41 123 viel lis, sagen wir 500 40 li 41. Jede 40 Funktion 40 41 123 40 diese 41. binden 40 Klick. Funktion 40 41 123 Alert 40 Yeah du hast mich angeklickt 41 125 41 125 41 125 41 Sie werden wahrscheinlich feststellen, dass es bereits einen spürbaren Einfluss auf Ihre Seiten Initialisierungszeit beim Einfrieren des Browsers während es hat. Um zu vermeiden, dass es so einfach sein kann wie: 40 Dokument 41. bereit 40 Funktion 40 41 123 eine Menge von lis, sagen wir, 500 40 li 41. jeder 40 Funktion 40 41 123 var Selbst dies. DoBind-Funktion 40 41 123 40 selbst 41. bind 40 click. Funktion 40 41 123 Alert 40 Yeah du hast mich angeklickt 41 125 41 125. Warteschlange. Füge 40 doBind hinzu, diese 41 125 41 125 41 Dies sollte deine Seiteninitialisierungszeit bis zu fast ihrer Nicht-JS-Geschwindigkeit minimieren und gleichzeitig die Ereignisse rechtzeitig binden. Im Wesentlichen anstelle der Bindung der Veranstaltung direkt mit dem Dokument fertig erfinden, Sie einfach verkapseln jede Bindung in ihre eigene Schließung, die Sie zu einer Warteschlange für spätere Ausführung hinzufügen. Dies bedeutet, dass der Benutzer die Seite sehr schnell sehen wird, während im Hintergrund alle 2ms ein neues li Element bekommt seine Bindung getan. Natürlich könnte der Benutzer jetzt etwas wirklich ärgerlich machen und auf ein Element klicken, bevor seine Bindung beendet ist. Das ist aber sehr unwahrscheinlich. Einer, der Benutzer muss sehr schnell sein, denn die Hölle muss in Neat klicken. Ich habe mit ExtJS verwendet, um meine Webapp zu entwickeln und havent lief in dieses Problem (noch) oder sogar berücksichtigt, wenn es ein DoEvents wie Anruf für js. Ich frage mich, ob diese Strategie in ExtJS einfach umgesetzt werden kann. Wenn ich es brauche, komme ich klopfen) Denn jeder von euch steckt noch am Tag wie ich selbst, für intensive Loops in VB, ruf DoEvents und den Schlaf-API-Aufruf (null ms ist ausreichend), um die Verarbeitung wirklich zu erbringen. Andernfalls bleibt die CPU während der Schleife fest. Großer Artikel Felix Im tucking dies weg für einen regnerischen Tag sicher. Im mit Atanas in Bezug auf die Behandlung von Veranstaltung Bindung an die Eltern ul anstatt die einzelnen Kinder, aber natürlich alle Veranstaltung Bindung ist nicht immer diese saubere Schnitt. Sollte Zeile 6 in deinem ersten Code gelesen werden:.queue. timer setTimeout (function () Ich glaube, die Logik ist ein bisschen schwierig und könnte ein paar kommentieren. Javascript ist wie ein Witz, das gibt Fehler viel Zeit Auf Browser-Kompatibilität Warum die Software-Entwickler aufhören, sich selbst zu schlagen und einen gemeinsamen Browser zu entwickeln Peter: Ich habe es gebeten, danke für das Spotting. Entschuldigung für den Code, das ist als PoC gedacht und ich möchte einige Änderungen daran vor dem Ausstoßen machen Eine Release-Version Forex: Nein, versuchen, Ihre PR mit einem No-Follow-Link zu steigern ist ein Witz). Du solltest an einen Karriereschalter denken - weder JS noch Spamming scheint dir etwas Gutes zu sein. Dein hauseigenes Know-how erweitert und diversifiziert auf Nachfrage. Co-Source-Projekte mit uns - machen die ehrgeizigsten Ihrer Unternehmen möglich Anwendungsentwicklungsdienste Bilden Sie eine innovative Anwendung von Grund auf neu, integrieren Sie Software-Assets oder pflegen Sie eine Live-Bereitstellung mdash, was auch immer Ihr Ziel, wir können Ihnen helfen, es zu erreichen Anwendung Modernisierung Amp-Migration Renovieren monolithischen , Abgetrennte Legacy-Anwendungen und nutzen die neueste Technologie. Investieren Sie in die Zukunft Ihres Unternehmens heute QA amp Software Testing QA ist ein Eckpfeiler eines Projekterfolgs. Wir schaffen eine effektive, hochmoderne Test-Prozess, um Qualität zu liefern, die die Erwartungen der Kunden übersteigt. Need, um historische Bestandsdaten herunterzuladen Brauchen Sie eine große Menge dh: seit 1962 Nun schauen Sie nicht weiter, ich habe Sie abgedeckt Wie man historische Aktieninformationen von Yahoo Yahoo herunterladen kann Geheime API, die sie auf dort eigenen Seiten verwenden, mit denen Sie historische Bestandsdaten anzeigen können. Die API ist REST basiert und sehr einfach zu bedienen. Sie müssen jeden Stock Ticker Ihre Suche und das Startdatum, in dem Sie die Geschichte aus. (Das älteste Datum scheint um 1962.) C Historical Stock Downloading Code Um die undokumentierte Yahoo API verwenden, um historische Bestandsdaten herunterzuladen, müssen Sie eine Aktie wie folgt definieren: Der Code, um die Ergebnisse des historischen Bestandes tatsächlich herunterzuladen und zu analysieren Daten, benötigen Sie etwas Ähnliches mit dem C-Code unten: Beispiel für die Verwendung der C Historical Stock Downloader Erstellen Sie eine einfache C-Konsole Anwendung dann fügen Sie diesen Code:

Comments

Popular Posts