
quindi è bello essere qui questo è il mio
prima volta a questa conferenza e ho
divertendo anche noi è un
conferenza davvero terrificante e così sono
davvero anche felice che io abbia un
possibilità di parlare del chakra
motore per lo più sto solo camminando sul mio
rivestimento tapis roulant su di esso e e no
non uscire molto ma questo è un grande
piacere quindi lo noterete dal
parla astratto nel tuo piccolo libretto
Ho cambiato la metafora dall’interno
lavorazioni sotto il cofano che è un
gridare alla nostra squadra di casa il VA
squadra e tutto il grande lavoro che hanno fatto
usando la metafora del motore va bene così questo
è la diapositiva che abbiamo mostrato su Internet
Explorer team di due anni e mezzo di anni fa
o è stato no è stato più lungo di
che più di tre anni fa a
esprimere i principi di ciò che eravamo
andando a fare per cercare di rinvigorire
il motore JavaScript di Internet Explorer
e lo porto qui ora principalmente per
basta ricordare a tutti il pubblico
che non si tratta solo di perf che ci sono
altre cose e ed effettivamente prima
puoi davvero scavare e lavorare su
perfetto come lo siamo ora devi fare
sicuro che la cosa sia sicura e e
conforme e quindi equilibrato
performance mi riferisco solo a quello
ci sono molte dimensioni per il
prestazioni di un sistema di runtime linguistico
sai oltre al throughput che
parliamo spesso anche di cose
come quanto è veloce il carico dell’applicazione
quanta energia della batteria stai consumando
e così via, ecco perché mettere in equilibrio
spettacolo lì e poi trasparenza
è lassù perché è davvero così
questioni che si possono prevedere
prestazioni così quando la tua creazione
qualcosa come uno sviluppatore JavaScript tuo
creare una grande app che vuoi conoscere
ok 15 minuti nella cosa è il
la forma sta per peggiorare posso prevederlo
che se uso un certo stile come un sacco
di chiusure o sai molto a lungo
prototipi di catene cosa sta succedendo
fare alla performance della cosa e
quindi uno degli obiettivi chiave oltre a
solo ottenere grandi prestazioni era
rendere le prestazioni prevedibili per l’app
gli sviluppatori quindi è il design principale
principi che abbiamo avuto e inizierò
con sicurezza quindi quando vai a fare
Generazione del codice Justin introduci un
ulteriore possibile attacco vettoriale e così via
Parlerò un po ‘di Jude
sicurezza, ma prima di parlare che
Parlerò di alcune delle altre cose
quindi una cosa fondamentale che abbiamo fatto per lo shock
ranjhan è fare un sacco di lavoro di sicurezza
anche nel codice nativo del chakra
motore e una delle cose che abbiamo fatto è
che abbiamo assunto un venditore esterno di
persone a cui piace andare al cappello nero
conferenza e li ha fatti attaccare per un
periodo di tempo e ottenuto trimestrale e
rapporti e così ci siamo divertiti molto
effettivamente indurire questa cosa ed è stato
è stato gratificante che dopo un po ‘
hanno avuto davvero difficoltà a trovare
i vettori di attacco nulla è perfetto ma noi
continua a lavorarci su così grande
cose su cui abbiamo lavorato perché era nuovo
in quello che stavamo facendo è questo jit
l’attacco spray che alcuni di voi potrebbero non essere
familiare con quel termine ma è giusto
si riferisce a un avversario intelligente che prova a
capire in qualche modo che possono inviare
si codice sorgente JavaScript un sacco di esso
e quindi emetterete sequenze di
istruzioni native che possono quindi
sfruttare da un altro exploit che loro
già andando nella parte nativa di
il tuo codice quindi se per esempio possono
passare a un indirizzo arbitrario di un’ora in
memoria quindi possono
o anche qualche regione di memoria che possono
fare cose come inserire una cosa chiamata a
slide no-op che poi segui a
mucchio di no ops e si arriva al
codice di attacco quindi è questo tipo di attacco
là fuori sono stati veri e propri exploit
che hanno causato milioni di dollari di
danno da questo così così abbiamo fatto del nostro meglio
con esso e così il primo e soprattutto
cosa che abbiamo fatto è stato eseguire il nostro motore
con i dati esegui la protezione fino a lontano
come so dove è l’ unico motore di script
questo è il motivo per cui abbiamo scelto di farlo
è che per un sacco di altri programmi
abbiamo visto un’enorme diminuzione dell’importo
di exploit rivelati nel tempo su quelli
programmi se abbiamo dati eseguiti
protezione su così c’era un sacco di
prova solida che avrebbe funzionato
fa certe cose per le prestazioni a
poco impegnativo perché devi
fai le cose come bene non puoi scrivere il
codice perché perché una volta mangiamo una volta noi
uscita il codice che prendiamo un checksum a
checksum crittografico ci rivolgiamo
Giusta autorizzazione fuori e poi svolta
eseguire il permesso e così ma così il
le pagine che vengono eseguite non possono essere
scritto e sono controllati per essere sicuri
che sono esattamente il codice che il
Compilatore Jake emesso e causa di
che è un po ‘più complicato fare cose
come il caching in linea polimorfo
potresti non avere familiarità con quel termine
ma questo è un termine geek dal dinamico
implementazione della lingua in cui prendi
oggetti che arrivano attraverso un sito di codice
potrebbe essere di una classe nascosta diversa
tipi e devi essere in grado di incassare
come arrivare a una particolare proprietà
questo è sull’oggetto e lo so
Ad esempio, il motore V8 scriverà semplicemente
il valore del tipo corrente
proprio nel codice ma non possiamo farlo
perché abbiamo dati eseguiti
la protezione su rende così un po ‘
più difficile ma ne vale la pena va bene così codice
randomizzazione dell’allineamento di base
è farlo in modo che non sia molto facile
per sapere un po ‘di offset a cui puoi saltare
che funzionerà per te casualmente no
l’inserimento è per lo stesso scopo
costante accecamento è perché le persone
scriverà interi programmi in un po ‘
costanti in particolare sulla x86 che
ha una profusione di istruzioni dove
puoi attaccare costanti grandi e succose
lì dentro e poi salteranno
allineamento a queste costanti e lo sarà
essere una sequenza effettiva di eseguibile
le istruzioni sono così accecanti costanti
dove fai x o scherzi e poi anche
c’è una grande ma attuale euristica a
evitare un grande blitz di allocazione del codice e
finalmente c’è la pagina
randomizzazione il che significa che non ci limitiamo a
aprire un buffer gigante e quindi generare
codice in sequenze di pagine questo è
solo un po ‘di confronto che a
la terza parte ha fatto e penso davvero
l’ unica cosa da togliere al
slide è che è una buona cosa
Firefox non ha un’alta probabilità
di essere attaccato perché al momento
non stanno facendo un bel po ‘di chrome
quasi raggiunto fino a dove IE è dentro
facendo la tempra del JIT, penso questo
questa terza parte ha preso questo per Chrome 14
e so che Chrome ha aggiunto alcuni aggiunti
più di queste file da allora va bene così via
la conformità quindi questo è uno schermo da
una recente esecuzione del test 262 che è a
suite di test di conformità test che a
gruppo di persone del settore
compresa la collaborazione di Microsoft
che è come più di 10.000 test e
è solo per assicurarsi che tutti siano
eseguendo la stessa lingua e tu puoi
guarda qui I 10 in questo momento ha il più alto
tasso di passaggio e ci manca un test e
Ero molto triste di venire qui con il
uno che manca ma si scopre che
c’è questo nuovo piccolo test Unicode e
c’è un bug in realtà in Windows
sistema operativo così in effetti tutto il
i browser in questo momento hanno questo test
in mancanza di
ma io ero al cento per cento
pronto a mostrarti al cento per cento
ma non deve essere oh e in realtà
prima di scendere da questo a questo slaw
mi ricorda un giorno particolare nel
la storia di questo progetto è stata fantastica
il giorno era che penso che fosse il 6 gennaio
2010, che è il giorno in cui abbiamo trasformato il
chakra runtime engine on di default in
il browser Internet Explorer 9 e
non è così facile da fare perché loro
eseguire una suite di 4000 pagine Web che semplicemente
passa attraverso ogni possibile compatibilità
gamma quindi è come cose aziendali che
usa antiche assunzioni su ciò che il
il browser funziona e fino a molto moderno
cose come le tre prove acide che passano
tutto ciò è stato un grande giorno e il
Il team di Internet Explorer ci ha effettivamente inviato
ciambelle krispy kreme che era eccezionale e
ci hanno dato amore per circa 12 ore e
poi abbiamo iniziato a ricevere messaggi e-mail
come hey lo sapevi per questo web
pagina regredisci set twerking di mezzo a
per cento non è accettabile, quindi noi
ha avuto due mesi buoni di riparazione
tutto ciò prima che siamo pronti ad andare così così
cominciamo con un po ‘di cose su come
facciamo carichi di pagina così in modo sostanziale fonte
il codice arriva ed è analizzato che posso ottenere
fino a qui facciamo un astr astratto
albero di sintassi per quelli di voi che non lo fanno
scrivere compilatori e poi che va in
un generatore di codice byte perché generiamo
bytecode invece di andare direttamente a
codice nativo bene perché vogliamo
interpretare perché non vogliamo interpretare
perché per quanto possiamo dire correndo
esperimenti è il modo più veloce per
ottenere il codice effettivamente in esecuzione e ottenere
risposta interattiva di una pagina quindi prendi
il bytecode lo ha messo nel
interprete e questo è tutto
che devi fare per dire caricare il
New York Times e la cosa importante
è che l’ analisi è differita così
c’è un importante sito di notizie via cavo
Non ho il permesso di dire chi è ma
Sono stato sorpreso di trovare e questo è molto
comune che scaricano 70.000
funzioni per la loro prima pagina e loro
ne usano il diciannove percento durante
la pagina si carica così sicuramente lo faremo presto
ho imparato che se volessimo tagliare la pagina
tempo di caricamento abbiamo dovuto analizzare il meno possibile
possibile e così sappiamo che abbiamo solo
parse parentesi graffe e ci riempi più tardi
e ci sono tutti i tipi di trucchi per questo
e e ci sono sfide in corso così
per esempio lo script ACMA sei
comitato lì su cui stanno lavorando
caratteristiche come lead e const e uno di
le specifiche su lettin const
che tra l’altro sono nuovi modi di
introduzione di variabili in ambiti locali
in Echo lo script sei è quello degli errori di sintassi
dovrebbero essere segnalati
in sincrono con il carico di quelli
corpi di funzione e il problema con
questo è molto difficile da fare
parsing differito e quindi segnalare errori
sulle dichiarazioni delle variabili locali così
stiamo lavorando con loro su quello così è
a è sempre una lotta per continuare a ricevere
prestazioni attraverso la progettazione di questi
le cose vanno bene, ma proviamo a caricare la pagina
importante perché è uno dei
parti più viscerali dell’utente
esperienza sai molte volte
soprattutto con la web vecchia scuola
prima che avessimo applicazioni web, lo sapete
stai navigando in modo sequenziale
attraverso una serie di colpi di caricamento della pagina così
è molto importante avere ragione e tu
sapere che ci sono prove solide che
Internet Explorer è sta facendo abbastanza
bene con esso sia per i9 e ni 10 più
delle recensioni indipendenti che ho
visto e molte delle recensioni recenti che
dire che Internet Explorer si sta caricando
le pagine più veloci certamente fanno bella
bene, quindi, cosa facciamo noi interpretiamo così noi
iniziare l’esecuzione quasi immediatamente
questo è molto utile non è differito
analizzando il caching del profilo di avvio
quindi molti di voi ragazzi avranno
ho sentito il termine caldo
che sapevate fatto da molti
v8 equipaggio e altre persone per il sole
microsistemi per l’ esecuzione java così uno
delle cose che puoi fare per molto
poca memoria memorizzata è solo salva
dove sono gli hotspot e quindi cosa facciamo
è che non scriviamo alcun codice o altro
informazioni complesse ci piace solo dire
quali sono i punti caldi e noi diciamo
quali euristiche funzionano meglio e così
come, ad esempio, per le grandi notizie via cavo
sito con le 70.000 funzioni in una
e mezzo K di output che possiamo catturare
tutto ciò che è necessario sapere esattamente
ciò di cui abbiamo bisogno per generare codice per e
anche noi generiamo quel codice nel
sfondo così così invece di generare
codice sullo stesso thread che siamo
cercando di dare agli utenti reattività cosa
facciamo è generato su un altro core
e interpretiamo subito e poi noi
usa l’interprete per raccogliere
informazioni che ci aiuteranno
generare codice accurato per la cosa così
e anche il netturbino è
concorrente avrò qualche altra diapositiva
su cosa fa il garbage collector in a
pochi minuti ma immondizia concomitante
la raccolta è davvero utile quindi uno
fatto meraviglioso sui carichi di pagina è quello
pagina quelli che non seguono il
ipotesi generazionale quindi per quelli di
tu a chi non piace leggere della spazzatura
collezionisti il generale interno
l’ipotesi è che la maggior parte degli oggetti muoia
giovane ma in un pate e questo può
essere sfruttato facendo una piccola copia
cosa in cui hai un asilo nido di questi
oggetti giovani ma in una pagina caricano cosa
succede è che tutti gli oggetti sono creati
e quasi nessun oggetto viene distrutto
perché si sta impostando per le persone a
clicca sulle cose e prova tutto e
quindi ovviamente tu crei molto
di vivere lo stato e poi lasciarlo lì
e quindi è importante um
che il tuo garbage collector non prende
tempo durante il caricamento della pagina e soprattutto
come realizziamo ciò facendo il
bidone della spazzatura concomitante ok ora
sulla velocità e due
risposta interattiva che in gran parte completa
in questo discorso si intendono i tempi di pausa GC e
rendendoli piccoli va bene così di più
animazioni powerpoint hai visto questa parte
ora abbiamo l’interprete del battito cardiaco
e quel battito cardiaco sta generando profilo
informazioni quindi se lo memorizziamo
informazioni del profilo su disco e ottenerlo
indietro o non quello che facciamo è che usiamo il
profiler è una sorta di raccolta di dati
macchina così come è in esecuzione il codice e
è dandoti una risposta interattiva
misurando anche dove i punti caldi sono
e misurare quali anelli potrebbero trarne beneficio
da ulteriore ottimizzazione e cosa
gli accessi agli oggetti sono monomorfici senza
gli oggetti x sono polimorfici quale funzione
dovrebbe essere inline e quale codice no
a te totalmente non ti importa e tu
non uscirà mai dall’analisi differita
così gli interpreti raccolgono tutto ciò
informazioni e poi c’è un insieme di
euristica che determina se tu
avere abbastanza buone informazioni da provare
tipo specializzato qualcosa o generare
buon codice per qualcosa e poi tu
prendi il profiler di runtime e fai il feed
nel nucleo numero due dove c’è un
compilatore just-in-time e il
il compilatore just-in-time produce la macchina
codice e in questo momento sono gli stessi obiettivi
Penso che come v8 sai arm I’m e X x64
e x86 quindi abbiamo il codice della macchina e
ha anche un battito cardiaco e poi finalmente il
garbage collector è per lo più in esecuzione in
nucleo tre ora questa immagine è un po ‘
fuorviante perché non è come tre
core o fiammeggiante tutto il tempo il reale
L’utilizzo della CPU è di circa 1,2 core
perché la maggior parte delle volte è il codice
generatore non è in esecuzione o la spazzatura
il collezionista non è in esecuzione ma se lo ha
per offrirti una buona interazione
risposta correranno allo stesso tempo
okay, un po ‘più di dettagli
riguardo al garbage collector è
conservatore questo è sempre qualcosa
che le persone trovano controverse o
interessante ma funziona molto bene
per noi e per la ragione per cui abbiamo deciso di farlo
renderlo prudente è per sempre
interoperabilità con codice nativo per
esempio un host nativo come Internet
Explorer con la sua implementazione dom o
un host nativo come il nodo con il suo
codice sostanzialmente nativo che fa cose
come parlare due prese così abbiamo fatto un numero
di cose nel motore di chakra a
per interoperare bene è questo
permettendo puntatori a oggetti che vanno oltre
lo stack nativo e ancora trovandoli
e questo allevia il codice nativo di
la pressione di dover lavorare con qualsiasi cosa
tipo di aggiunta di riferimento di rilascio o intelligente
puntatore o sono in un ambito ora ora sono io
fuori da questo vanno varie discipline che
altrimenti dovresti fare in ordine
per interagire con il tuo motore di script noi
non devo fare perché guardiamo solo
allo stack c’è anche la capacità di
facendo quello che viene chiamato un heap ospite o
arena ospite dove può essere il codice nativo
basta allocare un po ‘di spazio usando il
garbage collector e quindi qualsiasi oggetto
puntatori di oggetti javascript che esso
i negozi vengono automaticamente scansionati
dal netturbino e questo fa
interrompi molto semplicemente devi solo
segui una semplice disciplina quindi si trasforma
la scelta conservatrice che abbiamo
misurato molto perché otteniamo molto
di domande è che va bene non sei tu
andando a ottenere riferimenti spuri che
beh, non c’è una media di 0 punti 0
a riferimenti spuri / collezione così
è come fare riferimento a riferimenti spuri
100 collezioni e una delle ragioni
è così basso in pratica è quello che abbiamo
taggati interi nel nostro JavaScript
implementazione e quindi è impossibile in
la parte JavaScript dello stack che
è la maggior parte della pila a confondere un
intero per un puntatore perché il
interi
taggato in modo che sia anche generazionale
non c’è uno spazio separato per l’infanzia, ma
tu puoi fare raccolte parziali e
puoi dieci tuoi alcuni di alcuni
oggetti perché a volte il
è un’ipotesi generazionale
seguito come in cose come Gmail o
outlook web access quindi è mark e
spazzare ma praticamente tutto da buttare
i collezionisti in questi giorni sono piccoli oggetti
sono bloccati in dimensioni per ridurre
frammentazione c’è l’oggetto grande
heap ha un’altra deframmentazione
strategia ma in questo momento non stiamo copiando
o evacuare tutto ciò che è anche
sorprende le persone ma ne leggiamo un numero
studi che sono stati fatti alla fine degli anni ’90
e all’inizio degli anni 2000 che hanno dimostrato che il
l’impatto della copia di garbage collection è
in realtà molto più grande nella tua memoria
sistema di tenere tutto dentro
metti in pratica più pagine
passare attraverso più linee di cache e così via se
stai copiando tutto il tempo allora se poi
se non lo sei ora si scopre che noi
potrebbe copiare oltre il novanta per cento del
oggetti in un heap tipico perché solo
le intestazioni dell’oggetto non possono essere copiate
cose come te conosci il fronte di un
oggetto prima che contenga lo slot
ha puntato tutte le proprietà dell’oggetto
o l’intestazione della stringa ma il carico utile di
una stringa o il carico utile di un array o
la matrice di slot che contiene tutto il
proprietà degli oggetti tutti questi
le cose potrebbero essere copiate perché c’è
solo un puntatore a queste cose e così via
se avessimo bisogno di fare evacuazione e
copiavamo ma non abbiamo trovato
qualsiasi pistola fumante in una qualsiasi delle app che
proviamo a correre che ci fa fare e
questo è il modo in cui gestiamo molti dei nostri
spettacoli che nessuno è permesso
aggiungere speculativamente qualcosa al
motore di chakra deve essere un’app
si è convenuto di essere abbastanza importante
e come si chiama una pistola fumante
una misurazione che si concentra e dice
ok per far funzionare questa app abbastanza bene noi
davvero bisogno di prendere questa ottimizzazione
quindi questo piccolo diagramma qui non lo è
ridimensiona le parti blu in modo che la parte inferiore
dovrebbe essere la spazzatura concorrente
filo di raccolta e quindi la parte superiore
dovrebbe essere il thread dell’interfaccia utente e il
piccolo blu in alto dove eravamo
scansionare le radici e poi rianalizzarle
sono in realtà più piccoli ma non potrei adattarli
il testo lì e quindi in sostanza cosa
succede con GC concorrente si ottiene un
piccola pausa e si scansionano i registri
e lo stack e poi hai messo tutto questo
nello stack dei voti e poi torni indietro
ed esegui il codice utente e dai loro buoni risultati
risposta interattiva nel frattempo il
filo di fondo sta marcando attraverso il
oggetto grafico quindi una volta che hai segnato
attraverso il grafico dell’oggetto e tu sei
data un’opportunità fai qualcosa
chiamato rescan, ovvero qualsiasi oggetto
che sono stati scritti durante questo mezzo
fase del programma proprio qui bisogno di
essere controllato per vedere se ne hanno
eventuali nuovi riferimenti e poi anche tu
devono ripetere la scansione dello stack normalmente questo
si traduce in un numero molto modesto di nuovi
oggetti bloccati sulla pila dei segni
e così andiamo avanti e segniamo
sequenzialmente e finisci così possiamo
inoltre non um non finire quello che puoi fare
puoi dire oh tu sai cosa ho ottenuto
troppi oggetti da marcare
sequenzialmente quindi tornerò e
contrassegna corrente nuovamente il grafico dell’oggetto e
quindi riprova il finale okay, allora
quello che porta a è molto piccolo prevedibile
tempi di pausa e così abbiamo misurato alcuni
ecco alcuni esempi di ciò che abbiamo misurato
guarda fuori Bing Maps essendo la ricerca di immagini
e poi un paio di sharepoint così abbiamo
misurato questo su un sacco di cose entrambe
Microsoft cose che questo è per lo più o
altre cose come i carichi di pagina di Gmail e
e ed è praticamente questo è quello che
sembra che l’unica eccezione sia html5
giochi che sono una specie di frontiera per noi
stiamo cercando di sapere che l’altezza si innalza
i giochi con frame rate funzionano perfettamente
e noi
abbiamo ancora alcune sfide con questo
su come lavorarci duramente ma per le cose
come queste grandi applicazioni web e web
le pagine stanno andando abbastanza bene, quindi questo è
questo è il tempo massimo mai trascorso in
raccolta dei rifiuti attraverso una grande sessione
circa una sessione di 20 minuti di utilizzo di questi
programmi con uno script che la persona
passa attraverso per testarlo e così vedi
per Outlook e SharePoint il
sfondo GC usato circa 15 millisecondi
per una collezione ma ma in primo piano
GC utilizzato al massimo sette millisecondi o pollici
il caso di SharePoint fino a 10
millisecondi quindi queste sono brevi pause
che non interferirà con il tuo
risposta interattiva quindi se sei occupato
digitando qualcosa come in ufficio 365
PowerPoint o qualsiasi altra cosa tu stia facendo
c’è qualcosa sotto i 30 millisecondi
probabilmente non interferirà con il
risposta interattiva e poi un’altra
cosa da notare è che il tempo medio
è un po ‘più in basso come sotto i 4
millisecondi per tutti ma ancora è
abbastanza coerente quindi così quello che sei
ottenere è stai diventando coerente
tempi di pausa prevedibili che è ciò che è
ottimo per la fornitura interattiva
risposta e questi in questo grande web
applicazioni e quindi è principalmente dovuto a
il GC simultaneo e come è
architettato ok quindi ora obbligatorio
il throughput scorre così qui andiamo e io
devo dire che essere in nostro ospite
quel v8 è un concorrente feroce così quando
quando quando stavamo lavorando su I 9 noi
superato il cromo sette volte e sette
volte ci hanno passato di nuovo prima
potremmo spedire un’anteprima e quindi per a
tempo era che sapevi abbastanza difficile e
abbiamo lavorato molto duramente su di esso e di
corso diversi benchmarks sono
diverso ma questo è il punto di riferimento
la gente ha prestato più attenzione a e
aveva la più varietà di piccoli
frammenti quindi ci siamo concentrati molto e
siamo riusciti a mantenere il comando tra il
spedizione di i 9 e ora il the
spedizione di i-10 ma sai che sono sicuro
v8 ci sorpasserà ad un certo punto o
è davvero non importa molto
perché onestamente si deve prendere questi
tipi di punti di riferimento con un grande grano di
sale perché tu lo sai come la stampa
ama una corsa di cavalli e ci sono a
numero e persone possono concentrarsi sul
numero ed essere come oh sì questo numero
ma penso che ciò che proviamo a fare sia invece
pensa a classi di applicazioni così
cosa vuoi fare sul web
piattaforma applicativa che non puoi fare
perché penso che noi tutti condividiamo So per
parlando con Lars che ha fatto la sua squadra
si sente in questo modo e penso che tutti condividiamo
che vogliamo solo fare il web
meglio la piattaforma vogliamo renderla più
applicabile a più classi di app e
quindi quello che cerchiamo di fare è provare a non farlo
entrare troppo nei parametri di riferimento
e focalizzarci di più su ciò che vogliamo fare
taglia la corda e possiamo assicurarci che
non ha problemi di glitch o lo sai o
nel guardare indietro nel passato era
più cose come pure vuoi correre a
word processor o PowerPoint o una mail
cliente e vuoi renderlo fluido
risposta interattiva e possiamo farlo
e tipo di forzare là per essere un
pistola fumante da una di quelle cose
questo vale per questo, ma così facciamo
progressi costanti sui benchmark che usiamo
punti di riferimento pensiamo che tu sappia che hanno un
posto ma siamo fiduciosi che possiamo tutti
lavorare insieme per creare un punto di riferimento come
industria che sarebbe più simile al
segno di spec e e meno come il
punto di riferimento attuale così indietro quando eravamo
tutto ciò che sai delle prestazioni C e C ++
c’era una cosa chiamata morso
e altra piccola specie di frammento di codice
benchmark basati che è un po ‘ come
cos’è il parasole e qualcun altro
benchmark forniti dal fornitore che lì
sono ciò che vorremmo vedere è che si evolvono
il modo in cui si è evoluto per le prestazioni C a
questa cosa ha chiamato il marchio specifico che è
fondamentalmente scenari da un mucchio di reali
applicazioni che le persone usano davvero e
usando quello per misurare le prestazioni di
il sistema di runtime linguistico che pensiamo
quello sarebbe davvero buono
direzione va bene così che ha detto che tipo di
i giochi giochiamo per eseguire il codice molto velocemente
bene così queste diapositive sono molto astratte
quindi proverò a interpretare quello che sono
cercando di trasmettere così fondamentalmente ciò che questo
sta cercando di trasmettere è quella arancione
è cattivo e che il verde e il rosso
è meglio che l’arancia fosse cattiva perché dentro
I 9 abbiamo appena generato il codice polimorfico
quindi, quando non stavamo interpretando, lo faremmo
basta generare il codice che è stato proprio questo
questo non importa quale sia il tipo di oggetto
è stato quello che è venuto attraverso un particolare codice
sito tutto era bello, lo sai se
stai facendo un cappio su qualcosa e
stai facendo un plus più bene se è un
grado intero se si tratta di un punto mobile
numero di grado se è un oggetto grande se
è una stringa e la si incrementa
sai bene proveremo a farlo tu
lo so, ovviamente, alcune cose lo sono
supposto per produrre errori di runtime
registrazione di script acma ma molte cose
non e così ma generico polimorfico
il codice funziona solo così velocemente, specialmente sopra
applicazioni che usano molto oggetto
accesso quindi vogliamo fare meglio e come
fai meglio è che giochi a questo gioco
dove è una sorta di gioco di pollo così
gestisci la cosa nell’interprete per
un po ‘e capire quali sono i tipi
di solito stanno attraversando il particolare
siti di codice e poi dici ok ora sono
andando a scommettere che quel codice è quello
l’oggetto sarà sempre quel tipo
e sto solo andando a generare codice
crede solo che e tipo specializzato
per quanto mi è possibile per quello
scrivi ma oh aspetta un attimo l’eco
comitato sceneggiatura dice che io non solo posso
generare quel codice bello e stretto
perché potrebbe non essere quel tipo che è
che passa lì e quindi è sempre
bisogno di fare controlli extra e questo è
dove arriva lo sfregamento anche quando
stai generando molto meglio
codice che vedrai tra un minuto
ancora non buono come il codice nativo perché
devi ancora fare quei controlli di
Certo puoi provare a issare gli assegni
fuori dai loop e questo è utile ma tu
Devo ancora farli bene, ecco cos’è e
fondamentalmente come è fatto mentre controlliamo
e se non è il tipo che pensiamo che sia
o l’insieme di tipi che pensiamo che siamo noi
salvare l’interprete che raccogliamo
informazioni più che così effettivamente è
polimorfo e poi ci riproviamo diciamo
va bene sia questo tipo o questo tipo
e generare codice ora potresti essere
pensando che questo membro del pubblico possa fregare
stai pensando oh ma non l’ha detto lui
voleva prestazioni prevedibili e
la gente potrebbe pensarci e ottenere il
giuste prestazioni, credo che dovrei
dire prestazioni prevedibili fino a che cosa
la semantica della lingua è e
stiamo sempre cercando di capire come
renderlo più prevedibile ma fondamentalmente
se non fai questi balzi tu
può salvare da lì c’è solo un limite
a quanto è buono il codice che puoi generare
okay, per esempio qui è il tipo
matematica di interi specializzati così fondamentalmente
questa è una cosa in cui abbiamo notato che
alcune delle variabili come queste
variabile B e la variabile C e il
le variabili M sono numeri interi ogni volta
attraverso il loop e l’interprete
esegue il ciclo 10.000 volte ed è come
erano sempre interi così poi noi
genera questo codice e pensiamo che vada bene
diventerà sempre numeri interi e
questo è più o meno il codice nativo
ad eccezione di questa piccola linea triste in rosso
dove hey se non fosse un intero andiamo
al salvataggio torniamo nel
interprete e cerchiamo di diventare più intelligenti
riguardo a quel ciclo, ecco qui
matematica a virgola mobile e io-10 e lo farò
mostra un confronto 99 in un minuto
è dal benchmark SunSpider e se
ti sorpassa gli occhi per questo
codice assembly vedrai che c’è
per lo più istruzioni Sse2 in là e
è soprattutto buono perché significa
stai principalmente facendo quello che il codice
intendevi che tu facessi e non molto altro e
poi ci sono le due cattive istruzioni
che sei costretto a fare perché tu
potrebbe essere sbagliato e qualcosa di diverso da
potrebbe venire un numero in virgola mobile
da lì ok bene proprietà così veloce
accesso a 99 questo è in realtà una sorta di
solo una diapositiva retrospettiva ma io
incluso perché è così carina che sono
certo che avete visto milioni di persone
come le persone fanno il tubo polimorfico in linea
caching e ma cosa vedrai
qui in realtà è monomorfico in linea
il caching perché è tutto ciò che avevo e9 andava bene
e così fondamentalmente ciò che è è quello
la piccola bolla sulla tua destra
c’è la classe nascosta, ecco cosa
la gente lo chiama in genere quando si ordina
di tipi di trucco per oggetti mentre vai
lungo e il runtime e quindi è possibile
vedi che b1 e b2 sono due oggetti con
due diversi tipi e bene in questo
caso monomorfico sono dello stesso tipo
e questo va bene perché x e y sono arrivati
nello stesso ordine ma poi in questo caso
qui sfortunatamente non sono uguali
anche se dovessi accedere a xoy
tutto sarebbe bello ma il mare è
tipo di incasinarmi così e un io-9 noi
non aveva alcuna disposizione per questo
il codice era lento, quindi cosa abbiamo fatto in i-10
abbiamo fatto la specializzazione del tipo di oggetto
abbiamo fatto delle cache di proprietà polimorfiche che abbiamo fatto
campo di sollevamento che significa se si accede
un campo di un oggetto più di una volta in a
loop cercheremo di mantenere questo accesso
fuori dal giro, se possibile, abbiamo fatto una copia
propagazione abbiamo fatto oggetto snellito
layout che per esempio significa questo
invece di avere effettivamente un array di slot
e tutto ciò che si appiccica al the
slot direttamente nell’intestazione dell’oggetto per
alcuni fissi noti di quantità nota di
slot e funzione di inlining che è a
grande affare, quindi questo è il codice
a sinistra questo è il codice 99 per quello
piccolo snippet JavaScript nella parte superiore
totale più uguale a 0 punto X più 0 punto y
più Z e quindi questo è il codice i-10
vedi l’odex, lo sai ancora
piuttosto brutto e c’è ancora il test
del tipo dell’oggetto e del
salvando l’interprete se noi
è necessario ma il codice per accedere a o punto
Non è molto più pulito, quindi abbiamo fatto un sacco di cose
progredire lì in un ciclo è pari
più drammatico perché fondamentalmente solo tu
fai l’intestazione del ciclo una volta che fai il
loop body dire cento volte e tu
può effettivamente sollevare alcuni assegni
del ciclo e poi ottieni
codice molto stretto quindi questo è come finisce
guardando è il loop qui dentro
il blu è molto bello e piccolo solo uno
controllo di salvataggio e poi anche questo è
mostrando nel rivestimento così abbiamo preso calcoli
e noi in fila lì questo è solo per
Diciamo che abbiamo lavorato molto
throughput e tempo di caricamento e
consumo di energia e tutti gli altri
cose e ne abbiamo fatte moltissime
progressi con esso siamo al punto
dove stiamo eseguendo applicazioni di grandi dimensioni
quello che sai usare molti oggetti
con molte proprietà su di loro molto
bene abbastanza che tu sappia grande
applicazioni 50.000 applicazioni di linea
stanno offrendo ottimi risultati di calcolo
per esibirsi è molto buono interattivo
risposta, ma ora stiamo cercando di
affrontare ulteriori classi di applicazione
per esempio come i giochi html5 e loro
portare nuove sfide e così siamo
sempre cercando di ampliare la classe di
applicazioni che la cosa può effettivamente
va bene così parlando di ampliamento
c’è un’altra cosa che abbiamo lavorato
e ci sono alcune cose che il
motore di script è correlato a
quello e quello è che c’è una cosa
chiamato Windows 8 sta uscendo ottobre
26 è quando tutti saranno in grado di comprare
windows 8 macchine ovunque e um ma
in realtà è fatto e un sacco di
i clienti aziendali lo stanno già utilizzando
così
e e una delle cose che mi ha fatto
davvero felice di Windows 8 è che noi
sono stati in grado di applicare lo sviluppo web
modello per costruire app desktop così tanto
delle applicazioni chiave come la musica
giocatore e il client di posta che solo
vieni con Windows 8 sono stati scritti utilizzando
esattamente lo stesso paradigma di sviluppo
che le persone usano per costruire dicono notizie su Gmail
conosci HTML JavaScript CSS e quindi noi
penso che questo sia fantastico perché poi le persone
può sfruttare le loro capacità per fare ancora
un’altra cosa e così quando ci sono
dispositivi Windows sai che i concorrenti
ipad per esempio voi sarete in grado di
costruisci un reach client e poi sarai
in grado di utilizzare lo stesso client per fare il
materiale specifico per dispositivo, si spera
sfruttando la maggior parte del tuo codice così
ci sono alcune cose che abbiamo fatto
in particolare per fare Windows Store
le applicazioni migliori sono quelle che abbiamo fatto
codice della bicicletta che incassa in aggiunta al
il caching del profilo e questo perché noi
volevo assicurarmi che con il
Applicazioni di Windows Store la maggior parte delle
Codice JavaScript che stanno andando a
la corsa è conosciuta nel momento in cui sono
installato nel negozio e così è
davvero bello solo essere in grado di creare
la bicicletta codifica per quella cosa il primo
ora viene eseguito sulla scatola e poi memorizzato
la bicicletta codifica in modo tale che tu
può evitare perché dalla cogenerazione è
in realtà un enorme componente di applicazione
caricare il tempo e poi un’altra cosa siamo noi
ha aggiunto un modo per gli host di dire al chakra
garbage collector quando sono inattivi o
quando stanno per sospendere il
applicazione su disco in modo che possiamo eseguire
GC in momenti più opportuni in modo che
quando la persona è seduta e pensa
quello che stanno per scrivere è quando noi
eseguire GC e non quando sono in realtà
digitando e quindi probabilmente il più
il vasto lavoro che abbiamo fatto è stato veloce
questo era il marshalling del codice nativo
reso più facile dal fatto che chakra in
il primo posto ha preso alcune decisioni per
ottimo interop con il codice nativo che è
che usiamo le convenzioni di chiamata native
quindi la stessa esatta convenzione di chiamata
che se hai scritto un piccolo frammento di C
il codice sarebbe generato è quale chakra
sta generando per il suo stack JavaScript
inoltre usiamo la gestione delle eccezioni native così
tutte le macchine per la gestione delle eccezioni
quello che è messo in pila è esattamente il
stesso questo aiuta anche dal modo su
con l’infrastruttura di debug è
più facile eseguire il debug dello stack perché
ci sono già strumenti esistenti che sanno
su questi stack e conosci il
eccezioni e sapere come affrontare con
loro quindi è stato un grande aiuto e poi
probabilmente la più grande cosa che abbiamo fatto
era la generazione e il caching del metodo
punti di ingresso quindi una delle cose che
Windows 8 viene fornito è come un grande
superficie in modo da poter lavorare con simili
il touch screen e il GPS e tu
conosci tutte le altre caratteristiche del dispositivo no
scuotendolo come si chiama il
porta diorama e quindi c’è una P è per
quello e volevamo un modo semplice per
Programmatori JavaScript da programmare
un normale JavaScript intuitivo e vedere
eventi che provenivano da questo in un
JavaScript e chiama l’api’s in
solo un in un modo naturale così noi
ha scritto questo strato di marshalling che fa
tutte le API degli host e non è così
Basta essere le finestre le nuove
windows api qualsiasi host di chakra può
creare un’area di superficie API come questa e
lo useremo come maresciallo fondamentalmente da
leggiamo i metadati che dicono che lo sai
quali sono l’interfaccia è quali sono i
tipi del metodo chiama e poi
generiamo stub di smistamento per loro
al volo quindi è una specie di lavoro
abbiamo fatto per una sorta di desktop più
applicazione della cosa e poi
c’è sempre più lavoro da fare in questo modo
operazioni e come stavi chiedendo
riguardo al polimorfismo che stiamo per
molto meglio in futuro, ora
noi otteniamo ciò che dobbiamo fare
c’è sempre lo standard ESX
è in corso e ci sono cose che
sono già abbastanza d’accordo
che stiamo già lavorando per conformarci
con quello e per sostenerlo siamo ancora
lavorando su cose dell’ultimo standard
ratifica come accesso o prestazione
per ES cinque e poi come ho detto che siamo
cercando di trovare nuove classi di applicazioni
che i clienti sono venuti da noi e
Dicendo no, vogliamo eseguire questo sul web
vogliamo correre tagliare la corda sul web
non vogliamo avere un client iOS e
tutto ciò che vogliamo solo averne uno
cosa così stiamo cercando di farlo funzionare
e poi il lavoro di Newport arriva sempre
per esempio abbiamo un GC conservativo
ma si scopre che molto spesso noi
sapere informazioni precise su cosa è
il puntatore e ciò che non è un puntatore in
un oggetto particolare e per esempio tutti
le cose che sono assegnate dal
sistema nativo di runtime quelle cose che noi
sapere esattamente dove sono i puntatori e
quindi approfittare di quella precisione è
una cosa che aiuterà i giochi html5 e
registrare le applicazioni in esecuzione e poi anche
facendo una quantità ancora più aggressiva di
iterando tra sequenziale e
fasi concorrenti della raccolta dei rifiuti
così facendo un euristico dove dici
sai cosa fare se mi sono fermato di più
di 10 millisecondi sono solo in bailing
e andando dritto nel concorrente
marcando non lo facciamo molto
aggressivamente adesso penso che sia un
cosa vedremo seriamente nel
futuro quindi sì, ho citato i giochi e
poi l’altra grande categoria di app quella
stiamo cercando di espanderci in questo momento
applicazioni a lunga corsa lo sai
pagine che fai un po ‘e poi tu
naviga ma potresti rimanere su facebook
per te sai un’ora e così il GC
i requisiti sono carini
diverso e stiamo lavorando su quello va bene
quindi finalmente l’immagine grande fa scorrere l’ultima cosa
stiamo davvero cercando di farlo, penso tutto
di noi che conosci molte persone
chi fa più lavoro su questo tipo di
cosa sono qui a questa conferenza e io
pensa a tutti noi
stai solo cercando di fare il
la piattaforma web è meglio che tu stia cercando di
trovare un modo che sempre di più
interessanti app killer possono essere solo
il web e non dobbiamo avere come
piccola programmazione a parentesi quadra per
iOS e tutte quelle altre cose, ma invece
possiamo solo sviluppare la cosa maledetta era
e funziona magnificamente ovunque
ovviamente quello è un sogno che lo farà
mai completamente realizzato ma al
estensione possiamo farlo voglio dire il the
persona che conosci in sri lanka con
conosci un browser web come un telefono
sarebbe bello se tu lo sapessi
potrebbe fare tutto ciò che potrebbero imparare
il programma che potrebbero modificare i documenti potrebbe essere
su a conosci un tablet o qualcosa del genere
qualunque cosa tu abbia, conosci il pc
la biblioteca è il web ciò che dà questo
prometti e quindi cosa stiamo cercando di fare
sai che rispondi a questa promessa
fare un’ottima infrastruttura per il web
e penso che ci sia
tre parti a quella che non conosco
avere qualcosa a che fare con e questo è il
parte che sta nel mezzo e nel blu
sono come gli occhi AP AP
capacità e modello di componente sicuro
Penso che siano tutte cose che noi
bisogno di fare di meglio per rendere il web a
veramente grandi cose della piattaforma applicativa
che io e altre persone dentro
Microsoft lavora su sono i grandi j / s
prestazioni del motore utilizzando tutto il
risorse come core multipli e GPU
continuando a ottimizzare, ecco cosa
abbiamo appena parlato in questo
parla e poi finalmente penso l’altro
pezzo di foto che deve essere
c’è che dobbiamo costruire strumenti
che consentono la costruzione di grandi dimensioni
Applicazioni JavaScript perché è
è difficile prendere un linguaggio così
sai mette tutto nel globale
spazio dei nomi per impostazione predefinita e così via e
in realtà costruire JavaScript su larga scala
applicazioni e quindi penso che per davvero
supportare un ecosistema di app in cui il prossimo
l’app killer sarà una rete
applicazione dobbiamo fare un lavoro migliore
con strumenti e sono davvero entusiasta
su quello oggi perché in circa
un’ora in 10 minuti penso Microsoft
sta per diventare piuttosto grande
annuncio così alle 18:00, ora danese
spazio per utensili e mi sento benissimo
perché sento che è è così
è qualcosa che ho davvero intenzione di
essere in grado di unirmi con i miei colleghi
chi ha costruito questo e lo offre allo scoperto
comunità di origine in tutti coloro che cercano
per rendere la piattaforma web migliore così sono
davvero impaziente di tutta la vostra
feedback non solo su questo discorso ma ma
su quell’annuncio che sta arrivando
circa un’ora quindi è così grazie
tutte le domande quindi la domanda era con
le applicazioni JavaScript con esecuzione prolungata
vedi un po ‘di resti striscianti
nel tempo con l’applicazione più lunga
e più a lungo e quei cumuli striscianti
Resti che sai che possono essere dovuti
alla frammentazione sai che significa
dove stai assegnando piccoli oggetti
dai pezzi più grandi e poi ottieni
piccoli buchi dove non puoi mettere
qualsiasi cosa e può anche essere dovuta a
le persone si limitano a tenere riferimenti come
uno degli oratori prima di oggi
menzionare così ci aspettavamo di vedere
che non abbiamo visto abbastanza da fare
qualcosa a riguardo come opportunistico
l’evacuazione per esempio è qualcosa di noi
potrebbe fare che in sostanza significa che quando
sai di avere tutti i suggerimenti per un
oggetto che si va avanti e spostare in un
nuova pagina per cercare di allineare le cose e
ridurre la frammentazione ma il
la strategia di frammentazione stava usando sembra
per funzionare bene abbiamo effettivamente fatto
studi comparativi di dimensioni simili
applicazioni in esecuzione per lunghezze simili
scritto tutto in C e scritto nel web
paradigma dello sviluppo e in realtà
c’è meno frammentazione in questo momento
quelli che abbiamo misurato, quindi stiamo cercando
per una pistola fumante non l’hanno visto
abbiamo una serie di elementi di lavoro che possiamo prendere
se lo facciamo lì
c’è un grande interesse per la corsa
chakra sul lato server in azzurro
comunità purtroppo in questo momento chakra
è disponibile solo su Windows
piattaforma e quindi non è davvero
qualcosa con cui poter competere
v8 per essere una nota per questo motivo perché
Sono sicuro che oltre il cinquanta per cento del
le applicazioni del nodo sono in esecuzione
piattaforme non Windows, ma nel nostro
piccolo mondo, sì, ne abbiamo molti
i clienti che spediranno i server
quest’anno che usano chakra sul server
lato e abbiamo fatto molto lavoro entrambi
inizialmente con chakra e da allora a
renderlo scalabile e indurito per il
ambiente server così cose come la memoria
perde cose come la Avs e cosa fare
con loro sai che possiamo correre
12.000 contesti di script simultaneamente in
un processo che conosci con isolamento così
questo è un numero abbastanza buono
competitivo ed è dimostrato di essere
abbastanza buono per le persone che sono
usando il chakra in questo contesto e penso
molto del lavoro che abbiamo fatto per fare del bene
Interop nativo come la chiamata nativa
convenzioni conservative GC native
le eccezioni avvantaggiano davvero le persone sul
lato server perché semplifica solo
tutto tranne lo stack sembra un tutto
molto più simile allo stack nativo e così via
quando fai ginnastica come te
stavano descrivendo nel tuo discorso è
in realtà un po ‘più semplice perché noi
risulta che abbiamo già il codice
attraversa lo stack nativo ed estrai
tutti i tipi di informazioni così così
sì ci importa molto di questo nel nostro
piccolo mondo di clienti Windows e
e siamo stati piuttosto contenti del
risultati iniziali di esso va bene così il primo
la prima domanda in realtà prenderò
la seconda domanda prima quindi la seconda
la domanda era un grande lavoro quando siamo noi
andando a open source e
Penso che purtroppo devi chiedere
più persone di me che la domanda I
pensa se me lo chiedi e io ho appena parlato il mio
cuore potrebbe piacere la risposta, ma io
pensa che Microsoft sia nel suo complesso
gradualmente svegliarsi al fatto che
c’è un software Commons là fuori e
che la comunità di sviluppo del software
si è impegnato con l’idea che siamo
andando a condividere molto e stiamo andando a
competere e costruire i nostri stack ma
anche noi condivideremo molto
cose su cui costruiamo i nostri stack e io
penso che sia super sano e super
interessante interagire in questo
modo non solo di scrivere articoli sulle cose
come facevamo prima, ma in realtà condividevamo
codice che lavora insieme sul codice è
terrificante e Microsoft deve capire
quello che non sta andando via la gente è
andando in modo permanente a farlo e quello
Microsoft ha il più grande produttore di
il software nel mondo dovrebbe
contribuire a questo in modo che sia chiaro e
quel meme si sta espandendo in Microsoft così io
penso che sia tutto ciò che posso dire
a tale proposito la prima domanda
eravamo noi quando abbiamo archiviato il profilo
informazioni su cosa cambia l’input come
stabile è l’informazione del profilo sotto
ingresso cambia perché se andremo a
dire hey che questo ha funzionato, allora cosa succede se
l’input dice se se il nuovo input allora fa
galleggia altrimenti facendo un int giusto
quindi quello che facciamo è che abbiamo effettivamente
euristica primaria e secondaria
in realtà c’è un’euristica che dice
qual è la probabilità che questa cosa
sarà stabile e quindi non lo farà
cambia sotto input e cosa è
Probabilmente non lo farà e così lontano
l’euristica è stata abbastanza buona da noi
può eseguire le cose più velocemente indovinando e
salvataggio poi per bit poi per no
seguendo il consiglio del
profilo ok grazie mille davvero
mi è piaciuto e non sarà fantastico
conferenza
prima volta a questa conferenza e ho
divertendo anche noi è un
conferenza davvero terrificante e così sono
davvero anche felice che io abbia un
possibilità di parlare del chakra
motore per lo più sto solo camminando sul mio
rivestimento tapis roulant su di esso e e no
non uscire molto ma questo è un grande
piacere quindi lo noterete dal
parla astratto nel tuo piccolo libretto
Ho cambiato la metafora dall’interno
lavorazioni sotto il cofano che è un
gridare alla nostra squadra di casa il VA
squadra e tutto il grande lavoro che hanno fatto
usando la metafora del motore va bene così questo
è la diapositiva che abbiamo mostrato su Internet
Explorer team di due anni e mezzo di anni fa
o è stato no è stato più lungo di
che più di tre anni fa a
esprimere i principi di ciò che eravamo
andando a fare per cercare di rinvigorire
il motore JavaScript di Internet Explorer
e lo porto qui ora principalmente per
basta ricordare a tutti il pubblico
che non si tratta solo di perf che ci sono
altre cose e ed effettivamente prima
puoi davvero scavare e lavorare su
perfetto come lo siamo ora devi fare
sicuro che la cosa sia sicura e e
conforme e quindi equilibrato
performance mi riferisco solo a quello
ci sono molte dimensioni per il
prestazioni di un sistema di runtime linguistico
sai oltre al throughput che
parliamo spesso anche di cose
come quanto è veloce il carico dell’applicazione
quanta energia della batteria stai consumando
e così via, ecco perché mettere in equilibrio
spettacolo lì e poi trasparenza
è lassù perché è davvero così
questioni che si possono prevedere
prestazioni così quando la tua creazione
qualcosa come uno sviluppatore JavaScript tuo
creare una grande app che vuoi conoscere
ok 15 minuti nella cosa è il
la forma sta per peggiorare posso prevederlo
che se uso un certo stile come un sacco
di chiusure o sai molto a lungo
prototipi di catene cosa sta succedendo
fare alla performance della cosa e
quindi uno degli obiettivi chiave oltre a
solo ottenere grandi prestazioni era
rendere le prestazioni prevedibili per l’app
gli sviluppatori quindi è il design principale
principi che abbiamo avuto e inizierò
con sicurezza quindi quando vai a fare
Generazione del codice Justin introduci un
ulteriore possibile attacco vettoriale e così via
Parlerò un po ‘di Jude
sicurezza, ma prima di parlare che
Parlerò di alcune delle altre cose
quindi una cosa fondamentale che abbiamo fatto per lo shock
ranjhan è fare un sacco di lavoro di sicurezza
anche nel codice nativo del chakra
motore e una delle cose che abbiamo fatto è
che abbiamo assunto un venditore esterno di
persone a cui piace andare al cappello nero
conferenza e li ha fatti attaccare per un
periodo di tempo e ottenuto trimestrale e
rapporti e così ci siamo divertiti molto
effettivamente indurire questa cosa ed è stato
è stato gratificante che dopo un po ‘
hanno avuto davvero difficoltà a trovare
i vettori di attacco nulla è perfetto ma noi
continua a lavorarci su così grande
cose su cui abbiamo lavorato perché era nuovo
in quello che stavamo facendo è questo jit
l’attacco spray che alcuni di voi potrebbero non essere
familiare con quel termine ma è giusto
si riferisce a un avversario intelligente che prova a
capire in qualche modo che possono inviare
si codice sorgente JavaScript un sacco di esso
e quindi emetterete sequenze di
istruzioni native che possono quindi
sfruttare da un altro exploit che loro
già andando nella parte nativa di
il tuo codice quindi se per esempio possono
passare a un indirizzo arbitrario di un’ora in
memoria quindi possono
o anche qualche regione di memoria che possono
fare cose come inserire una cosa chiamata a
slide no-op che poi segui a
mucchio di no ops e si arriva al
codice di attacco quindi è questo tipo di attacco
là fuori sono stati veri e propri exploit
che hanno causato milioni di dollari di
danno da questo così così abbiamo fatto del nostro meglio
con esso e così il primo e soprattutto
cosa che abbiamo fatto è stato eseguire il nostro motore
con i dati esegui la protezione fino a lontano
come so dove è l’ unico motore di script
questo è il motivo per cui abbiamo scelto di farlo
è che per un sacco di altri programmi
abbiamo visto un’enorme diminuzione dell’importo
di exploit rivelati nel tempo su quelli
programmi se abbiamo dati eseguiti
protezione su così c’era un sacco di
prova solida che avrebbe funzionato
fa certe cose per le prestazioni a
poco impegnativo perché devi
fai le cose come bene non puoi scrivere il
codice perché perché una volta mangiamo una volta noi
uscita il codice che prendiamo un checksum a
checksum crittografico ci rivolgiamo
Giusta autorizzazione fuori e poi svolta
eseguire il permesso e così ma così il
le pagine che vengono eseguite non possono essere
scritto e sono controllati per essere sicuri
che sono esattamente il codice che il
Compilatore Jake emesso e causa di
che è un po ‘più complicato fare cose
come il caching in linea polimorfo
potresti non avere familiarità con quel termine
ma questo è un termine geek dal dinamico
implementazione della lingua in cui prendi
oggetti che arrivano attraverso un sito di codice
potrebbe essere di una classe nascosta diversa
tipi e devi essere in grado di incassare
come arrivare a una particolare proprietà
questo è sull’oggetto e lo so
Ad esempio, il motore V8 scriverà semplicemente
il valore del tipo corrente
proprio nel codice ma non possiamo farlo
perché abbiamo dati eseguiti
la protezione su rende così un po ‘
più difficile ma ne vale la pena va bene così codice
randomizzazione dell’allineamento di base
è farlo in modo che non sia molto facile
per sapere un po ‘di offset a cui puoi saltare
che funzionerà per te casualmente no
l’inserimento è per lo stesso scopo
costante accecamento è perché le persone
scriverà interi programmi in un po ‘
costanti in particolare sulla x86 che
ha una profusione di istruzioni dove
puoi attaccare costanti grandi e succose
lì dentro e poi salteranno
allineamento a queste costanti e lo sarà
essere una sequenza effettiva di eseguibile
le istruzioni sono così accecanti costanti
dove fai x o scherzi e poi anche
c’è una grande ma attuale euristica a
evitare un grande blitz di allocazione del codice e
finalmente c’è la pagina
randomizzazione il che significa che non ci limitiamo a
aprire un buffer gigante e quindi generare
codice in sequenze di pagine questo è
solo un po ‘di confronto che a
la terza parte ha fatto e penso davvero
l’ unica cosa da togliere al
slide è che è una buona cosa
Firefox non ha un’alta probabilità
di essere attaccato perché al momento
non stanno facendo un bel po ‘di chrome
quasi raggiunto fino a dove IE è dentro
facendo la tempra del JIT, penso questo
questa terza parte ha preso questo per Chrome 14
e so che Chrome ha aggiunto alcuni aggiunti
più di queste file da allora va bene così via
la conformità quindi questo è uno schermo da
una recente esecuzione del test 262 che è a
suite di test di conformità test che a
gruppo di persone del settore
compresa la collaborazione di Microsoft
che è come più di 10.000 test e
è solo per assicurarsi che tutti siano
eseguendo la stessa lingua e tu puoi
guarda qui I 10 in questo momento ha il più alto
tasso di passaggio e ci manca un test e
Ero molto triste di venire qui con il
uno che manca ma si scopre che
c’è questo nuovo piccolo test Unicode e
c’è un bug in realtà in Windows
sistema operativo così in effetti tutto il
i browser in questo momento hanno questo test
in mancanza di
ma io ero al cento per cento
pronto a mostrarti al cento per cento
ma non deve essere oh e in realtà
prima di scendere da questo a questo slaw
mi ricorda un giorno particolare nel
la storia di questo progetto è stata fantastica
il giorno era che penso che fosse il 6 gennaio
2010, che è il giorno in cui abbiamo trasformato il
chakra runtime engine on di default in
il browser Internet Explorer 9 e
non è così facile da fare perché loro
eseguire una suite di 4000 pagine Web che semplicemente
passa attraverso ogni possibile compatibilità
gamma quindi è come cose aziendali che
usa antiche assunzioni su ciò che il
il browser funziona e fino a molto moderno
cose come le tre prove acide che passano
tutto ciò è stato un grande giorno e il
Il team di Internet Explorer ci ha effettivamente inviato
ciambelle krispy kreme che era eccezionale e
ci hanno dato amore per circa 12 ore e
poi abbiamo iniziato a ricevere messaggi e-mail
come hey lo sapevi per questo web
pagina regredisci set twerking di mezzo a
per cento non è accettabile, quindi noi
ha avuto due mesi buoni di riparazione
tutto ciò prima che siamo pronti ad andare così così
cominciamo con un po ‘di cose su come
facciamo carichi di pagina così in modo sostanziale fonte
il codice arriva ed è analizzato che posso ottenere
fino a qui facciamo un astr astratto
albero di sintassi per quelli di voi che non lo fanno
scrivere compilatori e poi che va in
un generatore di codice byte perché generiamo
bytecode invece di andare direttamente a
codice nativo bene perché vogliamo
interpretare perché non vogliamo interpretare
perché per quanto possiamo dire correndo
esperimenti è il modo più veloce per
ottenere il codice effettivamente in esecuzione e ottenere
risposta interattiva di una pagina quindi prendi
il bytecode lo ha messo nel
interprete e questo è tutto
che devi fare per dire caricare il
New York Times e la cosa importante
è che l’ analisi è differita così
c’è un importante sito di notizie via cavo
Non ho il permesso di dire chi è ma
Sono stato sorpreso di trovare e questo è molto
comune che scaricano 70.000
funzioni per la loro prima pagina e loro
ne usano il diciannove percento durante
la pagina si carica così sicuramente lo faremo presto
ho imparato che se volessimo tagliare la pagina
tempo di caricamento abbiamo dovuto analizzare il meno possibile
possibile e così sappiamo che abbiamo solo
parse parentesi graffe e ci riempi più tardi
e ci sono tutti i tipi di trucchi per questo
e e ci sono sfide in corso così
per esempio lo script ACMA sei
comitato lì su cui stanno lavorando
caratteristiche come lead e const e uno di
le specifiche su lettin const
che tra l’altro sono nuovi modi di
introduzione di variabili in ambiti locali
in Echo lo script sei è quello degli errori di sintassi
dovrebbero essere segnalati
in sincrono con il carico di quelli
corpi di funzione e il problema con
questo è molto difficile da fare
parsing differito e quindi segnalare errori
sulle dichiarazioni delle variabili locali così
stiamo lavorando con loro su quello così è
a è sempre una lotta per continuare a ricevere
prestazioni attraverso la progettazione di questi
le cose vanno bene, ma proviamo a caricare la pagina
importante perché è uno dei
parti più viscerali dell’utente
esperienza sai molte volte
soprattutto con la web vecchia scuola
prima che avessimo applicazioni web, lo sapete
stai navigando in modo sequenziale
attraverso una serie di colpi di caricamento della pagina così
è molto importante avere ragione e tu
sapere che ci sono prove solide che
Internet Explorer è sta facendo abbastanza
bene con esso sia per i9 e ni 10 più
delle recensioni indipendenti che ho
visto e molte delle recensioni recenti che
dire che Internet Explorer si sta caricando
le pagine più veloci certamente fanno bella
bene, quindi, cosa facciamo noi interpretiamo così noi
iniziare l’esecuzione quasi immediatamente
questo è molto utile non è differito
analizzando il caching del profilo di avvio
quindi molti di voi ragazzi avranno
ho sentito il termine caldo
che sapevate fatto da molti
v8 equipaggio e altre persone per il sole
microsistemi per l’ esecuzione java così uno
delle cose che puoi fare per molto
poca memoria memorizzata è solo salva
dove sono gli hotspot e quindi cosa facciamo
è che non scriviamo alcun codice o altro
informazioni complesse ci piace solo dire
quali sono i punti caldi e noi diciamo
quali euristiche funzionano meglio e così
come, ad esempio, per le grandi notizie via cavo
sito con le 70.000 funzioni in una
e mezzo K di output che possiamo catturare
tutto ciò che è necessario sapere esattamente
ciò di cui abbiamo bisogno per generare codice per e
anche noi generiamo quel codice nel
sfondo così così invece di generare
codice sullo stesso thread che siamo
cercando di dare agli utenti reattività cosa
facciamo è generato su un altro core
e interpretiamo subito e poi noi
usa l’interprete per raccogliere
informazioni che ci aiuteranno
generare codice accurato per la cosa così
e anche il netturbino è
concorrente avrò qualche altra diapositiva
su cosa fa il garbage collector in a
pochi minuti ma immondizia concomitante
la raccolta è davvero utile quindi uno
fatto meraviglioso sui carichi di pagina è quello
pagina quelli che non seguono il
ipotesi generazionale quindi per quelli di
tu a chi non piace leggere della spazzatura
collezionisti il generale interno
l’ipotesi è che la maggior parte degli oggetti muoia
giovane ma in un pate e questo può
essere sfruttato facendo una piccola copia
cosa in cui hai un asilo nido di questi
oggetti giovani ma in una pagina caricano cosa
succede è che tutti gli oggetti sono creati
e quasi nessun oggetto viene distrutto
perché si sta impostando per le persone a
clicca sulle cose e prova tutto e
quindi ovviamente tu crei molto
di vivere lo stato e poi lasciarlo lì
e quindi è importante um
che il tuo garbage collector non prende
tempo durante il caricamento della pagina e soprattutto
come realizziamo ciò facendo il
bidone della spazzatura concomitante ok ora
sulla velocità e due
risposta interattiva che in gran parte completa
in questo discorso si intendono i tempi di pausa GC e
rendendoli piccoli va bene così di più
animazioni powerpoint hai visto questa parte
ora abbiamo l’interprete del battito cardiaco
e quel battito cardiaco sta generando profilo
informazioni quindi se lo memorizziamo
informazioni del profilo su disco e ottenerlo
indietro o non quello che facciamo è che usiamo il
profiler è una sorta di raccolta di dati
macchina così come è in esecuzione il codice e
è dandoti una risposta interattiva
misurando anche dove i punti caldi sono
e misurare quali anelli potrebbero trarne beneficio
da ulteriore ottimizzazione e cosa
gli accessi agli oggetti sono monomorfici senza
gli oggetti x sono polimorfici quale funzione
dovrebbe essere inline e quale codice no
a te totalmente non ti importa e tu
non uscirà mai dall’analisi differita
così gli interpreti raccolgono tutto ciò
informazioni e poi c’è un insieme di
euristica che determina se tu
avere abbastanza buone informazioni da provare
tipo specializzato qualcosa o generare
buon codice per qualcosa e poi tu
prendi il profiler di runtime e fai il feed
nel nucleo numero due dove c’è un
compilatore just-in-time e il
il compilatore just-in-time produce la macchina
codice e in questo momento sono gli stessi obiettivi
Penso che come v8 sai arm I’m e X x64
e x86 quindi abbiamo il codice della macchina e
ha anche un battito cardiaco e poi finalmente il
garbage collector è per lo più in esecuzione in
nucleo tre ora questa immagine è un po ‘
fuorviante perché non è come tre
core o fiammeggiante tutto il tempo il reale
L’utilizzo della CPU è di circa 1,2 core
perché la maggior parte delle volte è il codice
generatore non è in esecuzione o la spazzatura
il collezionista non è in esecuzione ma se lo ha
per offrirti una buona interazione
risposta correranno allo stesso tempo
okay, un po ‘più di dettagli
riguardo al garbage collector è
conservatore questo è sempre qualcosa
che le persone trovano controverse o
interessante ma funziona molto bene
per noi e per la ragione per cui abbiamo deciso di farlo
renderlo prudente è per sempre
interoperabilità con codice nativo per
esempio un host nativo come Internet
Explorer con la sua implementazione dom o
un host nativo come il nodo con il suo
codice sostanzialmente nativo che fa cose
come parlare due prese così abbiamo fatto un numero
di cose nel motore di chakra a
per interoperare bene è questo
permettendo puntatori a oggetti che vanno oltre
lo stack nativo e ancora trovandoli
e questo allevia il codice nativo di
la pressione di dover lavorare con qualsiasi cosa
tipo di aggiunta di riferimento di rilascio o intelligente
puntatore o sono in un ambito ora ora sono io
fuori da questo vanno varie discipline che
altrimenti dovresti fare in ordine
per interagire con il tuo motore di script noi
non devo fare perché guardiamo solo
allo stack c’è anche la capacità di
facendo quello che viene chiamato un heap ospite o
arena ospite dove può essere il codice nativo
basta allocare un po ‘di spazio usando il
garbage collector e quindi qualsiasi oggetto
puntatori di oggetti javascript che esso
i negozi vengono automaticamente scansionati
dal netturbino e questo fa
interrompi molto semplicemente devi solo
segui una semplice disciplina quindi si trasforma
la scelta conservatrice che abbiamo
misurato molto perché otteniamo molto
di domande è che va bene non sei tu
andando a ottenere riferimenti spuri che
beh, non c’è una media di 0 punti 0
a riferimenti spuri / collezione così
è come fare riferimento a riferimenti spuri
100 collezioni e una delle ragioni
è così basso in pratica è quello che abbiamo
taggati interi nel nostro JavaScript
implementazione e quindi è impossibile in
la parte JavaScript dello stack che
è la maggior parte della pila a confondere un
intero per un puntatore perché il
interi
taggato in modo che sia anche generazionale
non c’è uno spazio separato per l’infanzia, ma
tu puoi fare raccolte parziali e
puoi dieci tuoi alcuni di alcuni
oggetti perché a volte il
è un’ipotesi generazionale
seguito come in cose come Gmail o
outlook web access quindi è mark e
spazzare ma praticamente tutto da buttare
i collezionisti in questi giorni sono piccoli oggetti
sono bloccati in dimensioni per ridurre
frammentazione c’è l’oggetto grande
heap ha un’altra deframmentazione
strategia ma in questo momento non stiamo copiando
o evacuare tutto ciò che è anche
sorprende le persone ma ne leggiamo un numero
studi che sono stati fatti alla fine degli anni ’90
e all’inizio degli anni 2000 che hanno dimostrato che il
l’impatto della copia di garbage collection è
in realtà molto più grande nella tua memoria
sistema di tenere tutto dentro
metti in pratica più pagine
passare attraverso più linee di cache e così via se
stai copiando tutto il tempo allora se poi
se non lo sei ora si scopre che noi
potrebbe copiare oltre il novanta per cento del
oggetti in un heap tipico perché solo
le intestazioni dell’oggetto non possono essere copiate
cose come te conosci il fronte di un
oggetto prima che contenga lo slot
ha puntato tutte le proprietà dell’oggetto
o l’intestazione della stringa ma il carico utile di
una stringa o il carico utile di un array o
la matrice di slot che contiene tutto il
proprietà degli oggetti tutti questi
le cose potrebbero essere copiate perché c’è
solo un puntatore a queste cose e così via
se avessimo bisogno di fare evacuazione e
copiavamo ma non abbiamo trovato
qualsiasi pistola fumante in una qualsiasi delle app che
proviamo a correre che ci fa fare e
questo è il modo in cui gestiamo molti dei nostri
spettacoli che nessuno è permesso
aggiungere speculativamente qualcosa al
motore di chakra deve essere un’app
si è convenuto di essere abbastanza importante
e come si chiama una pistola fumante
una misurazione che si concentra e dice
ok per far funzionare questa app abbastanza bene noi
davvero bisogno di prendere questa ottimizzazione
quindi questo piccolo diagramma qui non lo è
ridimensiona le parti blu in modo che la parte inferiore
dovrebbe essere la spazzatura concorrente
filo di raccolta e quindi la parte superiore
dovrebbe essere il thread dell’interfaccia utente e il
piccolo blu in alto dove eravamo
scansionare le radici e poi rianalizzarle
sono in realtà più piccoli ma non potrei adattarli
il testo lì e quindi in sostanza cosa
succede con GC concorrente si ottiene un
piccola pausa e si scansionano i registri
e lo stack e poi hai messo tutto questo
nello stack dei voti e poi torni indietro
ed esegui il codice utente e dai loro buoni risultati
risposta interattiva nel frattempo il
filo di fondo sta marcando attraverso il
oggetto grafico quindi una volta che hai segnato
attraverso il grafico dell’oggetto e tu sei
data un’opportunità fai qualcosa
chiamato rescan, ovvero qualsiasi oggetto
che sono stati scritti durante questo mezzo
fase del programma proprio qui bisogno di
essere controllato per vedere se ne hanno
eventuali nuovi riferimenti e poi anche tu
devono ripetere la scansione dello stack normalmente questo
si traduce in un numero molto modesto di nuovi
oggetti bloccati sulla pila dei segni
e così andiamo avanti e segniamo
sequenzialmente e finisci così possiamo
inoltre non um non finire quello che puoi fare
puoi dire oh tu sai cosa ho ottenuto
troppi oggetti da marcare
sequenzialmente quindi tornerò e
contrassegna corrente nuovamente il grafico dell’oggetto e
quindi riprova il finale okay, allora
quello che porta a è molto piccolo prevedibile
tempi di pausa e così abbiamo misurato alcuni
ecco alcuni esempi di ciò che abbiamo misurato
guarda fuori Bing Maps essendo la ricerca di immagini
e poi un paio di sharepoint così abbiamo
misurato questo su un sacco di cose entrambe
Microsoft cose che questo è per lo più o
altre cose come i carichi di pagina di Gmail e
e ed è praticamente questo è quello che
sembra che l’unica eccezione sia html5
giochi che sono una specie di frontiera per noi
stiamo cercando di sapere che l’altezza si innalza
i giochi con frame rate funzionano perfettamente
e noi
abbiamo ancora alcune sfide con questo
su come lavorarci duramente ma per le cose
come queste grandi applicazioni web e web
le pagine stanno andando abbastanza bene, quindi questo è
questo è il tempo massimo mai trascorso in
raccolta dei rifiuti attraverso una grande sessione
circa una sessione di 20 minuti di utilizzo di questi
programmi con uno script che la persona
passa attraverso per testarlo e così vedi
per Outlook e SharePoint il
sfondo GC usato circa 15 millisecondi
per una collezione ma ma in primo piano
GC utilizzato al massimo sette millisecondi o pollici
il caso di SharePoint fino a 10
millisecondi quindi queste sono brevi pause
che non interferirà con il tuo
risposta interattiva quindi se sei occupato
digitando qualcosa come in ufficio 365
PowerPoint o qualsiasi altra cosa tu stia facendo
c’è qualcosa sotto i 30 millisecondi
probabilmente non interferirà con il
risposta interattiva e poi un’altra
cosa da notare è che il tempo medio
è un po ‘più in basso come sotto i 4
millisecondi per tutti ma ancora è
abbastanza coerente quindi così quello che sei
ottenere è stai diventando coerente
tempi di pausa prevedibili che è ciò che è
ottimo per la fornitura interattiva
risposta e questi in questo grande web
applicazioni e quindi è principalmente dovuto a
il GC simultaneo e come è
architettato ok quindi ora obbligatorio
il throughput scorre così qui andiamo e io
devo dire che essere in nostro ospite
quel v8 è un concorrente feroce così quando
quando quando stavamo lavorando su I 9 noi
superato il cromo sette volte e sette
volte ci hanno passato di nuovo prima
potremmo spedire un’anteprima e quindi per a
tempo era che sapevi abbastanza difficile e
abbiamo lavorato molto duramente su di esso e di
corso diversi benchmarks sono
diverso ma questo è il punto di riferimento
la gente ha prestato più attenzione a e
aveva la più varietà di piccoli
frammenti quindi ci siamo concentrati molto e
siamo riusciti a mantenere il comando tra il
spedizione di i 9 e ora il the
spedizione di i-10 ma sai che sono sicuro
v8 ci sorpasserà ad un certo punto o
è davvero non importa molto
perché onestamente si deve prendere questi
tipi di punti di riferimento con un grande grano di
sale perché tu lo sai come la stampa
ama una corsa di cavalli e ci sono a
numero e persone possono concentrarsi sul
numero ed essere come oh sì questo numero
ma penso che ciò che proviamo a fare sia invece
pensa a classi di applicazioni così
cosa vuoi fare sul web
piattaforma applicativa che non puoi fare
perché penso che noi tutti condividiamo So per
parlando con Lars che ha fatto la sua squadra
si sente in questo modo e penso che tutti condividiamo
che vogliamo solo fare il web
meglio la piattaforma vogliamo renderla più
applicabile a più classi di app e
quindi quello che cerchiamo di fare è provare a non farlo
entrare troppo nei parametri di riferimento
e focalizzarci di più su ciò che vogliamo fare
taglia la corda e possiamo assicurarci che
non ha problemi di glitch o lo sai o
nel guardare indietro nel passato era
più cose come pure vuoi correre a
word processor o PowerPoint o una mail
cliente e vuoi renderlo fluido
risposta interattiva e possiamo farlo
e tipo di forzare là per essere un
pistola fumante da una di quelle cose
questo vale per questo, ma così facciamo
progressi costanti sui benchmark che usiamo
punti di riferimento pensiamo che tu sappia che hanno un
posto ma siamo fiduciosi che possiamo tutti
lavorare insieme per creare un punto di riferimento come
industria che sarebbe più simile al
segno di spec e e meno come il
punto di riferimento attuale così indietro quando eravamo
tutto ciò che sai delle prestazioni C e C ++
c’era una cosa chiamata morso
e altra piccola specie di frammento di codice
benchmark basati che è un po ‘ come
cos’è il parasole e qualcun altro
benchmark forniti dal fornitore che lì
sono ciò che vorremmo vedere è che si evolvono
il modo in cui si è evoluto per le prestazioni C a
questa cosa ha chiamato il marchio specifico che è
fondamentalmente scenari da un mucchio di reali
applicazioni che le persone usano davvero e
usando quello per misurare le prestazioni di
il sistema di runtime linguistico che pensiamo
quello sarebbe davvero buono
direzione va bene così che ha detto che tipo di
i giochi giochiamo per eseguire il codice molto velocemente
bene così queste diapositive sono molto astratte
quindi proverò a interpretare quello che sono
cercando di trasmettere così fondamentalmente ciò che questo
sta cercando di trasmettere è quella arancione
è cattivo e che il verde e il rosso
è meglio che l’arancia fosse cattiva perché dentro
I 9 abbiamo appena generato il codice polimorfico
quindi, quando non stavamo interpretando, lo faremmo
basta generare il codice che è stato proprio questo
questo non importa quale sia il tipo di oggetto
è stato quello che è venuto attraverso un particolare codice
sito tutto era bello, lo sai se
stai facendo un cappio su qualcosa e
stai facendo un plus più bene se è un
grado intero se si tratta di un punto mobile
numero di grado se è un oggetto grande se
è una stringa e la si incrementa
sai bene proveremo a farlo tu
lo so, ovviamente, alcune cose lo sono
supposto per produrre errori di runtime
registrazione di script acma ma molte cose
non e così ma generico polimorfico
il codice funziona solo così velocemente, specialmente sopra
applicazioni che usano molto oggetto
accesso quindi vogliamo fare meglio e come
fai meglio è che giochi a questo gioco
dove è una sorta di gioco di pollo così
gestisci la cosa nell’interprete per
un po ‘e capire quali sono i tipi
di solito stanno attraversando il particolare
siti di codice e poi dici ok ora sono
andando a scommettere che quel codice è quello
l’oggetto sarà sempre quel tipo
e sto solo andando a generare codice
crede solo che e tipo specializzato
per quanto mi è possibile per quello
scrivi ma oh aspetta un attimo l’eco
comitato sceneggiatura dice che io non solo posso
generare quel codice bello e stretto
perché potrebbe non essere quel tipo che è
che passa lì e quindi è sempre
bisogno di fare controlli extra e questo è
dove arriva lo sfregamento anche quando
stai generando molto meglio
codice che vedrai tra un minuto
ancora non buono come il codice nativo perché
devi ancora fare quei controlli di
Certo puoi provare a issare gli assegni
fuori dai loop e questo è utile ma tu
Devo ancora farli bene, ecco cos’è e
fondamentalmente come è fatto mentre controlliamo
e se non è il tipo che pensiamo che sia
o l’insieme di tipi che pensiamo che siamo noi
salvare l’interprete che raccogliamo
informazioni più che così effettivamente è
polimorfo e poi ci riproviamo diciamo
va bene sia questo tipo o questo tipo
e generare codice ora potresti essere
pensando che questo membro del pubblico possa fregare
stai pensando oh ma non l’ha detto lui
voleva prestazioni prevedibili e
la gente potrebbe pensarci e ottenere il
giuste prestazioni, credo che dovrei
dire prestazioni prevedibili fino a che cosa
la semantica della lingua è e
stiamo sempre cercando di capire come
renderlo più prevedibile ma fondamentalmente
se non fai questi balzi tu
può salvare da lì c’è solo un limite
a quanto è buono il codice che puoi generare
okay, per esempio qui è il tipo
matematica di interi specializzati così fondamentalmente
questa è una cosa in cui abbiamo notato che
alcune delle variabili come queste
variabile B e la variabile C e il
le variabili M sono numeri interi ogni volta
attraverso il loop e l’interprete
esegue il ciclo 10.000 volte ed è come
erano sempre interi così poi noi
genera questo codice e pensiamo che vada bene
diventerà sempre numeri interi e
questo è più o meno il codice nativo
ad eccezione di questa piccola linea triste in rosso
dove hey se non fosse un intero andiamo
al salvataggio torniamo nel
interprete e cerchiamo di diventare più intelligenti
riguardo a quel ciclo, ecco qui
matematica a virgola mobile e io-10 e lo farò
mostra un confronto 99 in un minuto
è dal benchmark SunSpider e se
ti sorpassa gli occhi per questo
codice assembly vedrai che c’è
per lo più istruzioni Sse2 in là e
è soprattutto buono perché significa
stai principalmente facendo quello che il codice
intendevi che tu facessi e non molto altro e
poi ci sono le due cattive istruzioni
che sei costretto a fare perché tu
potrebbe essere sbagliato e qualcosa di diverso da
potrebbe venire un numero in virgola mobile
da lì ok bene proprietà così veloce
accesso a 99 questo è in realtà una sorta di
solo una diapositiva retrospettiva ma io
incluso perché è così carina che sono
certo che avete visto milioni di persone
come le persone fanno il tubo polimorfico in linea
caching e ma cosa vedrai
qui in realtà è monomorfico in linea
il caching perché è tutto ciò che avevo e9 andava bene
e così fondamentalmente ciò che è è quello
la piccola bolla sulla tua destra
c’è la classe nascosta, ecco cosa
la gente lo chiama in genere quando si ordina
di tipi di trucco per oggetti mentre vai
lungo e il runtime e quindi è possibile
vedi che b1 e b2 sono due oggetti con
due diversi tipi e bene in questo
caso monomorfico sono dello stesso tipo
e questo va bene perché x e y sono arrivati
nello stesso ordine ma poi in questo caso
qui sfortunatamente non sono uguali
anche se dovessi accedere a xoy
tutto sarebbe bello ma il mare è
tipo di incasinarmi così e un io-9 noi
non aveva alcuna disposizione per questo
il codice era lento, quindi cosa abbiamo fatto in i-10
abbiamo fatto la specializzazione del tipo di oggetto
abbiamo fatto delle cache di proprietà polimorfiche che abbiamo fatto
campo di sollevamento che significa se si accede
un campo di un oggetto più di una volta in a
loop cercheremo di mantenere questo accesso
fuori dal giro, se possibile, abbiamo fatto una copia
propagazione abbiamo fatto oggetto snellito
layout che per esempio significa questo
invece di avere effettivamente un array di slot
e tutto ciò che si appiccica al the
slot direttamente nell’intestazione dell’oggetto per
alcuni fissi noti di quantità nota di
slot e funzione di inlining che è a
grande affare, quindi questo è il codice
a sinistra questo è il codice 99 per quello
piccolo snippet JavaScript nella parte superiore
totale più uguale a 0 punto X più 0 punto y
più Z e quindi questo è il codice i-10
vedi l’odex, lo sai ancora
piuttosto brutto e c’è ancora il test
del tipo dell’oggetto e del
salvando l’interprete se noi
è necessario ma il codice per accedere a o punto
Non è molto più pulito, quindi abbiamo fatto un sacco di cose
progredire lì in un ciclo è pari
più drammatico perché fondamentalmente solo tu
fai l’intestazione del ciclo una volta che fai il
loop body dire cento volte e tu
può effettivamente sollevare alcuni assegni
del ciclo e poi ottieni
codice molto stretto quindi questo è come finisce
guardando è il loop qui dentro
il blu è molto bello e piccolo solo uno
controllo di salvataggio e poi anche questo è
mostrando nel rivestimento così abbiamo preso calcoli
e noi in fila lì questo è solo per
Diciamo che abbiamo lavorato molto
throughput e tempo di caricamento e
consumo di energia e tutti gli altri
cose e ne abbiamo fatte moltissime
progressi con esso siamo al punto
dove stiamo eseguendo applicazioni di grandi dimensioni
quello che sai usare molti oggetti
con molte proprietà su di loro molto
bene abbastanza che tu sappia grande
applicazioni 50.000 applicazioni di linea
stanno offrendo ottimi risultati di calcolo
per esibirsi è molto buono interattivo
risposta, ma ora stiamo cercando di
affrontare ulteriori classi di applicazione
per esempio come i giochi html5 e loro
portare nuove sfide e così siamo
sempre cercando di ampliare la classe di
applicazioni che la cosa può effettivamente
va bene così parlando di ampliamento
c’è un’altra cosa che abbiamo lavorato
e ci sono alcune cose che il
motore di script è correlato a
quello e quello è che c’è una cosa
chiamato Windows 8 sta uscendo ottobre
26 è quando tutti saranno in grado di comprare
windows 8 macchine ovunque e um ma
in realtà è fatto e un sacco di
i clienti aziendali lo stanno già utilizzando
così
e e una delle cose che mi ha fatto
davvero felice di Windows 8 è che noi
sono stati in grado di applicare lo sviluppo web
modello per costruire app desktop così tanto
delle applicazioni chiave come la musica
giocatore e il client di posta che solo
vieni con Windows 8 sono stati scritti utilizzando
esattamente lo stesso paradigma di sviluppo
che le persone usano per costruire dicono notizie su Gmail
conosci HTML JavaScript CSS e quindi noi
penso che questo sia fantastico perché poi le persone
può sfruttare le loro capacità per fare ancora
un’altra cosa e così quando ci sono
dispositivi Windows sai che i concorrenti
ipad per esempio voi sarete in grado di
costruisci un reach client e poi sarai
in grado di utilizzare lo stesso client per fare il
materiale specifico per dispositivo, si spera
sfruttando la maggior parte del tuo codice così
ci sono alcune cose che abbiamo fatto
in particolare per fare Windows Store
le applicazioni migliori sono quelle che abbiamo fatto
codice della bicicletta che incassa in aggiunta al
il caching del profilo e questo perché noi
volevo assicurarmi che con il
Applicazioni di Windows Store la maggior parte delle
Codice JavaScript che stanno andando a
la corsa è conosciuta nel momento in cui sono
installato nel negozio e così è
davvero bello solo essere in grado di creare
la bicicletta codifica per quella cosa il primo
ora viene eseguito sulla scatola e poi memorizzato
la bicicletta codifica in modo tale che tu
può evitare perché dalla cogenerazione è
in realtà un enorme componente di applicazione
caricare il tempo e poi un’altra cosa siamo noi
ha aggiunto un modo per gli host di dire al chakra
garbage collector quando sono inattivi o
quando stanno per sospendere il
applicazione su disco in modo che possiamo eseguire
GC in momenti più opportuni in modo che
quando la persona è seduta e pensa
quello che stanno per scrivere è quando noi
eseguire GC e non quando sono in realtà
digitando e quindi probabilmente il più
il vasto lavoro che abbiamo fatto è stato veloce
questo era il marshalling del codice nativo
reso più facile dal fatto che chakra in
il primo posto ha preso alcune decisioni per
ottimo interop con il codice nativo che è
che usiamo le convenzioni di chiamata native
quindi la stessa esatta convenzione di chiamata
che se hai scritto un piccolo frammento di C
il codice sarebbe generato è quale chakra
sta generando per il suo stack JavaScript
inoltre usiamo la gestione delle eccezioni native così
tutte le macchine per la gestione delle eccezioni
quello che è messo in pila è esattamente il
stesso questo aiuta anche dal modo su
con l’infrastruttura di debug è
più facile eseguire il debug dello stack perché
ci sono già strumenti esistenti che sanno
su questi stack e conosci il
eccezioni e sapere come affrontare con
loro quindi è stato un grande aiuto e poi
probabilmente la più grande cosa che abbiamo fatto
era la generazione e il caching del metodo
punti di ingresso quindi una delle cose che
Windows 8 viene fornito è come un grande
superficie in modo da poter lavorare con simili
il touch screen e il GPS e tu
conosci tutte le altre caratteristiche del dispositivo no
scuotendolo come si chiama il
porta diorama e quindi c’è una P è per
quello e volevamo un modo semplice per
Programmatori JavaScript da programmare
un normale JavaScript intuitivo e vedere
eventi che provenivano da questo in un
JavaScript e chiama l’api’s in
solo un in un modo naturale così noi
ha scritto questo strato di marshalling che fa
tutte le API degli host e non è così
Basta essere le finestre le nuove
windows api qualsiasi host di chakra può
creare un’area di superficie API come questa e
lo useremo come maresciallo fondamentalmente da
leggiamo i metadati che dicono che lo sai
quali sono l’interfaccia è quali sono i
tipi del metodo chiama e poi
generiamo stub di smistamento per loro
al volo quindi è una specie di lavoro
abbiamo fatto per una sorta di desktop più
applicazione della cosa e poi
c’è sempre più lavoro da fare in questo modo
operazioni e come stavi chiedendo
riguardo al polimorfismo che stiamo per
molto meglio in futuro, ora
noi otteniamo ciò che dobbiamo fare
c’è sempre lo standard ESX
è in corso e ci sono cose che
sono già abbastanza d’accordo
che stiamo già lavorando per conformarci
con quello e per sostenerlo siamo ancora
lavorando su cose dell’ultimo standard
ratifica come accesso o prestazione
per ES cinque e poi come ho detto che siamo
cercando di trovare nuove classi di applicazioni
che i clienti sono venuti da noi e
Dicendo no, vogliamo eseguire questo sul web
vogliamo correre tagliare la corda sul web
non vogliamo avere un client iOS e
tutto ciò che vogliamo solo averne uno
cosa così stiamo cercando di farlo funzionare
e poi il lavoro di Newport arriva sempre
per esempio abbiamo un GC conservativo
ma si scopre che molto spesso noi
sapere informazioni precise su cosa è
il puntatore e ciò che non è un puntatore in
un oggetto particolare e per esempio tutti
le cose che sono assegnate dal
sistema nativo di runtime quelle cose che noi
sapere esattamente dove sono i puntatori e
quindi approfittare di quella precisione è
una cosa che aiuterà i giochi html5 e
registrare le applicazioni in esecuzione e poi anche
facendo una quantità ancora più aggressiva di
iterando tra sequenziale e
fasi concorrenti della raccolta dei rifiuti
così facendo un euristico dove dici
sai cosa fare se mi sono fermato di più
di 10 millisecondi sono solo in bailing
e andando dritto nel concorrente
marcando non lo facciamo molto
aggressivamente adesso penso che sia un
cosa vedremo seriamente nel
futuro quindi sì, ho citato i giochi e
poi l’altra grande categoria di app quella
stiamo cercando di espanderci in questo momento
applicazioni a lunga corsa lo sai
pagine che fai un po ‘e poi tu
naviga ma potresti rimanere su facebook
per te sai un’ora e così il GC
i requisiti sono carini
diverso e stiamo lavorando su quello va bene
quindi finalmente l’immagine grande fa scorrere l’ultima cosa
stiamo davvero cercando di farlo, penso tutto
di noi che conosci molte persone
chi fa più lavoro su questo tipo di
cosa sono qui a questa conferenza e io
pensa a tutti noi
stai solo cercando di fare il
la piattaforma web è meglio che tu stia cercando di
trovare un modo che sempre di più
interessanti app killer possono essere solo
il web e non dobbiamo avere come
piccola programmazione a parentesi quadra per
iOS e tutte quelle altre cose, ma invece
possiamo solo sviluppare la cosa maledetta era
e funziona magnificamente ovunque
ovviamente quello è un sogno che lo farà
mai completamente realizzato ma al
estensione possiamo farlo voglio dire il the
persona che conosci in sri lanka con
conosci un browser web come un telefono
sarebbe bello se tu lo sapessi
potrebbe fare tutto ciò che potrebbero imparare
il programma che potrebbero modificare i documenti potrebbe essere
su a conosci un tablet o qualcosa del genere
qualunque cosa tu abbia, conosci il pc
la biblioteca è il web ciò che dà questo
prometti e quindi cosa stiamo cercando di fare
sai che rispondi a questa promessa
fare un’ottima infrastruttura per il web
e penso che ci sia
tre parti a quella che non conosco
avere qualcosa a che fare con e questo è il
parte che sta nel mezzo e nel blu
sono come gli occhi AP AP
capacità e modello di componente sicuro
Penso che siano tutte cose che noi
bisogno di fare di meglio per rendere il web a
veramente grandi cose della piattaforma applicativa
che io e altre persone dentro
Microsoft lavora su sono i grandi j / s
prestazioni del motore utilizzando tutto il
risorse come core multipli e GPU
continuando a ottimizzare, ecco cosa
abbiamo appena parlato in questo
parla e poi finalmente penso l’altro
pezzo di foto che deve essere
c’è che dobbiamo costruire strumenti
che consentono la costruzione di grandi dimensioni
Applicazioni JavaScript perché è
è difficile prendere un linguaggio così
sai mette tutto nel globale
spazio dei nomi per impostazione predefinita e così via e
in realtà costruire JavaScript su larga scala
applicazioni e quindi penso che per davvero
supportare un ecosistema di app in cui il prossimo
l’app killer sarà una rete
applicazione dobbiamo fare un lavoro migliore
con strumenti e sono davvero entusiasta
su quello oggi perché in circa
un’ora in 10 minuti penso Microsoft
sta per diventare piuttosto grande
annuncio così alle 18:00, ora danese
spazio per utensili e mi sento benissimo
perché sento che è è così
è qualcosa che ho davvero intenzione di
essere in grado di unirmi con i miei colleghi
chi ha costruito questo e lo offre allo scoperto
comunità di origine in tutti coloro che cercano
per rendere la piattaforma web migliore così sono
davvero impaziente di tutta la vostra
feedback non solo su questo discorso ma ma
su quell’annuncio che sta arrivando
circa un’ora quindi è così grazie
tutte le domande quindi la domanda era con
le applicazioni JavaScript con esecuzione prolungata
vedi un po ‘di resti striscianti
nel tempo con l’applicazione più lunga
e più a lungo e quei cumuli striscianti
Resti che sai che possono essere dovuti
alla frammentazione sai che significa
dove stai assegnando piccoli oggetti
dai pezzi più grandi e poi ottieni
piccoli buchi dove non puoi mettere
qualsiasi cosa e può anche essere dovuta a
le persone si limitano a tenere riferimenti come
uno degli oratori prima di oggi
menzionare così ci aspettavamo di vedere
che non abbiamo visto abbastanza da fare
qualcosa a riguardo come opportunistico
l’evacuazione per esempio è qualcosa di noi
potrebbe fare che in sostanza significa che quando
sai di avere tutti i suggerimenti per un
oggetto che si va avanti e spostare in un
nuova pagina per cercare di allineare le cose e
ridurre la frammentazione ma il
la strategia di frammentazione stava usando sembra
per funzionare bene abbiamo effettivamente fatto
studi comparativi di dimensioni simili
applicazioni in esecuzione per lunghezze simili
scritto tutto in C e scritto nel web
paradigma dello sviluppo e in realtà
c’è meno frammentazione in questo momento
quelli che abbiamo misurato, quindi stiamo cercando
per una pistola fumante non l’hanno visto
abbiamo una serie di elementi di lavoro che possiamo prendere
se lo facciamo lì
c’è un grande interesse per la corsa
chakra sul lato server in azzurro
comunità purtroppo in questo momento chakra
è disponibile solo su Windows
piattaforma e quindi non è davvero
qualcosa con cui poter competere
v8 per essere una nota per questo motivo perché
Sono sicuro che oltre il cinquanta per cento del
le applicazioni del nodo sono in esecuzione
piattaforme non Windows, ma nel nostro
piccolo mondo, sì, ne abbiamo molti
i clienti che spediranno i server
quest’anno che usano chakra sul server
lato e abbiamo fatto molto lavoro entrambi
inizialmente con chakra e da allora a
renderlo scalabile e indurito per il
ambiente server così cose come la memoria
perde cose come la Avs e cosa fare
con loro sai che possiamo correre
12.000 contesti di script simultaneamente in
un processo che conosci con isolamento così
questo è un numero abbastanza buono
competitivo ed è dimostrato di essere
abbastanza buono per le persone che sono
usando il chakra in questo contesto e penso
molto del lavoro che abbiamo fatto per fare del bene
Interop nativo come la chiamata nativa
convenzioni conservative GC native
le eccezioni avvantaggiano davvero le persone sul
lato server perché semplifica solo
tutto tranne lo stack sembra un tutto
molto più simile allo stack nativo e così via
quando fai ginnastica come te
stavano descrivendo nel tuo discorso è
in realtà un po ‘più semplice perché noi
risulta che abbiamo già il codice
attraversa lo stack nativo ed estrai
tutti i tipi di informazioni così così
sì ci importa molto di questo nel nostro
piccolo mondo di clienti Windows e
e siamo stati piuttosto contenti del
risultati iniziali di esso va bene così il primo
la prima domanda in realtà prenderò
la seconda domanda prima quindi la seconda
la domanda era un grande lavoro quando siamo noi
andando a open source e
Penso che purtroppo devi chiedere
più persone di me che la domanda I
pensa se me lo chiedi e io ho appena parlato il mio
cuore potrebbe piacere la risposta, ma io
pensa che Microsoft sia nel suo complesso
gradualmente svegliarsi al fatto che
c’è un software Commons là fuori e
che la comunità di sviluppo del software
si è impegnato con l’idea che siamo
andando a condividere molto e stiamo andando a
competere e costruire i nostri stack ma
anche noi condivideremo molto
cose su cui costruiamo i nostri stack e io
penso che sia super sano e super
interessante interagire in questo
modo non solo di scrivere articoli sulle cose
come facevamo prima, ma in realtà condividevamo
codice che lavora insieme sul codice è
terrificante e Microsoft deve capire
quello che non sta andando via la gente è
andando in modo permanente a farlo e quello
Microsoft ha il più grande produttore di
il software nel mondo dovrebbe
contribuire a questo in modo che sia chiaro e
quel meme si sta espandendo in Microsoft così io
penso che sia tutto ciò che posso dire
a tale proposito la prima domanda
eravamo noi quando abbiamo archiviato il profilo
informazioni su cosa cambia l’input come
stabile è l’informazione del profilo sotto
ingresso cambia perché se andremo a
dire hey che questo ha funzionato, allora cosa succede se
l’input dice se se il nuovo input allora fa
galleggia altrimenti facendo un int giusto
quindi quello che facciamo è che abbiamo effettivamente
euristica primaria e secondaria
in realtà c’è un’euristica che dice
qual è la probabilità che questa cosa
sarà stabile e quindi non lo farà
cambia sotto input e cosa è
Probabilmente non lo farà e così lontano
l’euristica è stata abbastanza buona da noi
può eseguire le cose più velocemente indovinando e
salvataggio poi per bit poi per no
seguendo il consiglio del
profilo ok grazie mille davvero
mi è piaciuto e non sarà fantastico
conferenza
Please follow and like us: