
Sono Nick Bray Lavoro su google su chrome
e ultimamente ho lavorato su un nuovo
la tecnologia chiamata assemblaggio web sono stato
lavorando su questo con una manciata di
collaboratori e altri ingegneri del software
in altre aziende è il web assembly
progettato per eseguire il codice nativo sul web
eseguilo rapidamente eseguilo in modo efficiente eseguilo
eseguire in modo sicuro performante Lee e di
loro stessi abbiamo visto tutto questo prima
quando dico no code intendo C C ++ o
qualsiasi cosa compili su una macchina
architettura e codice nativo naturalmente
corre veloce proprio bene ottenendo tutto questo
è farlo insieme per farlo funzionare sul web
abbiamo avuto pezzi del puzzle per a
molto tempo ma credo che sia il web assembly
sarà la prima cosa che mette
tutti i pezzi insieme quindi i due
ragioni per cui sono molto interessato al web
assemblea tutti ne parlano
o dovrei dire il browser principale
i venditori ne parlano insieme
ora questo è molto lontano dal vero
essendo uno standard questo è molto lontano
da tutti coloro che si impegnano ad esso, ma il
Il fatto che stiamo parlando è molto buono
firmare per quello che sta arrivando l’altra cosa
che sono molto eccitato per questo
ha condiviso multi memoria ora c’è a
molti sviluppatori front-end qui e
sviluppatori front-end si prega di aumentare il
mano quindi so con chi sto parlando e
quindi persone con esperienza con nativi
codice okay quindi sembra che abbiamo un po ‘
di una divisione con un po ‘di pregiudizio verso
il codice nativo quindi spiegherò condiviso
memoria multi in un po ‘soprattutto per il
sviluppatori front-end ma questo è molto
molto importante per ottenere il codice nativo per
lavorare e lavorare molto bene
quindi siamo stati in questa strada prima della strada
prima che il suo codice nativo sul web sia
ci stiamo provando perché non lo so
circa cinque anni e non lo è mai
abbastanza lavoro ma ce ne sono stati alcuni
cose che sono state davvero impressionanti
a mio avviso, una delle cose che è
al giorno d’oggi si verificano i motori di gioco
il web è l’unità di Unreal è che lo sono
prendendo il loro motore di gioco che è
attualmente destinato ai desktop su dispositivi mobili
e quindi stanno aggiungendo componenti così
possono funzionare sul web e questo mostra a
è una sorta di strategia multipiattaforma
stai cercando tutta la distribuzione
canali che puoi per i tuoi contenuti e
il web è solo un altro al momento
è un po ‘difficile perché il web è
strano come entreremo in un momento ma
se fosse meno strano se potessi
indirizza tutto ancora una volta
opportunità per le entrate di più
opportunità di consegna immagina se
potresti semplicemente inviare un link a qualcuno a
il gioco che il tuo amico clink sul link
allora sei lì nel gioco
immediatamente nessuna installazione hanno ragione
accanto a te funziona solo ce ne sono stati alcuni
interessanti esperimenti interessanti con
esecuzione di lingue diverse sul Web
in questo momento puoi usare qualsiasi lingua tu
voglio sul web finché è
JavaScript e c’è un sito web chiamato
repli twitch ha usato la tecnologia
per compilare il codice nativo fai javascript a
eseguire cose come Python e una pagina web
eseguire cose come C sharp su una pagina web
anche le persone più folli stanno emulando tutto
sistemi operativi c’è un sito web
chiamato dosbox dove puoi eseguire tutto il tuo
i vecchi giochi preferiti se sei così vecchio
j / s Linux è qualcuno che esegue un intero Linux
macchina e tradurlo in Java in a
pagina web in modo da poter fare Linux in un web
pagina uno dei miei collaboratori ha istituito un
intero ambiente di sviluppo all’interno di a
Modulo client nativo in modo da poter eseguire GCC
all’interno di una pagina web la roba pazzesca
cose e persone impressionanti hanno
sperimentare con la visualizzazione di PDF sei tu
potrebbe effettivamente compilare il visualizzatore di PDF e
eseguirlo tradizionalmente all’interno di una pagina web
I visualizzatori PDF fanno parte del browser web
ma in realtà ne hanno fatto una app web e
simile con la decodifica dei media è lì
alcuni posti che le persone hanno preso i media
decodifica i decodificatori audio ed eseguili
all’interno della pagina web di nuovo tradizionalmente
queste cose sono parte di
i browser web se vuoi una decodifica
video dici che il mio programma non lo è
andando a farlo così vado
delegare al browser web e c’è
molte ragioni per questo che il web
il browser non è abbastanza veloce in un sacco
di caso è o dovrei dire web
applicazioni non sono abbastanza veloci, ma voglio dire che
sono abbastanza veloci nel senso del throughput
ma a volte non sono affidabili
abbastanza sai se stai cercando di
decodifica audio devi farlo esattamente
quando è necessario l’audio o altro
le lacune sono pop, quindi le prestazioni sono più
rispetto al throughput è anche l’affidabilità di
performance così adesso tutti questi
le cose sono molto interessanti e loro
lavorare in molti casi e quasi lavorare dentro
alcuni casi ma sono il prodotto di
persone molto dedite e se ci abbassiamo
la barra per entrare cose come questa volontà
diventare molto più comune molto di più
pervasivo quindi il problema con il web è
che aveva una sua storia evolutiva
è risposto a un diverso insieme di
forze che la piattaforma nativa ha fatto e
finito in un posto diverso con un
insieme completamente diverso di proprietà ora
diverso non è male ma quando siamo
chiedendo come possiamo fare multi piattaforma
sviluppo come possiamo prendere il codice legacy
e spostarlo sul web diventa molto
più difficile è diverso quindi grande
proprietà del web che è diversa
è questo asincrono è che se tu mai
voglio chiedere al sistema qualcosa da dire
carica un file tu dici hey voglio un carico
file il sistema dice che è fantastico dare
mi richiama per darti una chiamata
indietro e dice okay tornerò a
più tardi ora se stai eseguendo ancora
eseguendo non avrai mai la risposta
in effetti, l’unico modo per ottenere un
risposta quando esegui JavaScript
è che interrompi l’esecuzione che ti rilassi
l’intero stack di chiamate ritorna al
ciclo di eventi il ciclo degli eventi potrebbe fare alcuni
le cose nel frattempo non hai
controllo su ciò che sta facendo e poi
alla fine ti richiameranno e diranno
oh sì ecco il file la tua richiesta
attraverso il codice negativo della rete sul
altra mano come le interfacce sincrone
questo è un retaggio di come funziona
i primi sistemi erano: tu vai
sistema operativo e dire hey voglio
il file dice si ferma proprio lì per a
momento passa ottiene il file quindi dice
ecco il file riprendere così il
la cosa interessante qui è che non lo fai
srotolare lo stack di chiamata che hai
tutta la catena di chiamata di funzioni si ottiene il
file e quindi è possibile riprendere l’esecuzione
immediatamente da dove sei così se
stai cercando di tradurre un sincrono
programma in un programma asincrono
questo finisce per essere un sacco di lavoro perché
devi tagliare
l’intero stack di chiamate devi cambiare
cose così ogni volta che hai avuto quello che hai usato
per essere un’operazione sincrona diventa
un’operazione asincrona che gira
in un richiamo un altro aspetto che
è abbastanza difficile fare il porting sul web
che non ci sono thread con condiviso
stato quindi se hai familiarità con il web
piattaforma ci sono i lavoratori del web che sono
tecnicamente i fili ma hanno loro
interi contatti JavaScript che hanno
il proprio set di oggetti e tu puoi
non avere mai un oggetto che sia
contemporaneamente modificabile con due
discussioni dove quando hai qualcosa
come la piattaforma nativa quando hai
discussioni è possibile passare liberamente i dati a loro
e puoi effettivamente accedere ai dati al
stesso tempo che di solito è una cattiva idea
a meno che tu non sia molto attento anche al
persone con cui lavoro sono esperto
discussioni quando chiedi loro come funziona
lavoro sono come lasciatemi pensare
quello per un momento e quello è chiamato
saggezza in quanto le persone si rendono conto di non essere come
intelligenti come pensano di essere sui fili
sono complicati quindi quando fai il porting nativo
programmi che vuoi discussioni perché loro
nonostante tu lo sappia nonostante il fatto
sei una granata a mano di giocoleria sono loro
darti le cose che ti servono danno loro
prestazioni che ti danno affidabile
le prestazioni sono essenzialmente le
primitive che la CPU usa per te
non può davvero essere più efficiente di
che non puoi essere più affidabile
di quello e in molti modi che puoi
discute se in realtà vuoi discussioni
come modello di programmazione sono
pericoloso ma sono molto molto utili
quindi avere una piattaforma che li fornisce
a te e ti permette di costruire le cose in cima
di loro ti permette di costruire meglio
le astrazioni su di esso sono belle
importante un’altra cosa strana riguardo il
il web è coerente incoerente
le prestazioni sono state progettate da JavaScript
per essere facile da usare ed è solo finita
il tempo che siamo stati in grado di farlo girare
sempre più veloce e questo è in parte
a causa degli sforzi eroici della gente
l’implementazione di javascript è che hanno
diventato più intelligente e intelligente e il
Il motore JavaScript ha ottenuto di più
complesso e più complesso quindi quando lo chiedi
perché la mia applicazione JavaScript
eseguire il modo in cui fa la risposta è
non molto chiaro quindi c’è di tutto
compilatori just-in-time che iniziano da
l’inizio che dice bene non so nulla
sul tuo programma tranne il suo testo
quindi inizia ad eseguirlo per un po ‘
poi dice oh aspetta questo è un um
Posso fare un po ‘ meglio in modo che funzioni
più veloce di quanto dice oh, conosco il tipo
di questo allora può funzionare meglio di così
dice oh ho ricevuto nuove informazioni che dicono
questo potrebbe essere un numero di tetto a corda I
non so cosa sto facendo quindi corriamo
più lento in modo da poter effettivamente passare
la durata del tuo programma che funziona
più veloce di correre più lentamente di correre più veloce
in esso è a causa dell’euristica e
la messa a punto e la magia che su
media fa andare meglio il web ma per
la tua specifica applicazione potrebbe risultare
in un comportamento bizzarro che non puoi
spiegare un’altra cosa è spazzatura
collezione è JavaScript fornisce il
astrazione che non devi affrontare
con la memoria quindi se hai finito c o c ++
dicendo manualmente che ho finito con questo
oggetto è molto incline agli errori sai se
fai c ++ abbastanza a lungo da fare
entra nelle abitudini sai come farlo
ma alla fine quando sbagli
diventa il peggior bug del mondo
per gestire le correzioni della raccolta di dati inutili
tutto ciò dicendo che il sistema funzionerà
capirlo per te, ma il costo di
questo è che occasionalmente il sistema ha
venire a fermare il mondo e dire lasciami
ripulire dopo aver quindi riprendere il mondo
e questa è la pausa GC è quando hai un
Applicazione JavaScript o qualsiasi
applicazione con loro con un reale o qualsiasi
l’applicazione con gestione della memoria è se
stai cercando di eseguire il rendering di 60 fotogrammi
un secondo o rendering audio nel peggiore
caso potresti essere interrotto e lì
potrebbe essere un po ‘ di singhiozzo così del tutto
il codice di porting sul web è attualmente
doloroso, non importa come lo fai e il
la domanda è come possiamo fare meglio così tu
potrebbe pensare che forse solo il web
non vale la pena è c’è tutto questo
cose a cui si riversa il codice nativo
il web è difficile quindi non facciamolo
lascia il web impostato sui suoi punti di forza
ma ha molto di interessante
punti di forza per altri sviluppatori è aperto
quindi vuoi spedire un pisolino tutto ciò che hai
fare è ottenere un server cloud da qualche parte
caricatelo lì boom, sei un pisolino
editore ci sono anche più fornitori
che hanno browser diversi che non hai mai
preoccuparsi del blocco del fornitore per
qualsiasi standard web perché c’è
più implementazioni di esso è
sicuro ora dovrebbe esserci un asterisco
accanto a questo è tecnicamente ogni
piattaforma sicura ma hanno un
diversa definizione di sicurezza e il
il web ha una definizione abbastanza unica di
sicurezza che è sicuro come un documento
quindi la storia del modo
iniziato con la visualizzazione di documenti HTML e
il modello di sicurezza continua da quello
così quando qualcuno ti consegna un documento
non devi preoccuparti di questo
nella tua tasca sai che non sta andando
per farti del male in alcun modo come i tuoi occhi
non stanno andando a esplodere è un documento è
sicuro non c’è niente che qualcuno possa fare
danneggiarti dandoti un documento
altre piattaforme hanno un altro a
approccio diverso a questo e questo ha
ha causato problemi legacy come il funzionamento
i sistemi presumono che qualsiasi programma stia funzionando
a tuo nome quindi quindi se vuole
prendere la dichiarazione dei redditi e caricarla su
qualche strano server in qualche straniero
Paese che è una cosa perfetta
fallo perché è quello che stai facendo
non è vero per molte app che sono
caricato attraverso la rete un’altra cosa
è di nuovo portatile questo è un omaggio
per meritare un asterisco accanto ad esso è
è portatile nel senso che ovunque
c’è un contenuto del web browser web può
eseguire e lo stesso programma dovrebbe eseguire il
lo stesso ovunque, se sei abituato
codice nativo che passi molto tempo
porting e codice nativo è portatile
nel senso che puoi farlo funzionare
qualsiasi macchina veloce ma potrebbe esserci
differenze di comportamento tra così
le cose sono un po ‘diverse tra
piattaforme quindi ci sono due distinti
diverse versioni di portabilità e
la versione web della portabilità è quella
comportamento coerente, non importa quale sia il
sistema operativo non importa quale sia la CPU
un’altra bella proprietà che sorta di
Molle dalla sicurezza e
la portabilità è l’effimero è che non lo fai
devi installarlo basta puntare il tuo
browser web presso l’app in cui ti trovi e
correndo all’istante e come risulta
quando devi chiedere agli utenti, oh, posso averlo
permesso di fare cose cattive per te ma
onestamente non lo farò in questo modo
l’utente da e aggiunge attrito e
rende più difficile convincerli a usare
la tua app consente anche l’effimero
l’idea di app evergreen è quella di tutti
tempo qualcuno va al tuo server web
ottengono la versione più recente che devi
preoccuparsi meno del supporto tecnico per
qualcuno che sta usando l’applicazione
ha due anni e poi lo sei
grattando la testa per capire perché
ha fatto una cosa così strana in corso così
quando sarebbe bello se potessimo ottenere tutto
queste proprietà del web e di tutti
le buone proprietà del nativo in uno
bundle è una specie di domanda
questo è motivare il web assembly e io
dovrei dire a questo punto che sto andando a
fare riferimento ad esso in alcuni punti w
per ASM e questo è solo abitudine perché
abbiamo parlato di internamente così
lungo e abbiamo un gergo così da capire
come siamo arrivati qui dovremmo fare brevemente
guarda la storia e come stavo dicendo
che nel primo c’è l’ipertesto
linguaggio di markup che era solo un
documento e poi pochi anni dopo le persone
sono compresi i documenti interattivi
più bello dei documenti, quindi è così
da dove proviene JavaScript è possibile
cliccaci sopra e questo è un evento e tu
rispondere all’evento e poi si ritorna
al ciclo degli eventi ma le persone volevano di più
così dicono subito e hey abbiamo
questa bella piattaforma di distribuzione di documenti
quindi se potessimo avere altri tipi di
documenti come documenti PDF o vettoriali
grafica o potremmo incorporare Word
documenti quindi c’è questa profusione di
tecnologie plug-in o persone hanno detto hey
vogliamo fare di più sul browser web
ma invece di farlo all’interno del web
browser, facciamo solo un pezzetto di questo
codice sul browser Web e sul legacy
è ancora con noi oggi 20 anni siamo
finalmente affrontando ma il problema di
questo è c’è una severa sicurezza
è un problema perché non lo eri
all’interno del browser web perché tu
non stavano pensando a come comportarsi come
contenuto web perché tu sei il tuo intero
proprio stack si potrebbe avere solo diverso
regole per ciò che era sicuro ed era
un po ‘come quando hai avuto i due
i genitori e tu sei come hey posso fare
questo no hey posso farlo okay e tu
sai una volta che sei in quella situazione è
molto difficile essere sicuro e c’è
problemi di complessità superficiale così dentro
un certo senso siamo stati abbiamo avuto il meglio di
intenzioni in questa era ma non l’abbiamo fatto
Capisco bene tutte le belle proprietà
del web ho detto prima intorno al 2000 a
c’è un rinnovato interesse in
javascript performance chrome è uscito
mozilla ha iniziato davvero a spingere la loro esca
e sun li javascript è diventato veloce
è diventato pratico pensare alla costruzione
applicazioni su larga scala in javascript
c’è un decollo esponenziale e
tutti erano come magici elfi javascript
stanno rendendo le cose più velocemente tutto il tempo
ma in realtà conosco quei JavaScript
elfi e come si scopre questo è molto
molto difficile e la quantità di complessità
coinvolto è enorme e quindi questo esponenziale
decollare che abbiamo visto intorno all’era del 2008
non è sostenibile c’è un certo
soffitto dove stiamo andando a rallentare
progredire e rallentare i progressi e il
la domanda è come continuiamo a fare come
continuiamo a ricevere
tipo di performance e web assembly di
risponde dicendo dicendo che lo facciamo per essere
più semplice è la vita del browser
più facile per farlo correre veloce a
il progetto a cui ho lavorato è stato Nativo
Il cliente è google ha detto hey quello che siamo
sta per fare è prendere un
figura dell’ambiente di programmazione nativo
fuori come renderlo sicuro assicurandoti
può solo parlare con l’op o solo parlare
al browser non parla con quel cervello
sistema e lì hai ottenuto il codice nativo
il web, purtroppo, non hanno ottenuto
buy-in dal browser di rendering di altri fornitori
i venditori di browser sono nel mio punto di vista
dal mio punto di vista è giusto
soluzione tecnica ma non ha mai avuto il
strisciare il multi-partito nella croce
soluzione del browser e questo ha sempre fatto
la vendita molto dura per gli sviluppatori web sei tu
sai che hai un ottimo bicromato di potassio ma che dire
l’altro cinquanta percento circa
cosa molto difficile da superare web
gli sviluppatori vogliono correre ovunque
voglio che sia una tecnologia web che vogliono
per essere completamente aperto e completamente portatile
quindi intorno al 2010 lo script M è arrivato sul
scena e, a prima vista, questo è davvero
idea terrificante è che tu prendi nativo
codice e compilarlo in JavaScript ora
questo è stato subito dopo l’ avvio di JavaScript
diventare veloce o veloce così erano le persone
ancora nella mentalità di JavaScript non lo è
che lento ma dovuto ad alcuni molto attenti
decisioni ingegneristiche che è stato in grado di eseguire
scioccamente veloce e in realtà solo
ha lavorato un sacco di volte il grande
la limitazione di Emscripten è quella perché
è stato compilato per JavaScript
non poteva fare fili efficacemente aveva
utilizzare il modello di concorrenza degli script Java
dovevi avere il ciclo degli eventi che avevi
essere asincrono non si poteva bloccare
quindi c’è sempre un po ‘di porting
attrito in cui hai dovuto rielaborare il tuo
modellare il modello di applicazioni in modo che funzioni
all’interno del modello di applicazione JavaScript così
questo ci porta all’assemblaggio del web è ciò che
se potessimo avere una buona pervasività
di Emscripten ma allo stesso tempo
la concorrenza della memoria condivisa è così
tipo di un riassunto di ciò un po ‘
la storia prolissa è se guardi
in cima è l’era del plug-in e
i problemi evidenti ci sono sicurezza
e un’altra cosa che è venuta è
perché c’è sicurezza c’è una specie di
accettazione a malincuore delle cose
NPAPI quindi quando sono arrivati i browser mobili
hanno detto che tecnicamente no
parte del web standard quindi non lo siamo
andando a sostenere così la decisione sulle mele
per non supportare il flash, ad esempio
è stato un vero grande impulso per specie
riesaminare queste tecnologie e
per questo non sono davvero croce
browser più anche se una versione
di Chrome supporta flash sul cellulare
la versione non è quindi se si guarda il
questo è l’angolo destro o quello destro
quello che mi interessa in particolare
non c’è davvero nessuna piattaforma in questo momento
che entrambi gira in ogni browser e
supporta la memoria condivisa multi e questo è
una delle grandi cose che lo rende facile
eseguire app native sul web in modo web
assemblaggio potenzialmente così storia
come funziona effettivamente l’assemblaggio web e
la risposta in qualche modo è molto semplice
e molto noioso è che sei abituato a
normale app web e quell’app web accetta
una pagina HTML prende in sorgenti JavaScript
accetta file di dati come immagini CSS
cose lungo quelle linee e il web
assemblaggio quando il browser supporta il web
assemblaggio ci sarà solo un
binario è che sarà un binario
prodotto da un compilatore C dalla sorgente C
file e quindi basta caricare il browser
molto come avresti JavaScript ha il suo
proprio vm si trasforma in un sacco di funzioni
si trasforma in molto codice all’interno del
browser ora sto mentendo un po ‘
fatto come un problema di attuazione un sacco di
le persone che hanno intenzione di
l’implementazione di questo sta pianificando di fondere
il javascript nei bit dell’assemblaggio web
così quando hai effettivamente un assemblaggio web
archivia quello che sta succedendo, lo stai prendendo
e lo stai spingendo nel tuo
motore javascript solo in un molto più basso
livello è il file dell’assembly web che conosci
più su di esso dall’inizio così tu
può saltare tutto il dinamico e adattivo
cose di compilazione in cui stai provando
per capire è questo un intero o è
questo una stringa si sa dalla
all’inizio ma questa è un’implementazione
dettaglio dal punto di vista degli utenti voi
non so che non ti importa di cosa si tratta
in realtà all’interno di questo file binario è
piuttosto difficile fare diapositive sul binario
quindi ecco un’immagine per illustrarlo così se
hai un esempio che stai chiamando il
funzione foo e tu ne hai conosciuto uno
argomento che è un plus 7 altro
che è sia a che B sono locali se
questo era JavaScript che avresti inizialmente detto
bene, io non so nulla di ciò che non conosco
so esattamente quale funzione sto chiamando
sai che non so se a è un numero intero
Non so se si tratta di una stringa, quindi questo
operazione aggiuntiva potrebbe fare molto
cose che potrebbe concatenare potrebbe aggiungere
ecc. ecc. ma nel web assembly
versione è hai un albero di operazioni
in ognuna di queste operazioni puoi
esattamente e per quello che farà
quando hai un’operazione di aggiunta
dice che questo è il tipo di esso è un in
32 operazione quindi gli ingressi sono entrambi
andando a essere interi a 32 bit l’ output
sta per essere un intero a 32 bit e questo
ti permette di avere buone prestazioni da
l’inizio il formato binario stesso
è importante perché ci permette di essere
Più piccolo quindi se si prende un JavaScript
applicazione che sai compilata come MJ s
e quindi transcodificare su binario di
gli ingegneri del software di Mozilla lo hanno fatto
questo esperimento e trovato che loro
potrebbe ridurre il file a circa il terzo
la dimensione originale ma questo è prima
compressione se la comprimi effettivamente
c’è una sorta di argomento di entropia e
gioca che è sempre lo stesso programma così
sarà ancora circa lo stesso
dimensioni ma ciò nonostante erano in grado di
radere circa un quarto delle dimensioni
ora la dimensione è molto importante, specialmente su
il web perché è dati è come
molto devi scaricare e questo
influisce anche sulla velocità di avvio
influisce anche sulla frequenza di aggiornamento
la tua app e le cose in questo senso
più piccolo puoi ottenerlo paga
dividendi in tutti i tipi di altri modi e
dovrei dire a questo punto che lo sai
suonato sulle prestazioni e di nuovo
la performance è una di queste cose
è più che altrettanto veloce
la sua batteria mobile è la differenza
tra quattro fotogrammi al secondo è bello
hack e 40 frame al secondo oh questo
potrebbe davvero funzionare così le prestazioni sono a
caratteristica non è la stessa
applicazione che esegue più velocemente un’altra
cosa interessante del binario
il formato è che è circa 23 volte
più veloce da analizzare del testo, quindi perché
è binario perché non è progettato per
puoi essere umano leggibile, scrivibile
disporlo in modo tale che il
macchina
non deve pensare troppo quando lo fa
lo assorbe e analizza il javascript
è in realtà un componente abbastanza grande di
motori di start-up e JavaScript
cose come la sovrapposizione con il download
provare ad ammortizzarlo ma è
fondamentalmente costoso quindi cosa c’è
in realtà sta succedendo sotto il cofano che ho
agita le mie mani sulla codifica binaria e
cose del genere ma che cosa fa
effettivamente fare e quando ho fatto prima questo
scorrere Ero come wow questo è una specie di
noioso è che la saggezza si ottiene un grande
pezzo di memoria un sacco di byte e
fai fuori morsi che fai
operazioni su di loro e tu metti i morsi
di nuovo dentro non ci sono oggetti lì
sono stringhe questo non sembra
qualsiasi cosa ti aspetti di essere una programmazione
linguaggio specialmente se vieni
dal mondo, ma dopo JavaScript
pensando per un po ‘realizzo il
la cosa importante qui è questa non è una
linguaggio di programmazione di cosa si tratta è
è un’architettura di macchina portatile è
tipo di equivalente a una CPU in un certo senso
la CPU ha un sacco di memoria che può
fai operazioni aritmetiche che può spostare
cose dentro e fuori dalla memoria che costruisci
linguaggi di programmazione oltre a questo così
prendi qualcosa di simile a vederlo
compilato in termini di ciò che prendi
qualcosa come C ++ viene compilato
termini di questo così per esempio se lo hai
un programma marino con il suo bel manuale
gestione della memoria ogni volta che crei a
nuova struttura un nuovo oggetto si riduce
per dire hey voglio assegnare abbastanza
byte per contenere la struttura dei dati in modo che io
voglio assegnare un centinaio di byte e
poi fa un po ‘di contabilità
il programma stesso dice che so di avere questo
grande pezzo di memoria e basato su
contabilità so che quest’area è gratis così
qui abbiamo l’indirizzo di questi 100 byte
e quindi puoi caricare i numeri dentro e fuori
di quella specifica regione e quella
corrisponde ai campi sui tuoi dati
strutture per esempio un’altra cosa
sta succedendo che hai un limite
la quantità di memoria è probabilmente grande ma
ancora limitato perché è in esecuzione
all’interno di un processo con molti altri
cose così questo pezzo di memoria sta andando
per essere accanto al runtime di JavaScript
sarà accanto al documento
modello oggetto così ogni volta che provi ad andare
fuori da questo pezzo ci sarà
controlla che dici oh aspetta che non puoi fare
quella
non è sicuro, quindi è così che la sicurezza
è mantenuto è quello ogni volta che sei
facendo accesso alla memoria, puoi farlo solo tu
accesso alla memoria a cui è consentito l’accesso
un’altra parte molto importante del web
l’assemblaggio è invocazione di funzione esterna
quindi non è solo la sua stessa cosa
progettato per integrarsi con JavaScript così
JavaScript può chiamare nel web assembly
e il web assembly può richiamare a
JavaScript e questo significa che puoi
costruire applicazioni ibride è possibile
per esempio costruisci il tuo front end o il tuo
Interfaccia utente nel DOM e quindi delegheranno
al web assembly per fare un po ‘di sollevamento pesi
come la decodifica video o logica di gioco o
qualunque cosa tu voglia, se tu se lo fai
fatto qualsiasi sviluppo Android è sorta
di lungo la stessa linea è quello che hai
per definire quali sono le interfacce tra
le due lingue è la cima del
scivola in noi solo dichiarando due funzioni
come punti di ingresso e punti di uscita e
allora da quel punto sei due
lingue diverse possono interagire
con l’altro ora qui è dove alcuni di
il genio del male entra in gioco è
perché il web è un multipartitico
piattaforma tutti hanno investito tutti
standardizzare ognuno ha il suo
implementazione facendo qualcosa di nuovo è
difficile ci vuole tempo quindi come stai
convincere la gente ad adottare una tecnologia quando
ce ne sono uno due tre forse tutto il
i browser non lo supportano ancora in modo nativo
quindi è la prima versione del web assembly
sarà progettato per essere traducibile
per javascript è semanticamente parlando
puoi semplicemente prendere questo web assembly
binario sputa un file javascript e
eseguirlo direttamente nel browser questo
significa che i browser che non implementa
può eseguirlo ma sarà più lento così
se hai un’implementazione nativa tu
può prendere direttamente il file binario
caricherà più velocemente e funzionerà più velocemente
questo è più o meno come sembra
sai che inizi con una vista
funziona questo fa solo due carichi da
la memoria lo aggiunge e lo restituisce
e poi nella versione dell’assemblaggio web
mano-sventolando questo è binario è ha un
albero operativo che essenzialmente è il
stessa cosa solo nominando esplicitamente
qualunque cosa
e poi questa è la versione JavaScript
Azam è se ti è familiare
sono le prime due righe o solo dicendo
bene gli input sono interi i due
gli argomenti sono numeri interi e vedi il
o 0 logicamente che non fa altro che come
una stranezza di JavaScript che in realtà
trasforma quello che era un numero in virgola mobile
in un numero intero a 32 bit perché non è possibile
fare operazioni booleane su virgola mobile
numeri e ogni volta che hai un ricordo
operazione invece dice che c’è questo
array gigante è un buffer di array e
lo tratteremo come un mucchio
che vediamo altrove un’altra cosa
si noti che nella versione dell’assembly Web
non ci sono puntatori quindi cosa è stato usato
essere un puntatore si trasforma in a
Numero intero a 32 bit ed è lo stesso di
ci sono altri tipi di dati come otto bit
interi che non sono rappresentati
direttamente sono solo emulati sopra
questo quindi è stato progettato per essere minimo in
il senso ci sono certe cose che
penseresti che sarebbe parte del
piattaforma ma non è necessario essere ed è
progettato come una CPU è questo
hai solo pezzetti che stai mescolando e
calcolando su così tanto parlare, facciamolo
vederlo in azione, quindi prima di andare troppo lontano
in questo devo dire che tutto il
i numeri che sto per citare sono in realtà
completamente ingiusto e io sono ingiusto
per una ragione sorta di illustrare il
questo è tutto
una versione patch di Chrome non è in
cromato ma questo qui è un tasso
paura della corsa e sta funzionando interamente dentro
JavaScript ed è interamente funzionante
sulla CPU non è coinvolta GPU che in
i termini moderni sono piuttosto sciocchi ma a
almeno mostra cosa può fare la CPU
l’angolo destro in esecuzione a circa 30
32 frame al secondo e il programma qui
è solo una versione testuale del binario
formato che ho montato in modo da poterne fare un po ‘
prototipi con non è il funzionario
sintassi o qualcosa del genere
è sul mio account github se lo sei
interessato ci sarà un collegamento più tardi
quindi sono circa 30 fotogrammi al secondo e ora
la domanda è cosa succede quando io
fai clic su questa casella e vado nel nativo
versione del back- end e vedremo
che all’improvviso è come 80 90 fotogrammi
una seconda gamma
ora noti che ho detto che questo è ingiusto tu
so se potrei richiedere una prestazione 2x
vantaggio su JavaScript lo sai lì
è il punto vendita lì, ma la verità
di materia è in realtà un modo più sottile così
questo esempio usa un floating a 32 bit
punto matematico mentre naturalmente JavaScript
funziona in termini di virgola mobile a 64 bit
matematica quindi quando hai un numero per
esempio, una quantità di 64 bit va
furto PU e quando si hanno meno bit per
i numeri in virgola mobile che puoi fare
più veloce perché hai bisogno di meno
precisione richiede meno orologi da pompare
loro ora potrebbero fare javaScript
La matematica in virgola mobile a 32 bit è veloce
ci sono modi in cui puoi suggerire ciò che sai
c’è una funzione javascript chiamata
matematica punto F round e così ogni volta che tu
fai una funzione a virgola mobile che puoi
Faccio immediatamente la matematica a F dopo
e poi il motore JavaScript può
dillo bene perché li stai facendo cadere
bit non ho bisogno di calcolarli in
primo posto quindi se è davvero intelligente e
alcuni motori JavaScript sono così intelligenti
potrebbe guardare una sequenza di matematica
operazioni con F round e dire che lo farò
basta generare il codice più ottimale
possibile ma come si scopre questo
l’ottimizzazione non è stata implementata
ancora in questo particolare motore JavaScript
e questo è un problema di triage come
ci sono solo cose più importanti da fare
al momento quindi in teoria JavaScript
potrebbe correre proprio così veloce che potrebbe funzionare 85
incornicia un secondo ma il fatto è che
non lo fa e non a causa di
complessità e tempo quindi la vera vittoria
il web assembly è che è più semplice che sia
più semplice e più facile da ottenere
prestazioni e ci vuole meno sforzo per
arrivare al punto in cui si è pieno
performance, ma ho piena fiducia in questo
JavaScript potrebbe farlo se si butta
abbastanza ingegneri e abbastanza soldi su di esso
un’altra cosa interessante che non riesco a ottenere
questo per riprodurre in modo affidabile ma ci proverò
in ogni caso è tornerà a JavaScript
così e l’ho fatto che ha appena rigenerato a
nuovo programma JavaScript compilato e
ha iniziato a funzionare così è interamente
codice diverso e poi ritorno a
il codice nativo stesso capovolgimento delle prestazioni
di nuovo a JavaScript ci andiamo così ora
vedrai che sono giù a 24 frame a
secondo mentre prima ero a 32 anni
amici un secondo adesso non mi sono preoccupato
indagando esattamente perché questo sia
questo è il tipo di cose che ottieni
il tempo è che stavo facendo qualcosa di strano
Stavo solo lanciando sempre di più
JavaScript e ad un certo punto il
Il motore JavaScript era come se niente fosse
Ho raggiunto una soglia e non lo sono
andando a provare più difficile e ora
è più lento e questo è quello che succede
di cui stiamo parlando è prevedibile
la performance è sulla strada per questo ho fatto
cose come prototipi con condiviso
memoria dove stavo cercando di fare fluido
simulazione un altro calcolo parallelo
in JavaScript e in realtà mi sono imbattuto in
tutti i tipi di bug strani che hanno richiesto molto
di tempo per capire perché era in esecuzione
più lento come alcuni di loro coinvolti
campi invisibili che sono stati aggiunti al
oggetti per dargli un ID hash perché io
lo stava mandando ad un altro processo e questo
avevo bisogno dell’ID hash per sapere se ci sono
cicli nel grafico dell’oggetto così è
interamente invisibile interamente parte del
sottostante alla base dell’implementazione
così che in poche parole è il web assembly di
uno zio che è un venditore e uno dei suoi
le quotazioni sono chiunque può vendere il futuro così
la domanda è quando è questo in realtà
saranno disponibili ora tutti questi
i numeri sono molto molto incerti e
possibilmente ottimista erano in qualche modo a
la soglia in cui ho detto di cosa
2016 e nessuno ha riso forte ma tu
sapere che le cose sono ancora in fase di sviluppo
questi non sono una promessa così nonostante
in precedenza stavo dicendo assicurato il nostro
cosa multi-elemento di memoria condivisa a
fare codice nativo sulla versione di lavoro web
uno non ha intenzione di avere così versione
uno sarà più canonicalizzazione
di cosa succederebbe se lo traducessi
per javascript hai un singolo
thread hai un ciclo di eventi ma cosa
ottieni è che lo fai caricare più velocemente e
corri più veloce e più affidabile
prestazioni quindi il prima possibile
dopodiché aggiungeremo condiviso
memoria multi e perché non fare quella parte
della versione 1 e la risposta è quella
il threading è complicato come utente ma
è ancora più complicato come qualcuno
cercando di specificare come funziona in questo modo
è uno di questi come Quagmire’s dove
tu mandi soldati e loro mai
lasciare vivo è chiunque abbia provato
i thread delle specifiche nella memoria condivisa ha
ha avuto un momento difficile ora possiamo imparare
da tutto ciò che hanno fatto e noi
sicuramente sai cosa vedere
Il comitato per gli standard di c ++ lo fa ma noi siamo
essere molto cauti e non dire questo
bloccheremo l’uscita su questo
ed è per questo il più importante
caratteristica nella mia mente in realtà non sta andando
essere parte della versione iniziale e
quindi dal fatto che ci sia o no tutto
tipi di cose interessanti da aggiungere uno
di quelli grandi per me sarà
il collegamento dinamico è adesso quando tu
avere un raccoglitore dell’assemblaggio Web è solo
sarà un binario quindi la domanda
è come si condivide la funzionalità
tra le app come fai potenzialmente
aggiorna parte della tua app ma non tutte
allo stesso tempo in modo da poter avere un parziale
il download e il collegamento dinamico sono a
tecnica da codice nativo che se tu
usare su javascript è come cosa
non lo fa tutto il tempo è dove
hai solo più file che ottengono
caricato e trasformato in un singolo programma
quindi questo è tutto il contenuto preparato e
facciamo domande che possiamo ottenere come
tecnico come vuoi stavo solo provando
per risparmiarti mi piacerebbe parlarne
ma vedremo cosa la gente vuole chiedere
e ciò che l’aspetta che la
Bolognese riguardo a cosa ci proveremo
avvicinarsi il più possibile e ad esempio
quando stai traducendo in JavaScript
sai come compilare il codice nativo
a JavaScript a volte puoi ottenere come
al suo interno varia l’app che ti piace
arrivare al due percento come il migliore
casi in cui penso che tu sia puro numerico
quindi se può guardare il programma e
dice oh questo è un mucchio di matematica che può
basta generare la matematica ed eseguire direttamente
sulla CPU ma poi quando inizi a farlo
qualcosa con accesso alla memoria deve
convalida tutti gli accessi alla memoria
e assicurarsi che siano sul giusto limite
quindi c’è più attrito o se lo hai
uno stack di chiamate lascerò attraverso il
traduci in JavaScript ma Wasel lo farà
essere meno di un overhead come la chiamata
stack ha anche overhead quindi è molto
misto è tradotto in JavaScript che ho
visto su veloci implementazioni di JavaScript
essere praticamente al collo con nativo
codice o talvolta come ventiquattro
percentuale più lenta su JavaScript sbagliato mio
dovrebbe dire male ma su JavaScript
implementazioni per cui non sono state ottimizzate
questo carico di lavoro è possibile
x essere come un fattore di 10 nativi più lento
Il cliente è stata l’esperienza che ho detto
la gente intorno al dieci venti per cento e
le tue aspettative sarebbero ragionevoli
e in qualche modo questo è il costo di
la portabilità come una cosa che non ho avuto
in è come lo spostamento di bit è come fa
funziona quando il tuo numero è troppo grande
hai un numero intero a 32 bit e tu
vuoi spostarlo di 33 puntate mentre gira
l’hardware diverso fa questo
in modo diverso sai e se vuoi
qualcosa di veramente portatile allora
per un po ‘stringere e dire
bene quando sei fuori portata lo fa
esattamente questo e poi questo aggiunge un costo
ogni operazione che cambia in modo così sicuro
sta per costarti e portabilità dentro
la sensazione che il tuo programma funzioni
lo stesso ovunque ti costerà
ma non ti è costato particolarmente
quando consideri che stai ricevendo discussioni
e sim il dubbio sull’affare alla fine
perché lo compenserai ah si
la domanda era: ci sono toccanti
punti era la frase usata tra il web
assembly e GWT è ancora di GWT
interessare qualsiasi interesse di Google a Google
quindi, per quelli di voi, non lo sappiamo
credo che GWT sia una tecnologia che
traspone Java in JavaScript e i
credo che sia usato per applicazioni come
come Gmail non sono Gmail ad AdWords
ok si e non posso parlare per questo
di interesse per Google è che sono giusto
seduto sulla piattaforma web parte te
so che sto cercando di farlo funzionare così
ci sono persone dalle quali non posso parlare
la nostra visione alla fine vorremmo
Supporta questo caso, quindi se sei arrabbiato
compilando Java è un po ‘di più
complicato perché Java è un ricordo
linguaggio sicuro e specialmente io nel
la prima versione è il web assembly no
progettato per avere un supporto efficiente per
raccolta dei rifiuti si potrebbe fare
non sarà efficiente come
dicendo mappatura su oggetti JavaScript
e fare affidamento sulla spazzatura JavaScript
collezionista stesso quindi alla fine la versione 2
penseremo alla memoria sicura
lingue ma versione 2 per quello che sono
interessato non esiste è adesso
ci stiamo concentrando solo sul devi
bucket of byte type languages e
cose che sono implementate direttamente
c’è di come Python così va bene ancora uno
dal pubblico la domanda è
dattiloscritto ha tipi potrebbe web
il montaggio è utile in quel caso
personalmente non lo userei quindi c’è
un punto interessante proprio qui dove
sai che il formato binario ha tutti i tipi
di tipi e sarebbe bello essere in grado
per dire hey ho qualcosa che è
JavaScript ma ha tipi ma questo è
sarà diverso dal dire che ho
un grosso pezzo di memoria che ho manualmente
gestire in modo da sapere che il dattiloscritto è una specie di
in mezzo e conosci la seconda versione
dove c’è un linguaggio sicuro per la memoria
potrebbe valere la pena, ma intendo a
molte di queste cose che vengono trasposte
il JavaScript è stato progettato con
javascript in mente è che hanno esattamente
lo stesso modello di concorrenza che hanno voi
so memoria condivisa ecc ecc così penso
saranno sempre i migliori in cima
di JavaScript così bene ne abbiamo
più domande sull’app non vanno bene più
quindi c’è qualcuno che li alza mano
indietro hmm gli altri produttori di browser come
come ottenere sul web
sta per essere un vero standard o lo sono
finiremo con tutti quelli che stanno facendo
la loro diversa implementazione di esso
e saranno gli stessi signori
Indumento intimo JavaScript sopra l’acido in
giusto così una di queste linee complicate a
a piedi non posso parlare per altro browser
fornitori tuttavia questo link in fondo
della pagina conosci github.com / web
assembly è quel tipo di essere usato come un
area di sosta per le persone da discutere
cose da scrivere e puoi farlo
andare lì e vedere di persona chi è
partecipando penso che se non altro
stiamo coordinando un po ‘troppo come
stiamo pianificando di fare molte cose fuori di me
personalmente voglio vedere più prototipi
ma in termini di mancanza di coordinamento
posso dire che non è un problema in
questo punto quindi la domanda è chi faccio
vedere come il pubblico di destinazione che sto ripetendo
questo perché è stato registrato e io sono
non sono sicuro che tu venga registrato, credo
tutti lo hanno sentito questo è piuttosto
domanda difficile è intendo nel
cominciando come tutti i motori di gioco
sviluppatori che stanno cercando di mirare
più piattaforme sono queste sono molto
persone dedicate che conosci molto
persone tecnicamente qualificate e c’è
saranno sempre quelle persone che dicono
Posso usare questa tecnologia non importa cosa
ma quando pensiamo al web oggi
c’è un sacco di lunghe code
sai praticamente chiunque può ottenere
coinvolto nel web sai che è abbastanza
facile da imparare JavaScript lo sai
abbastanza facile da iniziare a scrivere
applicazioni e quando si sta guardando
qualcosa come il codice nativo che stai perdendo
alcune delle caratteristiche che rendono tutto
più facile a bordo è necessario avere un
compilatore nel ciclo e ci ripenso
le cose del tempo come il grugnito che sai potrebbe essere
adattato per piacere rieseguire il compilatore e
rigenerare il tuo binario ma si, così io
avere sviluppatori nativi nel pubblico
di sviluppatori front-end a volte quando
stiamo parlando di memoria condivisa
concorrenza sul web alcuni dei
Le persone JavaScript si preoccupano un po ‘
e dite bene che non vediamo vedere alcuna necessità
per questo sulla piattaforma quindi è uno di
questi fino a quando non è effettivamente lì è
difficile capire come l’ambiente
sta per coinvolgere e io penso quello
delle cose che
lo sai che personalmente mi de-stress
come sai quanto è diverso il web
la piattaforma è e le altre piattaforme così io
Pensa che adesso sono molto separati
ecosistemi ed è un po ‘difficile da vedere
cosa succederà quando inizieranno
fusione, ma quando stai chiedendo le cose
come il codice è come uno sviluppatore web
potresti usare una libreria nativa o alcuni
come sembra proprio come l’importazione
JavaScript ma fornisce un po ‘alto
funzionalità di codifica video delle prestazioni
o funzionalità di decodifica video ed è
solo in esecuzione nel browser in modo si può
non scrivere da soli ma puoi ancora
usarlo bene, quindi è uno sviluppatore nativo
sta usando il vorbis aperto e il lubrificante così
lib vorbis è piuttosto semplice perché
è solo un codec è solo
computazione in modo da compilarlo e
funziona magicamente ed è magicamente alto
la prestazione non è un problema, c’è birra aperta
un po ‘più complicato perché quello
interagisce con il sistema è un audio
libreria in modo che stai dicendo hey voglio
riprodurre bene il suono come si ottiene
c’è quindi una cosa che ho agito le mani sopra
e poi andare troppo in profondità è per quello
versione 1 non hai alcuna API
basta chiamare fuori a javascript così per
guarda le versioni future che vogliamo avere web
api è direttamente associato al web assembly
ma fondamentalmente saranno
diverse API così sarà il
lo stesso problema se li avete
è direttamente o andando a javascript
dovrai scrivere un po ‘
della libreria di compatibilità su di esso così
qualcuno da qualche parte sta per scrivere un
libreria che dice oh ecco l’open al
l’interfaccia qui è come la implemento
i termini dell’AP web sono per l’ audio
e probabilmente ci saranno 40
Pinal perché è 3d perché il web
al momento non ha 3D ci sta andando
avere delle emulazioni da parte tua
conoscere tutte le cose di spazializzazione in cima
di quello quindi alla fine compili il tuo
è il codice e si thunk nell’AP web
come OpenGL in WebGL sai che lo è
sarà abbastanza semplice
che rispondi alla tua domanda
sufficientemente chiunque altro
ok grazie per essere venuto
tu
e ultimamente ho lavorato su un nuovo
la tecnologia chiamata assemblaggio web sono stato
lavorando su questo con una manciata di
collaboratori e altri ingegneri del software
in altre aziende è il web assembly
progettato per eseguire il codice nativo sul web
eseguilo rapidamente eseguilo in modo efficiente eseguilo
eseguire in modo sicuro performante Lee e di
loro stessi abbiamo visto tutto questo prima
quando dico no code intendo C C ++ o
qualsiasi cosa compili su una macchina
architettura e codice nativo naturalmente
corre veloce proprio bene ottenendo tutto questo
è farlo insieme per farlo funzionare sul web
abbiamo avuto pezzi del puzzle per a
molto tempo ma credo che sia il web assembly
sarà la prima cosa che mette
tutti i pezzi insieme quindi i due
ragioni per cui sono molto interessato al web
assemblea tutti ne parlano
o dovrei dire il browser principale
i venditori ne parlano insieme
ora questo è molto lontano dal vero
essendo uno standard questo è molto lontano
da tutti coloro che si impegnano ad esso, ma il
Il fatto che stiamo parlando è molto buono
firmare per quello che sta arrivando l’altra cosa
che sono molto eccitato per questo
ha condiviso multi memoria ora c’è a
molti sviluppatori front-end qui e
sviluppatori front-end si prega di aumentare il
mano quindi so con chi sto parlando e
quindi persone con esperienza con nativi
codice okay quindi sembra che abbiamo un po ‘
di una divisione con un po ‘di pregiudizio verso
il codice nativo quindi spiegherò condiviso
memoria multi in un po ‘soprattutto per il
sviluppatori front-end ma questo è molto
molto importante per ottenere il codice nativo per
lavorare e lavorare molto bene
quindi siamo stati in questa strada prima della strada
prima che il suo codice nativo sul web sia
ci stiamo provando perché non lo so
circa cinque anni e non lo è mai
abbastanza lavoro ma ce ne sono stati alcuni
cose che sono state davvero impressionanti
a mio avviso, una delle cose che è
al giorno d’oggi si verificano i motori di gioco
il web è l’unità di Unreal è che lo sono
prendendo il loro motore di gioco che è
attualmente destinato ai desktop su dispositivi mobili
e quindi stanno aggiungendo componenti così
possono funzionare sul web e questo mostra a
è una sorta di strategia multipiattaforma
stai cercando tutta la distribuzione
canali che puoi per i tuoi contenuti e
il web è solo un altro al momento
è un po ‘difficile perché il web è
strano come entreremo in un momento ma
se fosse meno strano se potessi
indirizza tutto ancora una volta
opportunità per le entrate di più
opportunità di consegna immagina se
potresti semplicemente inviare un link a qualcuno a
il gioco che il tuo amico clink sul link
allora sei lì nel gioco
immediatamente nessuna installazione hanno ragione
accanto a te funziona solo ce ne sono stati alcuni
interessanti esperimenti interessanti con
esecuzione di lingue diverse sul Web
in questo momento puoi usare qualsiasi lingua tu
voglio sul web finché è
JavaScript e c’è un sito web chiamato
repli twitch ha usato la tecnologia
per compilare il codice nativo fai javascript a
eseguire cose come Python e una pagina web
eseguire cose come C sharp su una pagina web
anche le persone più folli stanno emulando tutto
sistemi operativi c’è un sito web
chiamato dosbox dove puoi eseguire tutto il tuo
i vecchi giochi preferiti se sei così vecchio
j / s Linux è qualcuno che esegue un intero Linux
macchina e tradurlo in Java in a
pagina web in modo da poter fare Linux in un web
pagina uno dei miei collaboratori ha istituito un
intero ambiente di sviluppo all’interno di a
Modulo client nativo in modo da poter eseguire GCC
all’interno di una pagina web la roba pazzesca
cose e persone impressionanti hanno
sperimentare con la visualizzazione di PDF sei tu
potrebbe effettivamente compilare il visualizzatore di PDF e
eseguirlo tradizionalmente all’interno di una pagina web
I visualizzatori PDF fanno parte del browser web
ma in realtà ne hanno fatto una app web e
simile con la decodifica dei media è lì
alcuni posti che le persone hanno preso i media
decodifica i decodificatori audio ed eseguili
all’interno della pagina web di nuovo tradizionalmente
queste cose sono parte di
i browser web se vuoi una decodifica
video dici che il mio programma non lo è
andando a farlo così vado
delegare al browser web e c’è
molte ragioni per questo che il web
il browser non è abbastanza veloce in un sacco
di caso è o dovrei dire web
applicazioni non sono abbastanza veloci, ma voglio dire che
sono abbastanza veloci nel senso del throughput
ma a volte non sono affidabili
abbastanza sai se stai cercando di
decodifica audio devi farlo esattamente
quando è necessario l’audio o altro
le lacune sono pop, quindi le prestazioni sono più
rispetto al throughput è anche l’affidabilità di
performance così adesso tutti questi
le cose sono molto interessanti e loro
lavorare in molti casi e quasi lavorare dentro
alcuni casi ma sono il prodotto di
persone molto dedite e se ci abbassiamo
la barra per entrare cose come questa volontà
diventare molto più comune molto di più
pervasivo quindi il problema con il web è
che aveva una sua storia evolutiva
è risposto a un diverso insieme di
forze che la piattaforma nativa ha fatto e
finito in un posto diverso con un
insieme completamente diverso di proprietà ora
diverso non è male ma quando siamo
chiedendo come possiamo fare multi piattaforma
sviluppo come possiamo prendere il codice legacy
e spostarlo sul web diventa molto
più difficile è diverso quindi grande
proprietà del web che è diversa
è questo asincrono è che se tu mai
voglio chiedere al sistema qualcosa da dire
carica un file tu dici hey voglio un carico
file il sistema dice che è fantastico dare
mi richiama per darti una chiamata
indietro e dice okay tornerò a
più tardi ora se stai eseguendo ancora
eseguendo non avrai mai la risposta
in effetti, l’unico modo per ottenere un
risposta quando esegui JavaScript
è che interrompi l’esecuzione che ti rilassi
l’intero stack di chiamate ritorna al
ciclo di eventi il ciclo degli eventi potrebbe fare alcuni
le cose nel frattempo non hai
controllo su ciò che sta facendo e poi
alla fine ti richiameranno e diranno
oh sì ecco il file la tua richiesta
attraverso il codice negativo della rete sul
altra mano come le interfacce sincrone
questo è un retaggio di come funziona
i primi sistemi erano: tu vai
sistema operativo e dire hey voglio
il file dice si ferma proprio lì per a
momento passa ottiene il file quindi dice
ecco il file riprendere così il
la cosa interessante qui è che non lo fai
srotolare lo stack di chiamata che hai
tutta la catena di chiamata di funzioni si ottiene il
file e quindi è possibile riprendere l’esecuzione
immediatamente da dove sei così se
stai cercando di tradurre un sincrono
programma in un programma asincrono
questo finisce per essere un sacco di lavoro perché
devi tagliare
l’intero stack di chiamate devi cambiare
cose così ogni volta che hai avuto quello che hai usato
per essere un’operazione sincrona diventa
un’operazione asincrona che gira
in un richiamo un altro aspetto che
è abbastanza difficile fare il porting sul web
che non ci sono thread con condiviso
stato quindi se hai familiarità con il web
piattaforma ci sono i lavoratori del web che sono
tecnicamente i fili ma hanno loro
interi contatti JavaScript che hanno
il proprio set di oggetti e tu puoi
non avere mai un oggetto che sia
contemporaneamente modificabile con due
discussioni dove quando hai qualcosa
come la piattaforma nativa quando hai
discussioni è possibile passare liberamente i dati a loro
e puoi effettivamente accedere ai dati al
stesso tempo che di solito è una cattiva idea
a meno che tu non sia molto attento anche al
persone con cui lavoro sono esperto
discussioni quando chiedi loro come funziona
lavoro sono come lasciatemi pensare
quello per un momento e quello è chiamato
saggezza in quanto le persone si rendono conto di non essere come
intelligenti come pensano di essere sui fili
sono complicati quindi quando fai il porting nativo
programmi che vuoi discussioni perché loro
nonostante tu lo sappia nonostante il fatto
sei una granata a mano di giocoleria sono loro
darti le cose che ti servono danno loro
prestazioni che ti danno affidabile
le prestazioni sono essenzialmente le
primitive che la CPU usa per te
non può davvero essere più efficiente di
che non puoi essere più affidabile
di quello e in molti modi che puoi
discute se in realtà vuoi discussioni
come modello di programmazione sono
pericoloso ma sono molto molto utili
quindi avere una piattaforma che li fornisce
a te e ti permette di costruire le cose in cima
di loro ti permette di costruire meglio
le astrazioni su di esso sono belle
importante un’altra cosa strana riguardo il
il web è coerente incoerente
le prestazioni sono state progettate da JavaScript
per essere facile da usare ed è solo finita
il tempo che siamo stati in grado di farlo girare
sempre più veloce e questo è in parte
a causa degli sforzi eroici della gente
l’implementazione di javascript è che hanno
diventato più intelligente e intelligente e il
Il motore JavaScript ha ottenuto di più
complesso e più complesso quindi quando lo chiedi
perché la mia applicazione JavaScript
eseguire il modo in cui fa la risposta è
non molto chiaro quindi c’è di tutto
compilatori just-in-time che iniziano da
l’inizio che dice bene non so nulla
sul tuo programma tranne il suo testo
quindi inizia ad eseguirlo per un po ‘
poi dice oh aspetta questo è un um
Posso fare un po ‘ meglio in modo che funzioni
più veloce di quanto dice oh, conosco il tipo
di questo allora può funzionare meglio di così
dice oh ho ricevuto nuove informazioni che dicono
questo potrebbe essere un numero di tetto a corda I
non so cosa sto facendo quindi corriamo
più lento in modo da poter effettivamente passare
la durata del tuo programma che funziona
più veloce di correre più lentamente di correre più veloce
in esso è a causa dell’euristica e
la messa a punto e la magia che su
media fa andare meglio il web ma per
la tua specifica applicazione potrebbe risultare
in un comportamento bizzarro che non puoi
spiegare un’altra cosa è spazzatura
collezione è JavaScript fornisce il
astrazione che non devi affrontare
con la memoria quindi se hai finito c o c ++
dicendo manualmente che ho finito con questo
oggetto è molto incline agli errori sai se
fai c ++ abbastanza a lungo da fare
entra nelle abitudini sai come farlo
ma alla fine quando sbagli
diventa il peggior bug del mondo
per gestire le correzioni della raccolta di dati inutili
tutto ciò dicendo che il sistema funzionerà
capirlo per te, ma il costo di
questo è che occasionalmente il sistema ha
venire a fermare il mondo e dire lasciami
ripulire dopo aver quindi riprendere il mondo
e questa è la pausa GC è quando hai un
Applicazione JavaScript o qualsiasi
applicazione con loro con un reale o qualsiasi
l’applicazione con gestione della memoria è se
stai cercando di eseguire il rendering di 60 fotogrammi
un secondo o rendering audio nel peggiore
caso potresti essere interrotto e lì
potrebbe essere un po ‘ di singhiozzo così del tutto
il codice di porting sul web è attualmente
doloroso, non importa come lo fai e il
la domanda è come possiamo fare meglio così tu
potrebbe pensare che forse solo il web
non vale la pena è c’è tutto questo
cose a cui si riversa il codice nativo
il web è difficile quindi non facciamolo
lascia il web impostato sui suoi punti di forza
ma ha molto di interessante
punti di forza per altri sviluppatori è aperto
quindi vuoi spedire un pisolino tutto ciò che hai
fare è ottenere un server cloud da qualche parte
caricatelo lì boom, sei un pisolino
editore ci sono anche più fornitori
che hanno browser diversi che non hai mai
preoccuparsi del blocco del fornitore per
qualsiasi standard web perché c’è
più implementazioni di esso è
sicuro ora dovrebbe esserci un asterisco
accanto a questo è tecnicamente ogni
piattaforma sicura ma hanno un
diversa definizione di sicurezza e il
il web ha una definizione abbastanza unica di
sicurezza che è sicuro come un documento
quindi la storia del modo
iniziato con la visualizzazione di documenti HTML e
il modello di sicurezza continua da quello
così quando qualcuno ti consegna un documento
non devi preoccuparti di questo
nella tua tasca sai che non sta andando
per farti del male in alcun modo come i tuoi occhi
non stanno andando a esplodere è un documento è
sicuro non c’è niente che qualcuno possa fare
danneggiarti dandoti un documento
altre piattaforme hanno un altro a
approccio diverso a questo e questo ha
ha causato problemi legacy come il funzionamento
i sistemi presumono che qualsiasi programma stia funzionando
a tuo nome quindi quindi se vuole
prendere la dichiarazione dei redditi e caricarla su
qualche strano server in qualche straniero
Paese che è una cosa perfetta
fallo perché è quello che stai facendo
non è vero per molte app che sono
caricato attraverso la rete un’altra cosa
è di nuovo portatile questo è un omaggio
per meritare un asterisco accanto ad esso è
è portatile nel senso che ovunque
c’è un contenuto del web browser web può
eseguire e lo stesso programma dovrebbe eseguire il
lo stesso ovunque, se sei abituato
codice nativo che passi molto tempo
porting e codice nativo è portatile
nel senso che puoi farlo funzionare
qualsiasi macchina veloce ma potrebbe esserci
differenze di comportamento tra così
le cose sono un po ‘diverse tra
piattaforme quindi ci sono due distinti
diverse versioni di portabilità e
la versione web della portabilità è quella
comportamento coerente, non importa quale sia il
sistema operativo non importa quale sia la CPU
un’altra bella proprietà che sorta di
Molle dalla sicurezza e
la portabilità è l’effimero è che non lo fai
devi installarlo basta puntare il tuo
browser web presso l’app in cui ti trovi e
correndo all’istante e come risulta
quando devi chiedere agli utenti, oh, posso averlo
permesso di fare cose cattive per te ma
onestamente non lo farò in questo modo
l’utente da e aggiunge attrito e
rende più difficile convincerli a usare
la tua app consente anche l’effimero
l’idea di app evergreen è quella di tutti
tempo qualcuno va al tuo server web
ottengono la versione più recente che devi
preoccuparsi meno del supporto tecnico per
qualcuno che sta usando l’applicazione
ha due anni e poi lo sei
grattando la testa per capire perché
ha fatto una cosa così strana in corso così
quando sarebbe bello se potessimo ottenere tutto
queste proprietà del web e di tutti
le buone proprietà del nativo in uno
bundle è una specie di domanda
questo è motivare il web assembly e io
dovrei dire a questo punto che sto andando a
fare riferimento ad esso in alcuni punti w
per ASM e questo è solo abitudine perché
abbiamo parlato di internamente così
lungo e abbiamo un gergo così da capire
come siamo arrivati qui dovremmo fare brevemente
guarda la storia e come stavo dicendo
che nel primo c’è l’ipertesto
linguaggio di markup che era solo un
documento e poi pochi anni dopo le persone
sono compresi i documenti interattivi
più bello dei documenti, quindi è così
da dove proviene JavaScript è possibile
cliccaci sopra e questo è un evento e tu
rispondere all’evento e poi si ritorna
al ciclo degli eventi ma le persone volevano di più
così dicono subito e hey abbiamo
questa bella piattaforma di distribuzione di documenti
quindi se potessimo avere altri tipi di
documenti come documenti PDF o vettoriali
grafica o potremmo incorporare Word
documenti quindi c’è questa profusione di
tecnologie plug-in o persone hanno detto hey
vogliamo fare di più sul browser web
ma invece di farlo all’interno del web
browser, facciamo solo un pezzetto di questo
codice sul browser Web e sul legacy
è ancora con noi oggi 20 anni siamo
finalmente affrontando ma il problema di
questo è c’è una severa sicurezza
è un problema perché non lo eri
all’interno del browser web perché tu
non stavano pensando a come comportarsi come
contenuto web perché tu sei il tuo intero
proprio stack si potrebbe avere solo diverso
regole per ciò che era sicuro ed era
un po ‘come quando hai avuto i due
i genitori e tu sei come hey posso fare
questo no hey posso farlo okay e tu
sai una volta che sei in quella situazione è
molto difficile essere sicuro e c’è
problemi di complessità superficiale così dentro
un certo senso siamo stati abbiamo avuto il meglio di
intenzioni in questa era ma non l’abbiamo fatto
Capisco bene tutte le belle proprietà
del web ho detto prima intorno al 2000 a
c’è un rinnovato interesse in
javascript performance chrome è uscito
mozilla ha iniziato davvero a spingere la loro esca
e sun li javascript è diventato veloce
è diventato pratico pensare alla costruzione
applicazioni su larga scala in javascript
c’è un decollo esponenziale e
tutti erano come magici elfi javascript
stanno rendendo le cose più velocemente tutto il tempo
ma in realtà conosco quei JavaScript
elfi e come si scopre questo è molto
molto difficile e la quantità di complessità
coinvolto è enorme e quindi questo esponenziale
decollare che abbiamo visto intorno all’era del 2008
non è sostenibile c’è un certo
soffitto dove stiamo andando a rallentare
progredire e rallentare i progressi e il
la domanda è come continuiamo a fare come
continuiamo a ricevere
tipo di performance e web assembly di
risponde dicendo dicendo che lo facciamo per essere
più semplice è la vita del browser
più facile per farlo correre veloce a
il progetto a cui ho lavorato è stato Nativo
Il cliente è google ha detto hey quello che siamo
sta per fare è prendere un
figura dell’ambiente di programmazione nativo
fuori come renderlo sicuro assicurandoti
può solo parlare con l’op o solo parlare
al browser non parla con quel cervello
sistema e lì hai ottenuto il codice nativo
il web, purtroppo, non hanno ottenuto
buy-in dal browser di rendering di altri fornitori
i venditori di browser sono nel mio punto di vista
dal mio punto di vista è giusto
soluzione tecnica ma non ha mai avuto il
strisciare il multi-partito nella croce
soluzione del browser e questo ha sempre fatto
la vendita molto dura per gli sviluppatori web sei tu
sai che hai un ottimo bicromato di potassio ma che dire
l’altro cinquanta percento circa
cosa molto difficile da superare web
gli sviluppatori vogliono correre ovunque
voglio che sia una tecnologia web che vogliono
per essere completamente aperto e completamente portatile
quindi intorno al 2010 lo script M è arrivato sul
scena e, a prima vista, questo è davvero
idea terrificante è che tu prendi nativo
codice e compilarlo in JavaScript ora
questo è stato subito dopo l’ avvio di JavaScript
diventare veloce o veloce così erano le persone
ancora nella mentalità di JavaScript non lo è
che lento ma dovuto ad alcuni molto attenti
decisioni ingegneristiche che è stato in grado di eseguire
scioccamente veloce e in realtà solo
ha lavorato un sacco di volte il grande
la limitazione di Emscripten è quella perché
è stato compilato per JavaScript
non poteva fare fili efficacemente aveva
utilizzare il modello di concorrenza degli script Java
dovevi avere il ciclo degli eventi che avevi
essere asincrono non si poteva bloccare
quindi c’è sempre un po ‘di porting
attrito in cui hai dovuto rielaborare il tuo
modellare il modello di applicazioni in modo che funzioni
all’interno del modello di applicazione JavaScript così
questo ci porta all’assemblaggio del web è ciò che
se potessimo avere una buona pervasività
di Emscripten ma allo stesso tempo
la concorrenza della memoria condivisa è così
tipo di un riassunto di ciò un po ‘
la storia prolissa è se guardi
in cima è l’era del plug-in e
i problemi evidenti ci sono sicurezza
e un’altra cosa che è venuta è
perché c’è sicurezza c’è una specie di
accettazione a malincuore delle cose
NPAPI quindi quando sono arrivati i browser mobili
hanno detto che tecnicamente no
parte del web standard quindi non lo siamo
andando a sostenere così la decisione sulle mele
per non supportare il flash, ad esempio
è stato un vero grande impulso per specie
riesaminare queste tecnologie e
per questo non sono davvero croce
browser più anche se una versione
di Chrome supporta flash sul cellulare
la versione non è quindi se si guarda il
questo è l’angolo destro o quello destro
quello che mi interessa in particolare
non c’è davvero nessuna piattaforma in questo momento
che entrambi gira in ogni browser e
supporta la memoria condivisa multi e questo è
una delle grandi cose che lo rende facile
eseguire app native sul web in modo web
assemblaggio potenzialmente così storia
come funziona effettivamente l’assemblaggio web e
la risposta in qualche modo è molto semplice
e molto noioso è che sei abituato a
normale app web e quell’app web accetta
una pagina HTML prende in sorgenti JavaScript
accetta file di dati come immagini CSS
cose lungo quelle linee e il web
assemblaggio quando il browser supporta il web
assemblaggio ci sarà solo un
binario è che sarà un binario
prodotto da un compilatore C dalla sorgente C
file e quindi basta caricare il browser
molto come avresti JavaScript ha il suo
proprio vm si trasforma in un sacco di funzioni
si trasforma in molto codice all’interno del
browser ora sto mentendo un po ‘
fatto come un problema di attuazione un sacco di
le persone che hanno intenzione di
l’implementazione di questo sta pianificando di fondere
il javascript nei bit dell’assemblaggio web
così quando hai effettivamente un assemblaggio web
archivia quello che sta succedendo, lo stai prendendo
e lo stai spingendo nel tuo
motore javascript solo in un molto più basso
livello è il file dell’assembly web che conosci
più su di esso dall’inizio così tu
può saltare tutto il dinamico e adattivo
cose di compilazione in cui stai provando
per capire è questo un intero o è
questo una stringa si sa dalla
all’inizio ma questa è un’implementazione
dettaglio dal punto di vista degli utenti voi
non so che non ti importa di cosa si tratta
in realtà all’interno di questo file binario è
piuttosto difficile fare diapositive sul binario
quindi ecco un’immagine per illustrarlo così se
hai un esempio che stai chiamando il
funzione foo e tu ne hai conosciuto uno
argomento che è un plus 7 altro
che è sia a che B sono locali se
questo era JavaScript che avresti inizialmente detto
bene, io non so nulla di ciò che non conosco
so esattamente quale funzione sto chiamando
sai che non so se a è un numero intero
Non so se si tratta di una stringa, quindi questo
operazione aggiuntiva potrebbe fare molto
cose che potrebbe concatenare potrebbe aggiungere
ecc. ecc. ma nel web assembly
versione è hai un albero di operazioni
in ognuna di queste operazioni puoi
esattamente e per quello che farà
quando hai un’operazione di aggiunta
dice che questo è il tipo di esso è un in
32 operazione quindi gli ingressi sono entrambi
andando a essere interi a 32 bit l’ output
sta per essere un intero a 32 bit e questo
ti permette di avere buone prestazioni da
l’inizio il formato binario stesso
è importante perché ci permette di essere
Più piccolo quindi se si prende un JavaScript
applicazione che sai compilata come MJ s
e quindi transcodificare su binario di
gli ingegneri del software di Mozilla lo hanno fatto
questo esperimento e trovato che loro
potrebbe ridurre il file a circa il terzo
la dimensione originale ma questo è prima
compressione se la comprimi effettivamente
c’è una sorta di argomento di entropia e
gioca che è sempre lo stesso programma così
sarà ancora circa lo stesso
dimensioni ma ciò nonostante erano in grado di
radere circa un quarto delle dimensioni
ora la dimensione è molto importante, specialmente su
il web perché è dati è come
molto devi scaricare e questo
influisce anche sulla velocità di avvio
influisce anche sulla frequenza di aggiornamento
la tua app e le cose in questo senso
più piccolo puoi ottenerlo paga
dividendi in tutti i tipi di altri modi e
dovrei dire a questo punto che lo sai
suonato sulle prestazioni e di nuovo
la performance è una di queste cose
è più che altrettanto veloce
la sua batteria mobile è la differenza
tra quattro fotogrammi al secondo è bello
hack e 40 frame al secondo oh questo
potrebbe davvero funzionare così le prestazioni sono a
caratteristica non è la stessa
applicazione che esegue più velocemente un’altra
cosa interessante del binario
il formato è che è circa 23 volte
più veloce da analizzare del testo, quindi perché
è binario perché non è progettato per
puoi essere umano leggibile, scrivibile
disporlo in modo tale che il
macchina
non deve pensare troppo quando lo fa
lo assorbe e analizza il javascript
è in realtà un componente abbastanza grande di
motori di start-up e JavaScript
cose come la sovrapposizione con il download
provare ad ammortizzarlo ma è
fondamentalmente costoso quindi cosa c’è
in realtà sta succedendo sotto il cofano che ho
agita le mie mani sulla codifica binaria e
cose del genere ma che cosa fa
effettivamente fare e quando ho fatto prima questo
scorrere Ero come wow questo è una specie di
noioso è che la saggezza si ottiene un grande
pezzo di memoria un sacco di byte e
fai fuori morsi che fai
operazioni su di loro e tu metti i morsi
di nuovo dentro non ci sono oggetti lì
sono stringhe questo non sembra
qualsiasi cosa ti aspetti di essere una programmazione
linguaggio specialmente se vieni
dal mondo, ma dopo JavaScript
pensando per un po ‘realizzo il
la cosa importante qui è questa non è una
linguaggio di programmazione di cosa si tratta è
è un’architettura di macchina portatile è
tipo di equivalente a una CPU in un certo senso
la CPU ha un sacco di memoria che può
fai operazioni aritmetiche che può spostare
cose dentro e fuori dalla memoria che costruisci
linguaggi di programmazione oltre a questo così
prendi qualcosa di simile a vederlo
compilato in termini di ciò che prendi
qualcosa come C ++ viene compilato
termini di questo così per esempio se lo hai
un programma marino con il suo bel manuale
gestione della memoria ogni volta che crei a
nuova struttura un nuovo oggetto si riduce
per dire hey voglio assegnare abbastanza
byte per contenere la struttura dei dati in modo che io
voglio assegnare un centinaio di byte e
poi fa un po ‘di contabilità
il programma stesso dice che so di avere questo
grande pezzo di memoria e basato su
contabilità so che quest’area è gratis così
qui abbiamo l’indirizzo di questi 100 byte
e quindi puoi caricare i numeri dentro e fuori
di quella specifica regione e quella
corrisponde ai campi sui tuoi dati
strutture per esempio un’altra cosa
sta succedendo che hai un limite
la quantità di memoria è probabilmente grande ma
ancora limitato perché è in esecuzione
all’interno di un processo con molti altri
cose così questo pezzo di memoria sta andando
per essere accanto al runtime di JavaScript
sarà accanto al documento
modello oggetto così ogni volta che provi ad andare
fuori da questo pezzo ci sarà
controlla che dici oh aspetta che non puoi fare
quella
non è sicuro, quindi è così che la sicurezza
è mantenuto è quello ogni volta che sei
facendo accesso alla memoria, puoi farlo solo tu
accesso alla memoria a cui è consentito l’accesso
un’altra parte molto importante del web
l’assemblaggio è invocazione di funzione esterna
quindi non è solo la sua stessa cosa
progettato per integrarsi con JavaScript così
JavaScript può chiamare nel web assembly
e il web assembly può richiamare a
JavaScript e questo significa che puoi
costruire applicazioni ibride è possibile
per esempio costruisci il tuo front end o il tuo
Interfaccia utente nel DOM e quindi delegheranno
al web assembly per fare un po ‘di sollevamento pesi
come la decodifica video o logica di gioco o
qualunque cosa tu voglia, se tu se lo fai
fatto qualsiasi sviluppo Android è sorta
di lungo la stessa linea è quello che hai
per definire quali sono le interfacce tra
le due lingue è la cima del
scivola in noi solo dichiarando due funzioni
come punti di ingresso e punti di uscita e
allora da quel punto sei due
lingue diverse possono interagire
con l’altro ora qui è dove alcuni di
il genio del male entra in gioco è
perché il web è un multipartitico
piattaforma tutti hanno investito tutti
standardizzare ognuno ha il suo
implementazione facendo qualcosa di nuovo è
difficile ci vuole tempo quindi come stai
convincere la gente ad adottare una tecnologia quando
ce ne sono uno due tre forse tutto il
i browser non lo supportano ancora in modo nativo
quindi è la prima versione del web assembly
sarà progettato per essere traducibile
per javascript è semanticamente parlando
puoi semplicemente prendere questo web assembly
binario sputa un file javascript e
eseguirlo direttamente nel browser questo
significa che i browser che non implementa
può eseguirlo ma sarà più lento così
se hai un’implementazione nativa tu
può prendere direttamente il file binario
caricherà più velocemente e funzionerà più velocemente
questo è più o meno come sembra
sai che inizi con una vista
funziona questo fa solo due carichi da
la memoria lo aggiunge e lo restituisce
e poi nella versione dell’assemblaggio web
mano-sventolando questo è binario è ha un
albero operativo che essenzialmente è il
stessa cosa solo nominando esplicitamente
qualunque cosa
e poi questa è la versione JavaScript
Azam è se ti è familiare
sono le prime due righe o solo dicendo
bene gli input sono interi i due
gli argomenti sono numeri interi e vedi il
o 0 logicamente che non fa altro che come
una stranezza di JavaScript che in realtà
trasforma quello che era un numero in virgola mobile
in un numero intero a 32 bit perché non è possibile
fare operazioni booleane su virgola mobile
numeri e ogni volta che hai un ricordo
operazione invece dice che c’è questo
array gigante è un buffer di array e
lo tratteremo come un mucchio
che vediamo altrove un’altra cosa
si noti che nella versione dell’assembly Web
non ci sono puntatori quindi cosa è stato usato
essere un puntatore si trasforma in a
Numero intero a 32 bit ed è lo stesso di
ci sono altri tipi di dati come otto bit
interi che non sono rappresentati
direttamente sono solo emulati sopra
questo quindi è stato progettato per essere minimo in
il senso ci sono certe cose che
penseresti che sarebbe parte del
piattaforma ma non è necessario essere ed è
progettato come una CPU è questo
hai solo pezzetti che stai mescolando e
calcolando su così tanto parlare, facciamolo
vederlo in azione, quindi prima di andare troppo lontano
in questo devo dire che tutto il
i numeri che sto per citare sono in realtà
completamente ingiusto e io sono ingiusto
per una ragione sorta di illustrare il
questo è tutto
una versione patch di Chrome non è in
cromato ma questo qui è un tasso
paura della corsa e sta funzionando interamente dentro
JavaScript ed è interamente funzionante
sulla CPU non è coinvolta GPU che in
i termini moderni sono piuttosto sciocchi ma a
almeno mostra cosa può fare la CPU
l’angolo destro in esecuzione a circa 30
32 frame al secondo e il programma qui
è solo una versione testuale del binario
formato che ho montato in modo da poterne fare un po ‘
prototipi con non è il funzionario
sintassi o qualcosa del genere
è sul mio account github se lo sei
interessato ci sarà un collegamento più tardi
quindi sono circa 30 fotogrammi al secondo e ora
la domanda è cosa succede quando io
fai clic su questa casella e vado nel nativo
versione del back- end e vedremo
che all’improvviso è come 80 90 fotogrammi
una seconda gamma
ora noti che ho detto che questo è ingiusto tu
so se potrei richiedere una prestazione 2x
vantaggio su JavaScript lo sai lì
è il punto vendita lì, ma la verità
di materia è in realtà un modo più sottile così
questo esempio usa un floating a 32 bit
punto matematico mentre naturalmente JavaScript
funziona in termini di virgola mobile a 64 bit
matematica quindi quando hai un numero per
esempio, una quantità di 64 bit va
furto PU e quando si hanno meno bit per
i numeri in virgola mobile che puoi fare
più veloce perché hai bisogno di meno
precisione richiede meno orologi da pompare
loro ora potrebbero fare javaScript
La matematica in virgola mobile a 32 bit è veloce
ci sono modi in cui puoi suggerire ciò che sai
c’è una funzione javascript chiamata
matematica punto F round e così ogni volta che tu
fai una funzione a virgola mobile che puoi
Faccio immediatamente la matematica a F dopo
e poi il motore JavaScript può
dillo bene perché li stai facendo cadere
bit non ho bisogno di calcolarli in
primo posto quindi se è davvero intelligente e
alcuni motori JavaScript sono così intelligenti
potrebbe guardare una sequenza di matematica
operazioni con F round e dire che lo farò
basta generare il codice più ottimale
possibile ma come si scopre questo
l’ottimizzazione non è stata implementata
ancora in questo particolare motore JavaScript
e questo è un problema di triage come
ci sono solo cose più importanti da fare
al momento quindi in teoria JavaScript
potrebbe correre proprio così veloce che potrebbe funzionare 85
incornicia un secondo ma il fatto è che
non lo fa e non a causa di
complessità e tempo quindi la vera vittoria
il web assembly è che è più semplice che sia
più semplice e più facile da ottenere
prestazioni e ci vuole meno sforzo per
arrivare al punto in cui si è pieno
performance, ma ho piena fiducia in questo
JavaScript potrebbe farlo se si butta
abbastanza ingegneri e abbastanza soldi su di esso
un’altra cosa interessante che non riesco a ottenere
questo per riprodurre in modo affidabile ma ci proverò
in ogni caso è tornerà a JavaScript
così e l’ho fatto che ha appena rigenerato a
nuovo programma JavaScript compilato e
ha iniziato a funzionare così è interamente
codice diverso e poi ritorno a
il codice nativo stesso capovolgimento delle prestazioni
di nuovo a JavaScript ci andiamo così ora
vedrai che sono giù a 24 frame a
secondo mentre prima ero a 32 anni
amici un secondo adesso non mi sono preoccupato
indagando esattamente perché questo sia
questo è il tipo di cose che ottieni
il tempo è che stavo facendo qualcosa di strano
Stavo solo lanciando sempre di più
JavaScript e ad un certo punto il
Il motore JavaScript era come se niente fosse
Ho raggiunto una soglia e non lo sono
andando a provare più difficile e ora
è più lento e questo è quello che succede
di cui stiamo parlando è prevedibile
la performance è sulla strada per questo ho fatto
cose come prototipi con condiviso
memoria dove stavo cercando di fare fluido
simulazione un altro calcolo parallelo
in JavaScript e in realtà mi sono imbattuto in
tutti i tipi di bug strani che hanno richiesto molto
di tempo per capire perché era in esecuzione
più lento come alcuni di loro coinvolti
campi invisibili che sono stati aggiunti al
oggetti per dargli un ID hash perché io
lo stava mandando ad un altro processo e questo
avevo bisogno dell’ID hash per sapere se ci sono
cicli nel grafico dell’oggetto così è
interamente invisibile interamente parte del
sottostante alla base dell’implementazione
così che in poche parole è il web assembly di
uno zio che è un venditore e uno dei suoi
le quotazioni sono chiunque può vendere il futuro così
la domanda è quando è questo in realtà
saranno disponibili ora tutti questi
i numeri sono molto molto incerti e
possibilmente ottimista erano in qualche modo a
la soglia in cui ho detto di cosa
2016 e nessuno ha riso forte ma tu
sapere che le cose sono ancora in fase di sviluppo
questi non sono una promessa così nonostante
in precedenza stavo dicendo assicurato il nostro
cosa multi-elemento di memoria condivisa a
fare codice nativo sulla versione di lavoro web
uno non ha intenzione di avere così versione
uno sarà più canonicalizzazione
di cosa succederebbe se lo traducessi
per javascript hai un singolo
thread hai un ciclo di eventi ma cosa
ottieni è che lo fai caricare più velocemente e
corri più veloce e più affidabile
prestazioni quindi il prima possibile
dopodiché aggiungeremo condiviso
memoria multi e perché non fare quella parte
della versione 1 e la risposta è quella
il threading è complicato come utente ma
è ancora più complicato come qualcuno
cercando di specificare come funziona in questo modo
è uno di questi come Quagmire’s dove
tu mandi soldati e loro mai
lasciare vivo è chiunque abbia provato
i thread delle specifiche nella memoria condivisa ha
ha avuto un momento difficile ora possiamo imparare
da tutto ciò che hanno fatto e noi
sicuramente sai cosa vedere
Il comitato per gli standard di c ++ lo fa ma noi siamo
essere molto cauti e non dire questo
bloccheremo l’uscita su questo
ed è per questo il più importante
caratteristica nella mia mente in realtà non sta andando
essere parte della versione iniziale e
quindi dal fatto che ci sia o no tutto
tipi di cose interessanti da aggiungere uno
di quelli grandi per me sarà
il collegamento dinamico è adesso quando tu
avere un raccoglitore dell’assemblaggio Web è solo
sarà un binario quindi la domanda
è come si condivide la funzionalità
tra le app come fai potenzialmente
aggiorna parte della tua app ma non tutte
allo stesso tempo in modo da poter avere un parziale
il download e il collegamento dinamico sono a
tecnica da codice nativo che se tu
usare su javascript è come cosa
non lo fa tutto il tempo è dove
hai solo più file che ottengono
caricato e trasformato in un singolo programma
quindi questo è tutto il contenuto preparato e
facciamo domande che possiamo ottenere come
tecnico come vuoi stavo solo provando
per risparmiarti mi piacerebbe parlarne
ma vedremo cosa la gente vuole chiedere
e ciò che l’aspetta che la
Bolognese riguardo a cosa ci proveremo
avvicinarsi il più possibile e ad esempio
quando stai traducendo in JavaScript
sai come compilare il codice nativo
a JavaScript a volte puoi ottenere come
al suo interno varia l’app che ti piace
arrivare al due percento come il migliore
casi in cui penso che tu sia puro numerico
quindi se può guardare il programma e
dice oh questo è un mucchio di matematica che può
basta generare la matematica ed eseguire direttamente
sulla CPU ma poi quando inizi a farlo
qualcosa con accesso alla memoria deve
convalida tutti gli accessi alla memoria
e assicurarsi che siano sul giusto limite
quindi c’è più attrito o se lo hai
uno stack di chiamate lascerò attraverso il
traduci in JavaScript ma Wasel lo farà
essere meno di un overhead come la chiamata
stack ha anche overhead quindi è molto
misto è tradotto in JavaScript che ho
visto su veloci implementazioni di JavaScript
essere praticamente al collo con nativo
codice o talvolta come ventiquattro
percentuale più lenta su JavaScript sbagliato mio
dovrebbe dire male ma su JavaScript
implementazioni per cui non sono state ottimizzate
questo carico di lavoro è possibile
x essere come un fattore di 10 nativi più lento
Il cliente è stata l’esperienza che ho detto
la gente intorno al dieci venti per cento e
le tue aspettative sarebbero ragionevoli
e in qualche modo questo è il costo di
la portabilità come una cosa che non ho avuto
in è come lo spostamento di bit è come fa
funziona quando il tuo numero è troppo grande
hai un numero intero a 32 bit e tu
vuoi spostarlo di 33 puntate mentre gira
l’hardware diverso fa questo
in modo diverso sai e se vuoi
qualcosa di veramente portatile allora
per un po ‘stringere e dire
bene quando sei fuori portata lo fa
esattamente questo e poi questo aggiunge un costo
ogni operazione che cambia in modo così sicuro
sta per costarti e portabilità dentro
la sensazione che il tuo programma funzioni
lo stesso ovunque ti costerà
ma non ti è costato particolarmente
quando consideri che stai ricevendo discussioni
e sim il dubbio sull’affare alla fine
perché lo compenserai ah si
la domanda era: ci sono toccanti
punti era la frase usata tra il web
assembly e GWT è ancora di GWT
interessare qualsiasi interesse di Google a Google
quindi, per quelli di voi, non lo sappiamo
credo che GWT sia una tecnologia che
traspone Java in JavaScript e i
credo che sia usato per applicazioni come
come Gmail non sono Gmail ad AdWords
ok si e non posso parlare per questo
di interesse per Google è che sono giusto
seduto sulla piattaforma web parte te
so che sto cercando di farlo funzionare così
ci sono persone dalle quali non posso parlare
la nostra visione alla fine vorremmo
Supporta questo caso, quindi se sei arrabbiato
compilando Java è un po ‘di più
complicato perché Java è un ricordo
linguaggio sicuro e specialmente io nel
la prima versione è il web assembly no
progettato per avere un supporto efficiente per
raccolta dei rifiuti si potrebbe fare
non sarà efficiente come
dicendo mappatura su oggetti JavaScript
e fare affidamento sulla spazzatura JavaScript
collezionista stesso quindi alla fine la versione 2
penseremo alla memoria sicura
lingue ma versione 2 per quello che sono
interessato non esiste è adesso
ci stiamo concentrando solo sul devi
bucket of byte type languages e
cose che sono implementate direttamente
c’è di come Python così va bene ancora uno
dal pubblico la domanda è
dattiloscritto ha tipi potrebbe web
il montaggio è utile in quel caso
personalmente non lo userei quindi c’è
un punto interessante proprio qui dove
sai che il formato binario ha tutti i tipi
di tipi e sarebbe bello essere in grado
per dire hey ho qualcosa che è
JavaScript ma ha tipi ma questo è
sarà diverso dal dire che ho
un grosso pezzo di memoria che ho manualmente
gestire in modo da sapere che il dattiloscritto è una specie di
in mezzo e conosci la seconda versione
dove c’è un linguaggio sicuro per la memoria
potrebbe valere la pena, ma intendo a
molte di queste cose che vengono trasposte
il JavaScript è stato progettato con
javascript in mente è che hanno esattamente
lo stesso modello di concorrenza che hanno voi
so memoria condivisa ecc ecc così penso
saranno sempre i migliori in cima
di JavaScript così bene ne abbiamo
più domande sull’app non vanno bene più
quindi c’è qualcuno che li alza mano
indietro hmm gli altri produttori di browser come
come ottenere sul web
sta per essere un vero standard o lo sono
finiremo con tutti quelli che stanno facendo
la loro diversa implementazione di esso
e saranno gli stessi signori
Indumento intimo JavaScript sopra l’acido in
giusto così una di queste linee complicate a
a piedi non posso parlare per altro browser
fornitori tuttavia questo link in fondo
della pagina conosci github.com / web
assembly è quel tipo di essere usato come un
area di sosta per le persone da discutere
cose da scrivere e puoi farlo
andare lì e vedere di persona chi è
partecipando penso che se non altro
stiamo coordinando un po ‘troppo come
stiamo pianificando di fare molte cose fuori di me
personalmente voglio vedere più prototipi
ma in termini di mancanza di coordinamento
posso dire che non è un problema in
questo punto quindi la domanda è chi faccio
vedere come il pubblico di destinazione che sto ripetendo
questo perché è stato registrato e io sono
non sono sicuro che tu venga registrato, credo
tutti lo hanno sentito questo è piuttosto
domanda difficile è intendo nel
cominciando come tutti i motori di gioco
sviluppatori che stanno cercando di mirare
più piattaforme sono queste sono molto
persone dedicate che conosci molto
persone tecnicamente qualificate e c’è
saranno sempre quelle persone che dicono
Posso usare questa tecnologia non importa cosa
ma quando pensiamo al web oggi
c’è un sacco di lunghe code
sai praticamente chiunque può ottenere
coinvolto nel web sai che è abbastanza
facile da imparare JavaScript lo sai
abbastanza facile da iniziare a scrivere
applicazioni e quando si sta guardando
qualcosa come il codice nativo che stai perdendo
alcune delle caratteristiche che rendono tutto
più facile a bordo è necessario avere un
compilatore nel ciclo e ci ripenso
le cose del tempo come il grugnito che sai potrebbe essere
adattato per piacere rieseguire il compilatore e
rigenerare il tuo binario ma si, così io
avere sviluppatori nativi nel pubblico
di sviluppatori front-end a volte quando
stiamo parlando di memoria condivisa
concorrenza sul web alcuni dei
Le persone JavaScript si preoccupano un po ‘
e dite bene che non vediamo vedere alcuna necessità
per questo sulla piattaforma quindi è uno di
questi fino a quando non è effettivamente lì è
difficile capire come l’ambiente
sta per coinvolgere e io penso quello
delle cose che
lo sai che personalmente mi de-stress
come sai quanto è diverso il web
la piattaforma è e le altre piattaforme così io
Pensa che adesso sono molto separati
ecosistemi ed è un po ‘difficile da vedere
cosa succederà quando inizieranno
fusione, ma quando stai chiedendo le cose
come il codice è come uno sviluppatore web
potresti usare una libreria nativa o alcuni
come sembra proprio come l’importazione
JavaScript ma fornisce un po ‘alto
funzionalità di codifica video delle prestazioni
o funzionalità di decodifica video ed è
solo in esecuzione nel browser in modo si può
non scrivere da soli ma puoi ancora
usarlo bene, quindi è uno sviluppatore nativo
sta usando il vorbis aperto e il lubrificante così
lib vorbis è piuttosto semplice perché
è solo un codec è solo
computazione in modo da compilarlo e
funziona magicamente ed è magicamente alto
la prestazione non è un problema, c’è birra aperta
un po ‘più complicato perché quello
interagisce con il sistema è un audio
libreria in modo che stai dicendo hey voglio
riprodurre bene il suono come si ottiene
c’è quindi una cosa che ho agito le mani sopra
e poi andare troppo in profondità è per quello
versione 1 non hai alcuna API
basta chiamare fuori a javascript così per
guarda le versioni future che vogliamo avere web
api è direttamente associato al web assembly
ma fondamentalmente saranno
diverse API così sarà il
lo stesso problema se li avete
è direttamente o andando a javascript
dovrai scrivere un po ‘
della libreria di compatibilità su di esso così
qualcuno da qualche parte sta per scrivere un
libreria che dice oh ecco l’open al
l’interfaccia qui è come la implemento
i termini dell’AP web sono per l’ audio
e probabilmente ci saranno 40
Pinal perché è 3d perché il web
al momento non ha 3D ci sta andando
avere delle emulazioni da parte tua
conoscere tutte le cose di spazializzazione in cima
di quello quindi alla fine compili il tuo
è il codice e si thunk nell’AP web
come OpenGL in WebGL sai che lo è
sarà abbastanza semplice
che rispondi alla tua domanda
sufficientemente chiunque altro
ok grazie per essere venuto
tu
Please follow and like us: