Thursday, October 6, 2016

Javascript Read As Binary Options

readAsBinaryString sê dat die data moet verteenwoordig as 'n binêre string. waar: elke byte is verteenwoordig deur 'n heelgetal in die reeks 0..255. JavaScript nie die geval is 'n binêre tipe en só het hulle met 'n string met die waarborg dat geen karakter gestoor in die tou buite die omvang 0..255 sou wees. (Hulle kon gegaan het met 'n skikking van getalle in plaas, maar hulle didnt dalk groot Strings is meer geheue-doeltreffend as groot skikkings van getalle, aangesien Nommers swaai-punt.) As jy 'n lêer lees dis meestal teks in 'n westelike script ( meestal Engels, byvoorbeeld), dan is dit string gaan 'n baie soos die teks te kyk. As jy 'n lêer met Unicode-karakters daarin lees, moet jy 'n verskil sien, aangesien JavaScript snare is UTF-16 (besonderhede hieronder) en so 'n paar karakters sal waardes hê bo 255, terwyl 'n binêre string volgens die lêer API spec wouldnt het enige waardes bo 255 (youd het twee individuele karakters vir die twee grepe van die Unicode-kode punt). As jy lees van 'n lêer dis nie die teks glad ( 'n beeld, miskien), waarskynlik sal jy nog steeds 'n baie soortgelyke resultaat tussen readAsText en readAsBinaryString kry. maar met readAsBinaryString jy geweet dat daar 'n poging om 'n multi-byte rye as karakters vertolk gewoond wees. Jy weet nie dat as jy readAsText gebruik. omdat readAsText n enkodering bepaling sal gebruik om te probeer om uit te vind wat die lêers enkodering is en dan te karteer dit van Java UTF-16 snare. Jy kan die effek te sien as jy 'n lêer te skep en stoor dit in iets anders as ASCII of utf-8. (In Windows jy kan dit doen via Notepad die Save As so 'n enkodering drop-down met Unicode daarop, waardeur kyk na die data dit lyk asof hulle bedoel UTF-16 Im seker Mac OS en nix redakteurs het 'n soortgelyke funksie.) Hier 'n bladsy wat die gevolg van die lees van 'n lêer beide maniere dumps: As ek dit met 'n toets 1 2 3 lêer gestoor in UTF-16, hier is die resultate wat ek kry: Soos jy kan sien, readAsText vertolk die karakters en so ek het 13 (die lengte van toetsing 1 2 3), en readAsBinaryString didnt, en so ek het 28 (die twee-byte BOM plus twee grepe vir elke karakter). JavaScript snare is UTF-16 mag lyk soos 'n vreemde verklaring Arent hulle net Unicode Nee, 'n JavaScript string is 'n reeks van UTF-16-kode eenhede sien jy surrogaat pare as twee afsonderlike JavaScript karakters selfs al, in werklikheid, die surrogaat paar as 'n geheel is net een karakter. Sien die skakel vir meer inligting. digitalFresh: Die string is die binêre data. As jy kommentaar, ek gepos 'n voorbeeld wat kan help. JavaScript doesn39t 'n quotbinaryquot tipe en só het hulle met 'n string met die waarborg dat geen karakter gestoor in die tou buite die omvang 0..255 sou wees. (Hulle kon gegaan het met 'n verskeidenheid van getalle in plaas, maar hulle didn39t.) Die voorbeeld toon hoe om die rou waarde van 'n quotcharacterquot van die string te kry. â € T. J. Crowder 30 Junie 10 by 05:09 Morpheus: Omdat hierdie dinge is asynchrone, can39t dit uitsonderings wat jy nodig het om te kyk na die koppelvlak om te sien of there39s paar asynchrone wyse waarop dit verslae foute gooi. En inderdaad, FileReader het onerror hiervoor. As jy 'n lêer te gebruik: 4747 URL, dokument domein is nul, wat geneig is om jou toe te maak uit 'n klomp dinge (Ek don39t weet die besonderhede, ek dit nooit doen nie), ESP. wanneer die SOP kry in dit. I39m redelik seker it39s tot die leser, ten minste vir nou, as die veiligheid deel van die spec is nog voorlopige: w3.org/TR/FileAPI/security-discussion Maar ek wouldn39t verwag dat dit werk. â € T. J. Crowder 5 November 10 by 18:12 Baie dankie TJCrowder - ek verwyder my kommentaar aan ander uit om mislei deur my oorvereenvoudiging, en danksy voorkom vir die opstel van die besonderhede - ek is seker ander sal jou kommentaar te vind veel meer nuttig (en die lees van die artikel is regtig 'n goeie idee, soos jy sê, as 'n mens is mucking rond in hierdie gebied). â € Brian M. Hunt 30 Desember 14 by 14: 16Binary Options Trading Maak eenvoudig 'n voorspelling oor die vraag of 'n munt pare koers (bv EURUSD) sal styg of daal. 'N korrekte voorspelling sal jou toelaat om te verdien Jy kan opsies oop te maak met 'n geldigheid tydperk van van 30 sekondes. As jou voorspelling vir die opsie reg is, sal wins met dit tot 90 van fondse belê. As sodanig, belê 100 dollar in hierdie geval sou sien wat jy ontvang 190 dollar (belegging plus Proft). Voordele van Binary Options met Alpari Alpari: Finansies magnate Toekennings 2015 Winner in die nominasie vir Beste Binary Options Broker Vinnige Jy kan verdien uit handel binêre opsies in net 30 sekondes. Eenvoudige Jy hoef net te korrek te kies die rigting van die prys van die binêre opsie is op pad: 'n oproep of sit. Toeganklik te begin handel is maklik Die minimum koste van 'n opsie in die BinaryTrader platform is net 1 dollar. Deursigtige Die grootte van die potensiële wins vir alle binêre opsies word in advance. Daar is geen verskuilde kommissies. Kry alles youve earnt. Is jy gereed om die regte geld te verdien Open 'n rekening op die oomblik Neem deel aan ons Koning van die Hill wedstryd verdien selfs meer van binêre opsies Die aangedui opbrengste vir binêre opsies, en ook vorige opgawes, daar is geen waarborg van toekomstige opbrengste. Die potensiële wins grootte van 'n binêre opsie is veranderlike en hang af van die situasie op die mark. In dun of vinnig markte, kan handelstoestande verander en 'n paar tipes opsie of tydraamwerke kan inaccessible. As deel van 'n reeks artikels Ek bespreek 'n paar van die uitdagings wat ek in die gesig gestaar wanneer ek probeer om 'n HTML5 en JavaScript gratis aanlyn ikone redakteur bou . Ek wou gebruikers in staat wees om oop te maak en bestaande ikoon lêers te wysig in my ikoon redakteur. Soos ikoon lêers veelvuldige rame kan bevat, ek nodig het om toegang te verkry tot hierdie individuele rame sodat hulle kan vertoon en beskikbaar wees om te verander vir die gebruiker. Die aantal, grootte en ligging van rame vervat in 'n ikoon is al gestoor in die ikoon kop. Die ikoon kop is 'n versameling grepe geleë aan die begin van 'n ikoon lêer sodat ek nodig het om die binêre data wat in die lêer gelees. Ons kan nou lees lêers maklik in die leser sonder om enige data terug na 'n bediener te stuur. In hierdie paaiement wys ek hoe jy binêre data van 'n plaaslike lêer in die leser met behulp van die HTML5 lêer API kan lees. Om mee te begin was van plan om 'n inset element te voeg en stel die tipe kenmerk in te dien, dan in 'n script blok gaan ons die lêer insette onchange gebeurtenis te hanteer. Dit lyk gt160160160160160160160160160160160160160160160160160160160160160160160160160160160160 160160160160 Dit insette ID quotbrowseOpenquot tipe quotfilequot / GT 160160160160 Dit soort script quottext / javascriptquot GT 160160160160160160160160 var fileInput document. getElementById (quotbrowseOpenquot) 160160160160160160160160 fileInput. onchange funksie () 160160160160160160160160160160160160 // Kode te onchange gebeurtenis hanteer gaan hier 160160160160 160160160160 160160160160 Dit / script GT Dit / liggaam GT Nou moet ons die kode om die onchange gebeurtenis hanteer voeg. In hier gaan ons 'n FileReader voorwerp te skep. Ons sal die readAsBinaryString metode van die FileReader voorwerp wat ons die rou binêre data sal gee. Ons kan 'n lêer voorwerp te slaag om die readAsBinaryString as ons wil hê dat die hele lêer lees of ons kan 'n blob voorwerp slaag as ons wil net 'n sekere deel van 'n lêer te lees. In hierdie voorbeeld gaan ons 'n lêer voorwerp te slaag om die hele lêer te lees. Ons moet ook die onloadend geval van die FileReader hanteer as die data wat ons saamgelees met readAsBinaryString is slegs beskikbaar vir gebruik wanneer die hele lêer of blob is gelees deur die FileReader. Ons kode in die onchange event handler lyk nou soos hierdie. 160160160160160160160160 var fr nuwe FileReader () 160160160160160160160160 fr. onloadend funksie () 160160160160160160160160160160160160 // Kode te hanteer onloadend geval 160160160160 160160160160 160160160160160160160160 fr. readAsBinaryString (hierdie. files 0) In die onloadend event handler ons kan toegang tot die data wat pas deur gelees die FileReaders lei kenmerk. Ons kan dan lus deur die resultaat kenmerk en noem die charCodeAt metode om 'n heelgetal waarde van elke byte terugkeer. In hierdie voorbeeld gaan Im om die byte te skakel na 'n heksadesimale string verteenwoordiging behulp toString (16), die opbou van 'n lang tou en dan die tou aan die gebruiker vertoon. Hier is die volle werkende voorbeeld. Dit DOCTYPE HTML GT Dit html GT Dit kop GT 160160160160 Dit titel gtReading binêre data met die API lêer en JavaScriptlt / titel GT Dit / hoof GT Dit lyk gt160160160160160160160160160160160160160160160160160160160160160160160160160160160160 160160160160 Dit insette ID quotbrowseOpenquot tipe quotfilequot / GT 160160160160 Dit script type quottext / javascriptquot GT 160160160160160160160160 var fileInput document. getElementById (quotbrowseOpenquot) 160160160160160160160160 fileInput. onchange funksie () 160160160160160160160160160160160160 var fr nuwe FileReader () 160160160160160160160160160160160160 fr. onloadend funksie () 160160160160160160160160160160160160160160160160 var gevolg van hierdie. result 160160160160160160160160160160160160160160160160 var blok quotquot 160160160160160160160160160160160160160160160160 vir (var i 0 i LT hierdie. result. length i) 160160160160160160160160160160160160160160160160160160160160 var byteStr result. charCodeAt (i).toString (16) 160160160160160160160160160160160160160160160160160160160160 as (byteStr. length dit 2) 160160160160160160160160160160160160160160160160160160160160160160160160 byteStr quot0quot byteStr 160160160160160160160160160160160160160160160160160160160160 160160160160160160160160160160160160160160160160160160160160 Hex quot quot byteStr 160160160160160160160160160160160160160160160160 160160160160160160160160160160160160160160160160 waarskuwing (Hex) 160160160160160160160160160160160160 160160160160160160160160160160160160 fr. readAsBinaryString (hierdie. files 0) 160160160160160160160160 160160160160 dit / script GT dit / liggaam GT dit / html gtTable Inhoudsopgawe lokaliserings Lees lêers in JavaScript gebruik van die lêer APIs Inhoudsopgawe kriteria van die plek Jou blaaier kan nie die funksie te ondersteun in hierdie artikel. Inleiding HTML5 bied uiteindelik 'n standaard manier om interaksie met plaaslike lêers, via die lêer API spesifikasie. As voorbeeld van sy vermoëns, kan die lêer API gebruik word om 'n miniatuur voorbeeld van beelde te skep as theyre gestuur na die bediener, of 'n program toelaat om 'n lêer verwysing red terwyl die gebruiker is op die regte. Daarbenewens, kan jy kliënt-kant logika te gebruik om 'n oplaai mimetype ooreenstem met die lêeruitbreiding verifieer of beperk die grootte van 'n oplaai. Die spec bied verskeie koppelvlakke vir toegang tot lêers van 'n plaaslike lêersisteem: File - 'n individu lêer bied leesalleen inligting soos naam, lêergrootte, mimetype, en 'n verwysing na die lêer handvatsel. File List - 'n skikking soos volgorde van lêer voorwerpe. (Dink ltinput typefile multiplegt of 'n gids van lêers te sleep van die lessenaar). Blob - laat sny 'n lêer in byte wissel. Wanneer dit gebruik word in samewerking met die bogenoemde datastrukture, kan die FileReader koppelvlak gebruik word om 'n lêer deur bekende JavaScript gebeurtenis hantering asynchroon lees. Dus, is dit moontlik om die vordering van 'n lees te monitor, te vang foute, en te bepaal wanneer 'n vrag voltooi. Op baie maniere die API's lyk XMLHttpRequest se geval model. lêers kies van die eerste ding om te doen is seker dat jou leser ten volle ondersteun die lêer API: Natuurlik, as jou program slegs 'n paar van hierdie API sal gebruik, dienooreenkomstig verander hierdie brokkie. Die gebruik van vorm insette vir die kies van die mees eenvoudige manier om 'n lêer te laai is om 'n standaard ltinput typefilegt element gebruik. JavaScript gee die lys van geselekteerde lêer voorwerpe as 'n File List. Hier is 'n voorbeeld wat die veelvuldige kenmerk gebruik om toe te laat kies verskeie lêers gelyktydig: Voorbeeld. Die gebruik van vorm insette vir die kies van. Probeer dit met behulp van sleep en vir die kies van 'n Ander tegniek vir die laai van lêers is inheems sleep en van die lessenaar by die leser. Ons kan die vorige voorbeeld effens verander om drag sluit en drop ondersteuning. Voorbeeld. Met behulp van sleep en vir die kies. Probeer dit Drop lêers hier Nota: Sommige implementeer behandel ltinput typefilegt elemente as moedertaal druppel teikens. Probeer sleep lêers op die veld insette in die vorige voorbeeld. Lees lêers kom nou die pret deel Na youve 'n verwysing lêer verkry, instansieer n FileReader voorwerp om die inhoud daarvan gelees in die geheue. Wanneer die vrag afwerkings, is die lesers onload geval afgedank en sy gevolg kenmerk kan gebruik word om toegang te verkry tot die lêer data. FileReader sluit vier opsies vir 'n lêer te lees, asynchroon: FileReader. readAsBinaryString (BlobFile) - Die resultaat eiendom sal die lêer / druppels data as 'n binêre string bevat. Elke byte is verteenwoordig deur 'n heelgetal in die reeks 0..255. FileReader. readAsText (BlobFile, optencoding) - Die resultaat eiendom sal die lêer / druppels data as 'n teks string bevat. By verstek die string is ontsyfer as UTF-8. Gebruik die parameter opsionele enkodering kan 'n ander formaat spesifiseer. FileReader. readAsDataURL (BlobFile) - Die resultaat eiendom sal die lêer / druppels data geïnkripteer as data URL bevat. FileReader. readAsArrayBuffer (BlobFile) - Die resultaat eiendom sal die lêer / druppels data as 'n ArrayBuffer voorwerp bevat. Sodra een van hierdie lees metodes is 'n beroep op jou FileReader voorwerp, die onloadstart. onprogress. onload. onabort. onerror. en onloadend kan gebruik word om die vordering te monitor. Die onderstaande voorbeeld filters uit beelde uit die seleksie gebruikers, doen 'n beroep reader. readAsDataURL () op die lêer, en lewer 'n miniatuur deur die oprigting van die kenmerk src 'n data URL. Voorbeeld. Lees lêers. Probeer dit probeer hierdie voorbeeld met 'n gids van beelde Sny 'n lêer in sommige gevalle die lees van die hele lêer in die geheue is nie die beste opsie. Byvoorbeeld, sê jy wou 'n asinkroniseer lêer uploader skryf. Een moontlike manier om te bespoedig die oplaai sou wees om te lees en die lêer te stuur in 'n aparte byte verskeidenheid stukke. Die bediener komponent sal dan verantwoordelik wees vir die rekonstruksie van die lêer inhoud in die korrekte volgorde. Gelukkig vir ons, die lêer koppelvlak ondersteun 'n sny metode om dit te gebruik geval ondersteun. Die metode neem 'n aanvang byte as sy eerste argument, eindig byte as sy tweede, en 'n opsie inhoud tipe string as 'n derde. Die volgende voorbeeld demonstreer lees stukke van 'n lêer. Iets opmerklik is dat dit gebruik maak van die onloadend en gaan die evt. target. readyState in plaas van die gebruik van die onload gebeurtenis. Voorbeeld. Sny 'n lêer. Probeer dit Lees grepe: 1-5 6-15 7-8 hele lêer moniteer die vordering van 'n lees Een van die mooi dinge wat ons kry vir gratis by die gebruik van hantering asinkroniseer geval is die vermoë om die vordering van die lêer te monitor nuttige gelees groot lêers, vang foute en uitzoeken wanneer 'n lees voltooi is. Die onloadstart en onprogress gebeure kan gebruik word om die vordering van 'n lees te monitor. Die voorbeeld hieronder toon vertoning van 'n progress bar om die status van 'n lees te monitor. Om die vordering aanwyser in aksie te sien, probeer om 'n groot lêer of een van 'n afgeleë stasie. Voorbeeld. Monitering van die vordering van 'n lees. Probeer dit punt. Om werklik te sien hierdie vordering aanwyser in aksie, probeer om 'n groot lêer of 'n bron op 'n afgeleë stasie. Volgende stepsPerformance van Javascript (Binary) Byte Skikkings in Moderne blaaier 'n bietjie meer as 'n jaar gelede het ek begin die noVNC projek, 'n HTML5 VNC kliënt. noVNC doen baie van die verwerking van binêre byte array data en so opgestel prestasie is 'n groot voorspeller van algehele noVNC prestasie. Ek het hoë verwagtinge dat een van die nuwe binêre byte array data tipes toeganklik Javascript (in moderne blaaiers) noVNC sou gee 'n groot prestasie hupstoot. In hierdie post ek beskryf 'n paar van my resultate van die toets van hierdie binêre tipes byte skikking. Na die lees van die titel, kan jy gedink het: Wag. Javascript nie die geval is binêre byte skikkings. Eintlik nie net Javascript het toegang tot binêre byte skikkings, maar daar is twee unieke variasies beskikbaar (tegnies nie deel is van ECMAScript nog). Spring lys: Die Options Getikte Skikkings: Diegene wat volg leser ontwikkeling en HTML standaardisering kan reeds bewus wees van een van hierdie tipes skikking. ArrayBuffers (tegnies: Getikte Skikkings) is 'n vereiste deel van die voorgestelde WebGL en lêer API standaarde. Om 'n ArrayBuffer gebruik as 'n byte array jy 'n Uint8Array die lig van die ArrayBuffer skep. Die volgende Javascript skep 'n ArrayBuffer mening dat 1000 ongetekende byte elemente wat geïnisialiseer tot 0 bevat: ImageData skikkings: Maar daar is 'n ouer en meer wyd gesteun vorm van binêre byte skikkings beskikbaar Javascript programme: ImageData. ImageData is 'n datatipe wat gedefinieer word as deel van die 2D konteks van die element doek. ImageData geskep wanneer die getImageData of createImageData metode op 'n doek 2D konteks is opgeroep. Die data kenmerk van 'n ImageData voorwerp is 'n byte skikking wat is 4 keer groter as die wydte hoogte versoek (4 grepe van R, G, B, A vir elke pixel). Die volgende Javascript skep 'n ImageData byte skikking met 1000 ongetekende byte elemente wat geïnisialiseer tot 0: Tradisionele Solutions: Daar is twee tradisionele maniere voor om binêre byte data in Javascript. Die eerste is 'n normale Javascript verskeidenheid waar elke element van verskeidenheid is 'n aantal in die reeks 0 tot 255. Die tweede metode is die gebruik van 'n string waarin die waardes 0 tot 255 as Unicode-karakters in die string gestoor en lees met behulp van die charCodeAt metode. Vir hierdie post Im gaan die string metode ignoreer sedert Javascript snare is onveranderlik en opdatering 'n enkele karakter in 'n Javascript string impliseer rekonstruksie van die hele string wat beide onaangename en stadig. Die volgende skep 'n normale Javascript verskeidenheid met 1000 getalle wat geïnisialiseer tot 0: Die slegte nuus Ons sit nou met drie metodes vir die voorstelling binêre byte data: normale Javascript skikkings, ImageData skikkings, en ArrayBuffer skikkings. Mens sou verwag dat sedert ImageData en ArrayBuffer skikkings grootte is vasgestel, het elemente met 'n vaste tipe, en word gebruik vir prestasie sensitiewe operasies (2D doek en WebGL) wat die prestasie van hierdie inheemse byte skikkings beter as normale Javascript skikkings vir die meeste sou wees bedrywighede. Ongelukkig, soos vandag, die meeste bedrywighede is stadiger wanneer die gebruik van hierdie tipe byte skikking. Toets Oorspronklik Ek beplan om die prestasie getalle vergelyk blaaiers op Linux en Windows wys. Maar ek ontdek dat daar baie min verskil (vir hierdie reeks toetse) tussen dieselfde weergawe van 'n leser wat uitgevoer word op Windows vs Linux. Aangesien al die Linux blaaiers ook uitgevoer word op Windows (maar nie andersom) het ek die prestasie resultate om Windows beperk. Vir hierdie pos Ek het saam vier vinnige toetse gekap na normaal Javascript skikkings met ImageData en ArrayBuffer skikkings te vergelyk. Al die toetse gebruik skikkings wat 10240 (10 1024) elemente bevat en herhaal die operasie baie keer getoets word ten einde die toets tye te stoot in 'n makliker gemeet en vergelyk reeks. Elke toets is ook hardloop 10 keer (iterasies) en die gemiddelde en standaardafwyking in alle 10 iterasies word bereken. Jy kan toetse jouself wat deur kloning die noVNC repository en laai van die bladsy toetse / skikkings. Hierdie toets resultate is gebaseer op hersiening bbee8098 van noVNC. Die uitvoer van die toets in 'n leser wil uitset into data in die resultate textarea. Dit into data kan dan gekombineer met into data van ander leser resultate en loop deur die utils / json2graph. py luislang script wat die matplotlib module gebruik om die grafieke te genereer. Die toets masjien het die volgende spesifikasies: Acer Aspire 5253-BZ893 AMD dual-core C50 op 1GHz 3GB DDR3 geheue AMD Radeon HD 6250 Windows 7 Hier is die belangrikste blaaiers wat getoets is: Verder is ouer leser weergawes ook getoets om te sien of die blaaier vordering: Chrome 9.0.597.98 Chrome 10.0.648.204 Chrome 11.0.673.0 (bou 75038) Internet Explorer 9.0 platform Voorbeeld 7 Firefox 3.6.13 Firefox 3.6.16 Firefox 4.0 beta 11 Let wel dat ek nie 'n professionele prestasie tester so Ek het waarskynlik havent het gebruik gemaak van 'n optimale toets tegnieke en daar is beslis 'n moontlikheid dat ek foute wat sommige of al die nommers ongeldig gemaak het. Ek verwelkom opbouende kritiek en dialoog, sodat ek kan uitbrei en verbeter hierdie resultate in die toekoms. Die vier toetse: skep - vir elke toets iterasie, is 'n skikking geskep en dan geïnisialiseer aan nul en dit is 2000 keer herhaal. randomRead - Vir elke toets iterasie, 5 miljoen keer gelees word uitgereik aan pseudo-ewekansige plekke in 'n skikking. sequentialRead - Vir elke toets iterasie, 5 miljoen lui uitgereik agtermekaar om 'n skikking. Die lees lus om na die begin van die skikking toe hulle die einde van die skikking te bereik. sequentialRead - Vir elke toets iterasie, 5 miljoen updates gemaak agtermekaar om 'n skikking. Die skryf lus om na die begin van die skikking toe hulle by die einde van die skikking. Tests: Eerste laat 'n blik op hoe die verskillende tipes verskeidenheid verrig by die verskillende toetse. Skep Tests Dit is die enigste toets waar ImageData en ArrayBuffer skikkings het 'n beduidende prestasie voordeel omdat hulle outomaties geïnisialiseer tot 0 wanneer geskep. Internet Explorer 9 en Opera nie tans ondersteun ArrayBuffer skikkings. Ewekansige Lees toetsuitslae Chrome en Opera het die beste algehele prestasie hoewel Opera ondersteun nie nog ArrayBuffer skikkings. Firefox het veral sleg ewekansige Lees prestasie oor die raad. Die resultate dui daarop dat daar min voordeel vir die gebruik van ImageData of ArrayBuffer skikkings vir ewekansige lees en hul prestasie in Chrome en Opera is aansienlik stadiger. Sekwensiële Lees toetsuitslae Vir die opeenvolgende lees toets die situasie is heeltemal anders. Firefox het konsekwent en voorste prestasie oor alle vorme skikking. Chrome het 'n orde van grootte erger prestasie vir ImageData en ArrayBuffer skikkings. Opera 11 wys 'n 3x daling in prestasie vir ImageData skikkings in vergelyking met normale Javascript skikkings. Normale skikkings is nog steeds die beste keuse algehele. Sekwensiële Skryf toetsuitslae opeenvolgende Skryf toets relatiewe resultate is baie soortgelyk aan opeenvolgende lees met 'n stadiger deur die bank. Firefox toon weer vergelykbaar prestasie oor al drie verskeidenheid tipes. Opera 11 steeds 'n 3X daling in prestasie met ImageData skikkings wys. Chrome steeds 'n orde van grootte spoed verskillende tussen normale skikkings en die binêre skikkings wys. Nou kan anders sny die data om te sien hoe die verskillende blaaiers vergelyk oor die verskillende tipes skikking. Normale Array toetsuitslae Chrome is die beste algehele presteerder hier met Opera trek 'n beslote tweede. Maar die mees noemenswaardige resultaat in hierdie siening is die verskriklike prestasie van Firefox ewekansige lees. Gegewe die groot hoeveelheid van die beweging in die Firefox gevolg in vergelyking met die ander, ek dink dit is 'n wilde geval en dat Mozilla het 'n paar lae hang vrugte hier. ImageData toetsuitslae Opera is nou die algehele prestasie wenner met Chrome trek 'n beslote tweede. Die Firefox probleem met 'n arbitrêre lees voort om te wys met ImageData skikkings (hoewel hierdie keer sonder die beweging). Met uitsluiting van die ewekansige Lees hiervan, sou Firefox die duidelike wenner wees. Internet Explorer 9 het 'n goeie vertoning hier kom in 'n beslote derde algeheel. ArrayBuffer toetsuitslae Die agttal verdunt uit aansienlik aangesien slegs Chrome en Firefox ondersteuning ArrayBuffers. Firefox toon weereens pessimal ewekansige Lees prestasie. Met wat gevolg uitgesluit (of vaste), sou Firefox die duidelike wenner teen Chrome wees. Toetsuitslag Opsomming: Chrome het die beste algehele prestasie vir 'n normale skikkings. Opera het die beste algehele prestasie vir ImageData skikkings met Chrome 'n beslote tweede. Firefox het 'n goeie vertoning, behalwe vir ewekansige lees waar prestasie druppels van 'n rots op alle vorme skikking. Leser Verbeterings / regressies Nou sal ons vergelyk 'n paar ouer leser weergawes om te sien of die leser verkopers maak vordering met verloop van tyd in die verbetering van die prestasie van die binêre tipes byte skikking. Firefox Normale Array Toets Resultate vir Firefox Firefox toon meestal bestendige verbetering vir normale skikkings, maar weer eens die verskriklike ewekansige Lees voer opgevoed sy kop in die verskuiwing van 4,0 beta 11 tot die 4.0 weergawe. ImageData toetsuitslae vir Firefox Weereens, Firefox meestal toon bestendige verbetering vir ImageData skikkings. Hierdie keer het die verskriklike ewekansige Lees prestasie is iewers bekend gestel tussen die Firefox 3 en Firefox 4-kode basis. ArrayBuffer Toets Resultate vir Firefox Slegs Firefox 4 ondersteun ArrayBuffer skikkings. Die aaklige ewekansige Lees prestasie nog bestaan. Chrome Normale Array Toets Resultate vir Chrome Geen sterk tendense verskyn in die Chrome data vir 'n normale skikkings. Die skikking te skep spoed toon 'n beduidende afval in Chrome 12. Vir opeenvolgende skryf daar was 'n 2X regressie vir Chrome 10 en 11. ImageData toetsuitslae vir Chrome Dit blyk dat daar 'n beduidende agteruitgang in Chrome 12 met betrekking tot ImageData prestasie wees. Die bedrag van die afval (3X om 6X) en die aansienlike beweging aan te dui vir my dat hulle is 'n voor die hand liggend propblem wat gevolg moet word vasgestel. ArrayBuffer toetsuitslae vir Chrome Daar is geen sterk tendense in Chrome ArrayBuffer verskeidenheid prestasie hoewel dit lyk asof daar 'n swak neiging tot erger prestasie wees. Internet Explorer 9 Normale Array Toets Resultate vir Internet Explorer ImageData Toets Resultate vir Internet Explorer Die finale weergawe van IE9 toon 'n groot prestasie afname in vergelyking met die platform Voorbeeld 7. As Microsoft in staat is om hierdie prestasie te herstel in 'n volgende uitgawe dan sou dit aansienlik verander die staan ​​van Internet Explorer 9 met betrekking tot die ander moderne blaaiers. Finale Gedagtes ImageData en ArrayBuffer skikkings het verskillende performance eienskappe binne dieselfde blaaiers. Ek is nie seker hoekom dit moet die geval wees. Trouens, sou ek aanbeveel dat die WHATWG / W3C en leser verkopers standaardiseer op ArrayBuffers vir beide doeleindes. Dit kan gedoen word deur die byvoeging van 'n bykomende kenmerk van die ImageData voorwerp miskien vernoem buffer. Die nuwe buffer kenmerk sou 'n generiese ArrayBuffer met die beeld data geheue wees. Die bestaande data kenmerk sou 'n Uint8Array siening van die ArrayBuffer (dit sou handhaaf backwards compatibility) geword. Benewens kode konsolidasie binne die blaaier (en 'n plek om optimalisering pogings fokus) hierdie verandering sal toelaat dat ontwikkelaars om 'n Uint32Array die lig van die buffer wat geheel pixel updates (3 kleure alfa) met 'n operasie sal toelaat skep. Die gebruik van ImageData en ArrayBuffer (getik verskeidenheid oog) skikkings sal oor die algemeen nie 'n beter prestasie vir binêre byte data as net die gebruik van normale Javascript skikkings gee. Dit is jammer, aangesien hierdie binêre tipes verskeidenheid spesifiek bestaan ​​om te dien prestasie sensitiewe funksies (2D en 3D-beelde). Dit is ook verbasend nie, aangesien hulle 'n vaste grootte en 'n vaste tipe element wat in teorie moet toelaat vinniger te lees en skryf toegang tot die elemente. Ek vermoed (en hoop) dat hierdie prestasie probleem is te wyte aan die feit dat daar nie genoeg optimalisering pogings deur enige van die leser toegepas verskaffers om hierdie binêre skikkings. Versoeke: Mozilla, Google (en Apple), Microsoft en Opera: asseblief spandeer 'n bietjie moeite om jou JavaScript binêre verskeidenheid tipes Microsoft en Opera optimaliseer: dit sal lekker wees as jy WebGL sal implementeer. Maar so nie, asseblief ten minste te implementeer getikte verskeidenheid (ArrayBuffer) ondersteuning aangesien dit staan ​​op sy eie en sal waarskynlik in die nabye toekoms gebruik word in ander plekke waar dit sin maak soos FileReader voorwerpe en in die WebSocket API om binêre data te ondersteun. Followup Posts: Die leser oorloë is terug en 'n nuwe blaaier weergawes word elke paar weke vrygestel. My plan is om voort te gaan die opdatering van hierdie toetse om die mees onlangse weergawes leser sluit. Ek wil ook graag die toetse uit te brei na 'n ewekansige Skryf toets sluit en ook om die ewekansige en sekwensiële Lees prestasie van binêre data gestoor in Javascript snare te toets. Bly ingeskakel. Verwysings


No comments:

Post a Comment