Modern Debugging Experience deel 1


In deze uit twee delen bestaande instructiereeks kijken we naar het schrijven en foutopsporen van JavaScript-code met behulp van moderne gereedschappen zoals Chrome DevTools.

In deel 1 krijgt u een inleidende blik op de verschillende panels in de DevTools en voor welke workflows ze geschikt zijn. Er zal ook aandacht zijn voor het schrijven en uitvoeren van JavaScript-code via de browser in plaats van een code-editor. 

1. Wat zijn Browser DevTools?

Developer Tools zijn functies die worden geboden door browsers die een reeks hulpprogramma's bevatten om webpagina's te inspecteren, ermee te werken en te debuggen. Browser DevTools worden meestal gebundeld met alle moderne browsers, waaronder Chrome, Firefox, Safari, Opera en Internet Explorer. Deze zelfstudie richt zich specifiek op het deel DevTools van Chrome Canary, maar alle hier genoemde functies zijn waarschijnlijk binnenkort onderdeel van Chrome Stable.

Wat kan DevTools bieden aan een JavaScript-ontwikkelaar?

Het open webplatform stelt u in staat om Klik met de rechtermuisknop> Inspecteer element op elke webpagina en ontdek de inhoud ervan, maar JavaScript is altijd een beetje meer buiten bereik geweest dan CSS (Cascading Style Sheets). Hoewel DevTools vol zit met functies die zijn gerelateerd aan de vormgeving van de pagina, is er ook een heleboel minder bekende functionaliteit waarmee je JavaScript op verschillende manieren kunt bekijken, schrijven en debuggen, of het nu op je eigen pagina staat of op een derde -party site.

Waarom DevTools gebruiken voor uw JavaScript-workflow?

Als u een front-end webontwikkelaar bent, is het raadzaam om op zijn minst op de hoogte te zijn van de JavaScript-hulpprogramma's die DevTools te bieden heeft. Hoogstaande functies omvatten:

  • ten minste twee speciale panelen waarvan de gebruikscasussen vrijwel geheel op JavaScript zijn afgestemd
  • een ontwikkelomgeving die snel is in te stellen, met een snelle feedbackloop
  • geavanceerde debugging-mogelijkheden met breekpunten

2. DevTools-overzicht

Dit gedeelte behandelt de UI-elementen van de DevTools, met name het bronnenvenster en het consolepaneel, aangezien dit de twee panelen zijn die worden gebruikt voor de rest van deze zelfstudie.

Bronnenpaneelinterface

Houd rekening met enkele lay-outkenmerken:

  • DevTools bevindt zich in een niet-geblokkeerde staat. U kunt er de voorkeur aan geven naar links, onder of rechts van het hoofdvenster te gaan.
  • Het Bronnenvenster in het Bronnenvenster wordt geselecteerd in de linkerzijbalk.
  • De deelvensters in de rechterzijbalk staan ​​in een uitgevouwen toestand.

In het bronnenvenster vindt u een code-editor en het ondersteunt syntax highlighting voor veel voorkomende bestandsindelingen zoals HTML, CSS, JavaScript, CoffeeScript, LESS en Sass. De code-editor is aanwezig in het hoofdvenster. Rechtstreeks boven het hoofdvenster ziet u tabbladen die overeenkomen met uw geopende bestanden.

In het Bronnenvenster in de linkerzijbalk ziet u een bestandsstructuur waarin doorgaans de elementen worden weergegeven die op de momenteel geïnspecteerde pagina zijn geladen. Activa zijn gegroepeerd per domein en mappen kunnen in een uitgevouwen of samengevouwen toestand zijn. Als u één keer op een item klikt, wordt dit geopend in de codebewerker.

De rechterzijbalk bevat besturingselementen voor JavaScript-foutopsporing en elk deelvenster kan in een uitgevouwen of samengevouwen toestand zijn. Verschillende niveaus van uitvoer worden hier weergegeven wanneer JavaScript is gepauzeerd op een onderbrekingspunt.

Console Panel

Met het consolepaneel kunt u de uitvoer bekijken die wordt geproduceerd door diagnostische logboeken (zoals console.log statements) maar ook om JavaScript te schrijven en te evalueren in de context van de momenteel geïnspecteerde pagina. Het consolepaneel ondersteunt zowel de Console-API als de Command Line-API. Hier zijn enkele functies die worden weergegeven door elke API, samen met een beschrijving van hun uitvoer.

Console API

// Een eenvoudige loginstructie, een string, een array en een object console.log ('Hi', [1,2,3], this);
// Hetzelfde als console.log maar dan in rood opgemaakt om een ​​fout console.error aan te geven ('Er is een fout opgetreden');


Command Line API

toetsen (raam); // Verkrijg de eigenschappen van een object
$ 0; // Haal het momenteel geselecteerde element op in het Elements-paneel


De bovenkant van het consolepaneel bevat enkele bedieningselementen zoals hieronder weergegeven.

  • Geen symbool (cirkel met een backslash) wist de console. Dit is handig als er meer berichten dan gewenst in beeld zijn en u ze wilt verwijderen. U kunt ook de snelkoppeling gebruiken Command-K om ze te verwijderen of de functie uit te voeren duidelijk(), die deel uitmaakt van de Command Line API.
  • Filter opent een balk met filterbesturingselementen inclusief een invoervak. Als u alleen geïnteresseerd bent in het vinden van foutmeldingen, selecteert u de fouten filter optie. U kunt ook een reguliere expressie invoeren om als filter te gebruiken.
  • De Selecteer menu () biedt opties voor beschikbare JavaScript-uitvoeringscontexten om naar over te schakelen. Gebruik dit als u wilt dat uw JavaScript wordt geëvalueerd in de context van bijvoorbeeld een IFrame- of Chrome-extensie.

Het consolepaneel is een van de weinige panelen die u kunt overlappen over andere panelen in de DevTools (Elements, Network, Sources) om een ​​verbeterde workflow te bieden. Als u merkt dat u regelmatig terugkeert naar het consolepaneel, opent u de consolelade door op de Ontsnappen sleutel.

3. JavaScript bekijken met behulp van de DevTools

In deze sectie wordt de nadruk gelegd op het gebruik van DevTools om JavaScript-bronnen te bekijken die een site gebruikt. Voordat u doorgaat, is het raadzaam om de browsercache uit te schakelen via DevTools. Ga hiervoor naar Instellingen> Algemeen en schakel het selectievakje getiteld in Schakel cache uit (terwijl DevTools open is). Dit zorgt ervoor dat u altijd een nieuwe versie van een actief krijgt.

Werkstroom op sites van derden

Navigeer naar HTML5Please.com, een site die de gereedheid van webplatformfuncties verklaart. Open de DevTools met Command-Shift-I of door te selecteren Inspecteer Element vanuit het contextmenu van de pagina. Ga naar de Bronnenpaneel en noteer de bestandsboomstructuur die in de linkerzijbalk wordt weergegeven. Het is niet ongehoord dat websites hun JavaScript opslaan in mappen zoals "js" of "scripts", dus je weet al waar je moet kijken. Open de script.js bestand in de js map. Merk een paar kenmerken van de code-editor op die handig kunnen zijn wanneer u JavaScript-code bekijkt of bewerkt:

  • volledige syntaxisaccentuering
  • regel- en kolomnummer van de cursor
  • nieuw tabblad dat overeenkomt met het geopende bestand
  • woordvoorvallen toegewezen aan de huidige selectie
  • brace matching
  • go-to definitie

Gebruik de go-to-definitiefunctie om snel JavaScript-methoden of -functies te vinden of te ontdekken. U kunt het modeldialoogvenster go-to definition openen via de snelkoppeling Command-Shift-P. Als u de naam kent van de methode of functie waarnaar u op zoek bent, typt u deze in het zoekveld van de go-to-definitie; terwijl u typt, worden de resultaten in realtime bijgewerkt. Elk resultaat bevat de naam van de overeenkomende methode (indien aanwezig) en het regelnummer waar deze is gedefinieerd. Gebruik invoeren om een ​​zoekresultaat te selecteren en u komt terecht op de coderegel waar de functie is gedefinieerd.

Nu open modernizr-2.0.min.js in de js / libs map. Het feit dat dit bestand is verkleind, maakt het moeilijker om te bekijken. kiezen Pretty Print DevTools gebruiken om een ​​meer intuïtieve opmaak toe te passen op het bestand, met behulp van regeleinden en inspringen. De Pretty Print-functie werkt voor zowel CSS als JavaScript.

Sla externe JavaScript op in het bestandssysteem

Elk JavaScript-bestand in de bestandsstructuur heeft een contextmenu, dus open het met klik met de rechtermuisknop. Merk een paar opties op die handig zijn om het bestand offline te zetten voor later gebruik.

  • Open link in nieuw tabblad: gebruik dit als u de netwerkinformatie verder wilt inspecteren via een speciaal tabblad (via Network Panel).
  • Opslaan als: gebruik dit als u een offline kopie van het bestand in uw bestandssysteem wilt maken.
  • Kopieer link adres: gebruik dit als u de URL elders wilt delen.

Zoek JavaScript in het netwerkpaneel

Het netwerkpaneel geeft niet alleen eenvoudig weer welke bronnen een pagina heeft geladen, maar geeft ook andere informatie en gegevens weer.

  • initiatiefnemer: waardoor een script is gedownload
  • DOMContentLoaded (blauw) en Laad gebeurtenissen (rood): een tijdgebonden visuele weergave van wanneer deze gebeurtenissen worden geactiveerd
  • Grootte: de grootte van het item, inclusief de Gzip-maat

Gebruik HTML5Please.com als voorbeeldwebsite en volg de onderstaande stappen:

  1. Navigeer naar de Netwerkpaneel en wis de logs.
  2. Ververs de pagina.
  3. Filter voor JavaScript-logboeken door de scripts filter.

Het eerste script, modernizr-2.0.min.js, heeft de waarde van html5please.com/:17 voor de initiatiefnemer. Dit suggereert dat het een HTML-bron was die de download van het script initieerde (in plaats van een script-lader, bijvoorbeeld). Klik op de initiator en u wordt naar de regel met code in het bronnenvenster geleid die verwijst naar het bestand:

In het geval dat een script dynamisch wordt ingevoegd (bijvoorbeeld met een scriptlader), kan de initiator-kolom in het netwerkvenster een JavaScript-call stack bieden met betrekking tot de aanroepen die plaatsvonden helemaal tot aan het punt waar het script dynamisch werd ingevoegd in de DOM.

U kunt op elke oproep binnen een oproepstapel klikken om naar het relevante gedeelte van de code in het bronnenvenster te navigeren.

4. JavaScript schrijven met de DevTools

In de sectie "JavaScript met de DevTools bekijken", heb ik uitgelegd hoe informatie, metadata en broncode op JavaScript-elementen kunnen worden bekeken. In dit gedeelte wordt de manier onderzocht waarop je JavaScript kunt schrijven met de DevTools.

Console Panel

Gebruik het consolepaneel voor het schrijven van snelle JavaScript-oneliners met onmiddellijke resultaten. JavaScript wordt uitgevoerd met de context van de momenteel geïnspecteerde pagina. Voer wat JavaScript uit in het consolepaneel door op te drukken invoeren na het invoeren van een code.

Raadpleeg de Console API en Command Line API voor een lijst met beschikbare methoden en functies.

Tips

Hoewel het consolepaneel relatief eenvoudig is, zijn er een paar kleine tips om uw workflow te verbeteren:

  • Gebruik Shift-Enter voor een nieuwe regel-hiermee kunt u code met meerdere regels schrijven.
  • uitvoeren toetsen (venster) om globale variabelen op de huidige pagina te detecteren.
  • Gebruik de $ _ helper om het laatste resultaat van een vorig commando op te halen.

Misschien vindt u het consolepaneel een goede kandidaat om snel met JavaScript te experimenteren om te ontdekken wat de uitvoer van bepaalde uitdrukkingen is. Wanneer u echter complexere JavaScript-code gaat schrijven, kunt u gemakkelijk tegen beperkingen aanlopen:

  • Gebrek aan syntax highlighting kan de leesbaarheid verminderen.
  • Het inspringen moet handmatig worden gedaan met spaties.
  • Ontbrekende functies zijn meestal aanwezig in code-editors.

Het consolepaneel is niet bedoeld als vervanging van een codebewerker of zelfs als alternatief. Hier is een lijst van enkele gevallen waarin het consolepaneel nuttig kan zijn:

  • gebruik van de autocomplete-functie terwille van het ontdekken van eigendommen
  • het verschil tussen JavaScript's achterhalen () aanroepen en van toepassing zijn() methoden door ze inline uit te voeren en de resultaten te observeren

Bronnenpaneel

Het hoofdvenster van het bronnenpaneel bevat een code-editor met basisbewerkingsmogelijkheden.

CodeMirror

De editor zelf wordt mogelijk gemaakt door CodeMirror, een krachtige teksteditor die is geïmplementeerd met JavaScript. DevTools importeert de CodeMirror-editor in zijn eigen codebase en schakelt selectief verschillende functies in die op zijn beurt beschikbaar worden gemaakt voor elke Chrome-gebruiker.

Bij het bewerken van JavaScript (naast andere ondersteunde talen) bevat de Bronnenvenster-editor een aantal hulpprogramma's zoals:

  • Suggesties voor automatisch aanvullen: Ontvang suggesties voor het woord dat u misschien probeert te typen. Deze zijn gebaseerd op bestaande geschreven eigenschappen binnen hetzelfde bestand. Bijvoorbeeld, document wordt niet voorgesteld na het typen docu tenzij er al minstens één woord voorkomt document in hetzelfde bestand.
  • Zoeken en vervangen: Klik op om het zoekvak te openen Command-F. Overeenkomende resultaten worden in real time in de code beschreven. Controle van de Vervangen checkbox biedt zoek- en vervangmogelijkheden.
  • Toetsenbord sneltoetsen: Er zijn verschillende snelkoppelingen, vergelijkbaar met die in code-editors zoals Sublime Text. Gebruik bijvoorbeeld Commando-/ om een ​​opmerking te schakelen, Command-D om het volgende woordoccurrence van het huidig ​​geselecteerde woord te selecteren, en nog veel meer zoals gedocumenteerd op de officiële snelkoppelingspagina van Chrome-ontwikkelaarstools.

Live JavaScript bewerken

De functie, beter bekend als Live Edit, biedt u de mogelijkheid om de JavaScript-code van een pagina te bewerken via DevTools en de wijzigingen direct op de pagina toe te passen zonder een paginavernieuwing. Er is geen specifieke gebruikersinterface om dit te gebruiken; je herschrijft eenvoudigweg een deel van JavaScript-code en drukt op Command-S om het op te slaan.

Hoe dit achter de schermen werkt, wordt hieronder uitgelegd, maar denk eerst aan de volgende voorwaarden (deze zijn onafhankelijk van Live Edit):

  1. Een pagina die gebruikt script.js laadt in Chrome via een webpagina.
  2. script.js wordt geparseerd, geëvalueerd en gecompileerd in machinecode via de V8 JavaScript-engine.

Dit is wat er achter de schermen van de Live Edit-functie gebeurt, rekening houdend met de vorige punten:

  1. U opent script.js in de DevTools-codebewerker. Stel dat er een knop op de huidige webpagina is. Bij klikken op de knop voert een gebeurtenisklantlistener een anonieme functie uit.
  2. U wijzigt de anonieme functie om een ​​toe te voegen console.log verklaring en sla het bestand op.
  3. De onbewerkte tekstinhoud van script.js worden teruggejecteerd in de V8-motor voor verwerking.
  4. Er worden vergelijkingen gemaakt tussen het nieuwe script.js en de oude. Verwijderingen, toevoegingen en wijzigingen worden opgeslagen.
  5. V8 compileert de gewijzigde JavaScript en patches script.js met de gecompileerde wijzigingen.

Live Edit werkt het beste met kleine wijzigingen in plaats van volledige JavaScript-bestanden voor uw app te maken. Foutopsporingsscenario's werken goed met Live Edit.

workspaces

Workspaces is geen essentieel onderdeel van JavaScript-foutopsporing via de DevTools. Afhankelijk van uw vereisten kan dit uw werkstroom voor foutopsporing echter versnellen. Werkruimten is een functie van de DevTools waarmee u de inhoud van een map op het bestandssysteem kunt wijzigen door codewijzigingen aan te brengen in de DevTools.

Als u door een project bladert dat lokaal wordt bediend via een webserver, zoals op http: // localhost: 3000 / en het project bestaat in uw bestandssysteem op ~ / Ontwikkeling / project, u kunt bijvoorbeeld DevTools leren over de toewijzing tussen de twee en de Live Edit-mogelijkheden gebruiken met de mogelijkheid om schijven op te slaan. Workspaces maakt de volgende workflow mogelijk:

  1. Nadat u uw DevTools opdracht hebt gegeven over de toewijzing tussen de pagina die u bekijkt en de bron ervan op uw bestandssysteem, kunt u de broncode bekijken in de Bronnenpaneel.
  2. U ondervindt een JavaScript-fout, dus tijdens het debuggen maakt u een wijziging in de Bronnenpaneel.
  3. U slaat uw wijziging op met behulp van Command-S.

In stap 3 overschrijft het opslaan het oorspronkelijke bronbestand.

Bronkaarten

Bronkaarten lossen een veel voorkomend probleem op bij het omgaan met broncode die wordt verwerkt of gecompileerd in iets anders. Voorbeelden zijn:

  • JavaScript-code die wordt verkleind en samengevoegd als onderdeel van een buildsysteem
  • Ecmascript 6-code die wordt omgezet in ES5-code, zodat deze compatibel is met alle moderne browsers
  • CoffeeScript-code die wordt gecompileerd in JavaScript

Het probleem is als volgt: bij het debuggen van een verwerkte versie van de code, kan het moeilijk zijn om te begrijpen hoe uw originele broncode in kaart komt op wat u bekijkt tijdens het foutopsporing. Als u een foutmelding krijgt in de DevTools-console voor een productiewebsite, zult u doorgaans uiteindelijk een onvoltooide en aaneengesloten JavaScript-code moeten oplossen, die weinig lijkt op de bronbestanden die u auteur.

Een bronkaart is een gegenereerd bestand dat is geproduceerd als onderdeel van een compilatieproces dat beschikbaar is voor de eerder genoemde gebruikscasussen. DevTools kan een Source Map-bestand lezen om te begrijpen hoe een samengesteld bestand wordt toegewezen aan het oorspronkelijke bestand.

De twee codefragmenten (Source File-app.js en Transpiled file-compiled.js) tonen de foutopsporingscode van Source Map.

Voorbeeld 1. Bronbestand-app.js

for (var element van [1, 2, 3]) console.log (element); 

Merk op dat de app.js bronbestand gebruikt een Ecmascript 6-compatibele functie die bekend staat als de array-iterator.

Voorbeeld 2. Transpiled File-compiled.js

"gebruik strikt"; for (var $ __ 0 = [1, 2, 3] [Symbol.iterator] (), $ __ 1;! ($ __ 1 = $ __ 0.next ()). done;) var element = $ __ 1.waarde; console.log (element);  // // sourceMappingURL = app.js.map

Let daar op compiled.js wordt verwezen door een scripttag op een HTML-pagina, samen met de Traceur-runtime en wordt uiteindelijk geopend in een browser.

Zelfs de gecompileerde JavaScript heeft de console.log verklaring op regel 6. DevTools kan precies laten zien waar deconsole.log verklaring bestaat in het originele bronbestand (foutopsporing bronkaart), die op regel 2 staat. Breekpunten werken zoals verwacht. Achter de schermen wordt het gecompileerde JavaScript geëvalueerd en uitgevoerd, maar DevTools presenteert een ander activum in plaats van de browser-geëvalueerde versie.

snippets

De functie Snippets van DevTools biedt een snelle manier om diverse JavaScript-code te schrijven en uit te voeren. Alle JavaScript uitgevoerd via fragmenten wordt uitgevoerd binnen de context van de huidige pagina. Het uitvoeren van een DevTools-fragment is vergelijkbaar met het uitvoeren van een bladwijzer op een pagina. Misschien vindt u het beter om bepaalde JavaScript-code te schrijven in Snippets dan in het consolepaneel om redenen die te maken hebben met een betere codebewerkingsomgeving. Uw fragmenten worden opgeslagen in de lokale opslag van de DevTools.

Om fragmenten te gebruiken:

  1. Zorg ervoor dat de linkerzijbalk zichtbaar is binnen de Bronnenpaneel en selecteer de snippets tab in de zijbalk (naast de tabbladen "Bronnen" en "Inhoudsscripts").
  2. Klik met de rechtermuisknop in de linkerzijbalk en selecteer nieuwe om een ​​nieuw fragment te maken.
  3. Geef je nieuwe fragment een naam.
  4. Schrijven console.log ( 'Hello'); in de codebewerker.
  5. druk op Command-Enter en merk de resulterende uitvoer op in het consolepaneel.

Je kunt een aantal reeds geschreven fragmenten vinden in deze DevTools Snippets-repository.

Dat is het voor deel 1 van een moderne foutopsporingservaring. In deel 2 bekijken we enkele functies voor foutopsporing en een paar uitbreidingen die hierbij kunnen helpen.