Förbättra resultatresultatet för JavaScript-prestanda med användarmärken

När du arbetar med avancerad JavaScript-kod, som en 3D-motor, kanske du frågar dig själv vad du kan göra för att optimera och hur mycket tid du ska spendera i vissa specifika kodstycken. I denna handledning delar jag flera verktyg som ger insikt om hur din kod fungerar och visar hur du får ut det mesta av användarmärken i minnesgrafen för att analysera din prestanda.

Kan inte vänta med att se vad denna handledning handlar om? Kolla på denna videon:

Känn dig fri att pinga mig på Twitter (@deltakosh) om du vill diskutera den här artikeln!

Behöver en profiler?

En profiler som kommer att tänka på är den integrerade profiler som du kan hitta med nya uppdateringar för förbättringar av Internet Explorer F12 Dev Tools, som också kommer att vara tillgängliga för Microsoft Edge. Naturligtvis kan du använda alla liknande verktyg du föredrar också på din dev-box. 

Om du vill prova detta på Android, iOS eller Mac OS kan du också använda remote.IE för att få en instans av Windows 10 Teknisk förhandsgranskning på några minuter. Öppna sedan Internet Explorer "e" du har undvikit (det är ett tillfälligt klientskal som har Project Spartans nya reningsmotor konfigurerad), slår på F12 och nu kan du se vad jag ska visa dig:

Observera att med de nya F12-verktygen som vi levererade med Windows 10 Teknisk förhandsvisning, är profiler nu en del av UI-responsfönstret:

Låt oss se andra alternativ som kan ge dig mer insikter om hur din kod fungerar.

console.time

Du behöver bara ringa console.time () och console.timeEnd () runt koden du vill utvärdera. Resultatet är en sträng i konsolen som visar tiden som förflutit mellan tid och timeEnd.

Det här är ganska grundläggande och kan enkelt emuleras, men jag hittade denna funktion riktigt enkelt att använda.

Ännu mer intressant kan du ange en sträng för att få en etikett för din mätning.

Det här är till exempel vad jag gjorde för Babylon.js:

console.time ("Active meshes evaluation"); this._evaluateActiveMeshes (); console.timeEnd ("Active meshes evaluation");

Den här typen av kod finns kring alla viktiga funktioner och då kan du få riktigt bra information när prestanda loggning är aktiverad:

Varnas att renderingstext i konsolen kan konsumera CPU-ström.

Även om den här funktionen inte i sig är en standardfunktion, är webbläsarkompatibiliteten ganska bra. Chrome, Firefox, IE, Opera och Safari stöder det.

Prestationsobjekt

Om du vill ha något mer visuellt kan du också använda prestationsobjektet. Bland andra intressanta funktioner som hjälper dig att mäta en webbsidans prestanda kan du hitta en funktion som heter markera som kan avge ett användarmärke.

Ett användarnamn är associeringen av ett namn med ett tidsvärde. Du kan mäta delar av kod med detta API för att få exakta värden. Du kan också hitta en bra artikel om detta API av Aurelio de Rosa på SitePoint.

Tanken idag är att använda detta API för att visualisera specifika användarmärken på skärmen UI Responsiveness:

Med det här verktyget kan du fånga en session och analysera hur CPU används:

Vi kan sedan zooma in på en viss ram genom att välja en post som heter Återuppringning av animationsram och högerklicka på den för att välja filtrera till händelse.

Den valda ramen filtreras sedan:

Tack vare det nya verktyget F12 kan du sedan byta till JavaScript-samtalstackar för att få mer information om vad som hände under denna händelse:

Det största problemet här är att det inte är lätt att få hur koden skickas under evenemanget.

Och det är här där användarmärken går in i spelet. Vi kan lägga till våra egna markörer och sedan kunna sönderdela en ram och se vilken funktion som är dyrare och så vidare.

performance.mark ("Börja på något ... just nu!");

Dessutom, när du skapar din egen ram, är det mycket praktiskt att kunna instrumentet din kod med mätningar:

performance.mark ("Active meshes evaluation-Begin"); this._evaluateActiveMeshes (); performance.mark ("Active meshes evaluation-End"); performance.measure ("Active meshes evaluation", "Active meshes evaluation-Begin", "Active meshes evaluation-End");

Låt oss se vad du kan få med Babylon.js, till exempel med ”V8” scen:

Du kan be Babylon.js att avge användarmärken och åtgärder för dig genom att använda debug skikt:

Då kan du använda den här skärmen genom att använda analysprofilen för UI-respons:

Du kan se att användarmärken visas ovanpå händelsen själv (de orange trianglarna) samt segment för varje åtgärd:

Det är då mycket lätt att bestämma att faserna [Rendermål] och [Main render] är dyraste.

Den fullständiga koden som används av Babylon.jsatt tillåta användare att mäta prestanda för olika funktioner är följande:

Tools._StartUserMark = funktion (counterName, condition) om (typ av villkor === "undefined") villkor = true;  om (! villkor ||! Tools._performance.mark) return;  Tools._performance.mark (counterName + "-Begin"); ; Tools._EndUserMark = funktion (counterName, condition) om (typ av villkor === "undefined") villkor = true;  om (! villkor ||! Tools._performance.mark) return;  Tools._performance.mark (counterName + "-End"); Tools._performance.measure (counterName, counterName + "-Begin", counterName + "-End"); ; Tools._StartPerformanceConsole = funktion (motnamn, villkor) om (typ av villkor === "odefinierad") villkor = true;  om (! villkor) return;  Verktyg._StartUserMark (motnamn, villkor); om (console.time) console.time (counterName); ; Tools._EndPerformanceConsole = funktion (counterName, condition) om (typ av villkor === "odefinierad") villkor = true;  om (! villkor) return;  Verktyg._EndUserMark (motnamn, villkor); om (console.time) console.timeEnd (counterName); ; 

Tack vare F12-verktyg och användarmärken kan du nu få en bra instrumentpanel om hur olika delar av din kod fungerar tillsammans.

Mer hands-on med JavaScript

Det kan kanske överraska dig lite, men Microsoft har en massa gratis lärande på många JavaScript-ämnen med öppen källkod, och vi har ett uppdrag att skapa mycket mer med Microsoft Edge. Kolla in min egen:

  • Introduktion till WebGL 3D med HTML5 och Babylon.JS
  • Skapa ett enkelsidigt program med ASP.NET och AngularJS
  • Cutting Edge Graphics i HTML

Eller vårt lags inlärningsserie:

  • Praktiska prestationstips för att göra din HTML / JavaScript snabbare (en sju delarserie från lyhörd design till vardagliga spel till prestationsoptimering)
  • Den moderna webbplatformen Jump Start (grunden för HTML, CSS och JavaScript)
  • Utveckla Universal Windows Apps med HTML och JavaScript Jump Start (använd det JS du redan har skapat för att skapa en app)

Och några gratis verktyg: Visual Studio Community, Azure Trial och testverktyg för webbläsare för Mac, Linux eller Windows.

Den här artikeln är en del av web dev-tekniken från Microsoft. Vi är glada att dela Microsoft Edge och den nya EdgeHTML-återgivningsmotor med dig. Få gratis virtuella maskiner eller testa fjärran på din Mac, iOS, Android eller Windows-enheten @ http://dev.modern.ie/.