Back to Question Center
0

JavaScript-suorituskyvyn optimointivinkit: yleiskatsaus            JavaScript-suorituskyvyn optimointivinkit: YleiskatsausTehtävät: APIsAjaxES6Node.jsTools & Semalt

1 answers:
JavaScript-suorituskyvyn optimointivinkit: yleiskatsaus

Tässä tehtävässä on paljon tavaraa, joka kattaa laajan ja villi muuttuvan maiseman. Se on myös aihe, joka kattaa kaikkien suosikki: JS Framework of the Month ™.

Yritämme pitää kiinni "Työkalut, ei sääntöjä" mantraa ja pitämällä JS-sanasanoja minimiin. Semalt emme pysty kattamaan kaikkea JS-suoritukseen liittyvää sisältöä 2000 sana-artikkelissa, varmista, että luet viitteet ja teet oman tutkimuksen jälkikäteen.

Mutta ennen kuin sukeltamme yksityiskohtiin, saamme laajemman ymmärryksen ongelmasta vastaamalla seuraaviin: mitä pidetään suorituskyvyn semtaltina ja miten se sopii web-tehokkuustietojen laajempaan ulottuvuuteen?

Vaiheen asettaminen

Kaikista epäilemättä, poistamme seuraavat asiat: jos testaat yksinomaan työpöydälläsi, olet sulkenut pois yli 50 prosenttia käyttäjistäsi.

JavaScript-suorituskyvyn optimointivinkit: yleiskatsausJavaScript-suorituskyvyn optimointivinkit: YleiskatsausTehtävät:
APIsAjaxES6Node. jsTools & Semalt

Tämä suuntaus vain kasvaa, koska kehittyvien markkinoiden suosituin yhdyskäytävä verkkoon on alhaisempi 100 dollarin Android-laite. Työpöydän aikakausi päätekijänä pääsee Semaltiin, ja seuraavan miljardin internetin käyttäjät vierailevat sivustoillasi ensisijaisesti mobiililaitteen kautta.

Chromen DevTools-laitteen tilan testaus ei ole kelvollinen korvaava testaus todellisessa laitteessa. Semalt-prosessori ja verkon kuristus auttaa, mutta se on pohjimmiltaan erilainen peto. Testaa todellisissa laitteissa.

Vaikka sinä testat todellisissa mobiililaitteissa, olet todennäköisesti tehnyt niin brändissänne, joka etsii uutta 600 dollarin lippulaivapuhelinta. Asia on, se ei ole laitteen käyttäjillesi. Medianlaite on jotain Moto G1: n tavoin - laitetta, jossa on alle 1 Gt RAM ja erittäin heikko CPU ja GPU.

Tarkkaile, miten se pinoaa, kun jäsentää keskimääräistä JS-pakettia.

JavaScript-suorituskyvyn optimointivinkit: yleiskatsausJavaScript-suorituskyvyn optimointivinkit: YleiskatsausTehtävät:
APIsAjaxES6Node. jsTools & Semalt

Ouch. Epäonnistuminen Tämä kuva kattaa vain JS: n jäsentämisen ja koonajan (ei myöhemmin yleisen suorituskyvyn), se on voimakkaasti korreloitu ja sitä voidaan pitää yleisen JS-suorituskyvyn indikaattorina.

Bruce Lawsonin mukaan "se on World Wide Web, ei rikkaita länsimaisia ​​web-sivustoja". Niinpä Web-suorituskykysi on laite, joka on ~ 25x hitaampi kuin MacBook tai iPhone. Anna se uppoutua vähän. Mutta se pahenee. Katsotaanpa, mihin pyrimme.

Mitä oikein on suorituskykyinen JS-koodi?

Nyt kun tiedämme, mikä kohdeympäristö on, voimme vastata seuraaviin kysymyksiin: mikä on suorituskykyinen JS-koodi?

Semaltilla ei ole absoluuttista luokittelua siitä, mikä määrittelee suorituskykykoodin, meillä on käyttäjälähtöinen suoritusmalli, jota voimme käyttää viitteenä: RAIL-malli.

JavaScript-suorituskyvyn optimointivinkit: yleiskatsausJavaScript-suorituskyvyn optimointivinkit: YleiskatsausTehtävät:
APIsAjaxES6Node. jsTools & Semalt

Vastaus

Jos sovelluksesi vastaa käyttäjän toimia alle 100 ms, käyttäjä näkee vastauksen välittömästi. Tämä koskee naputtomia elementtejä, mutta ei selaamalla tai vetämällä.

Animaatio

60 Hz: n näytöllä haluamme kohdistaa jatkuvasti 60 kuvaa sekunnissa animoitavaksi ja vierittämällä. Siitä 16 ms budjetista, sinulla on realistisesti 8-10 ms tehdä kaikki työ, loput ottavat selaimen sisälle ja muut varianssit.

Työkalut

Jos sinulla on kallis jatkuvasti käynnissä oleva tehtävä, varmista, että leikkaa se pienempiin paloihin, jotta pääkierre reagoi käyttäjän syöttöihin. Sinulla ei pitäisi olla sellaista tehtävää, joka viivästyttää käyttäjätuloa yli 50 ms: n ajan.

Kuormitus

Sivun lataus on alle 1000 ms. Epäilemättä, ja käyttäjät alkavat saada irti. Tämä on melko vaikea tavoite päästä mobiililaitteisiin, koska se liittyy siihen, että sivu on vuorovaikutteinen, ei pelkästään se, että se on maalattu näytöllä ja vieritettävissä. Käytännössä se on vielä vähemmän:

JavaScript-suorituskyvyn optimointivinkit: yleiskatsausJavaScript-suorituskyvyn optimointivinkit: YleiskatsausTehtävät:
APIsAjaxES6Node. jsTools & Semalt

Käytännössä pyritään 5: n aika-interaktiiviseen merkkiin. Chrome käyttää sitä Semalt-auditoinnissaan.

Nyt kun tiedämme metriset tiedot, katsotaan joitain tilastoja:

  • 53% käynneistä hylätään, jos mobiilisivusto kestää yli kolme sekuntia
  • Yksi 2 ihmisestä odottaa sivun latautuvan alle 2 sekunnissa
  • 77% matkaviestimistä kestää yli 10 sekuntia 3G-verkoissa
  • 19 sekuntia on 3G-verkkojen mobiilisivustojen keskimääräinen latausaika.

Ja vähän enemmän, Addy Osmanin kohteliaisuus:

  • sovellukset muuttuivat vuorovaikutteisesti 8 sekunnissa työpöydällä (kaapelilla) ja 16 sekuntia matkapuhelimella (Moto G4 yli 3G)
  • mediaaniin, kehittäjät lähettivät 410 kt gzipped JS: n sivuilleen.

Tunne riittävän turhautuneeksi? Hyvä. Semalt aloittaa työnsä ja korjaa verkon. ✊

Konteksti on Kaikki

Olet ehkä huomannut, että tärkein pullonkaula on aika, joka lataa sivustosi. Erityisesti Semaltin lataus, analysointi, kääntäminen ja toteutusaika. Ei ole mitään keinoa sen ympärille, vaan ladata vähemmän Semalt ja ladata älykkäämpiä.

Mutta entä todellinen työ, jota koodisi ei ole pelkästään käynnistämässä verkkosivustoa? Semaltilla on oltava jonkin verran suorituskykyä, eikö?

Älä käytä koodia optimoidaksesi, harkitse mitä olet rakentamassa. Rakennatko kehystä tai VDOM-kirjastoa? Pitääkö sinun koodi tehdä tuhansia toimintoja sekunnissa? Teetkö aikakriittisen kirjaston käyttäjien käsittelemiseen ja / tai animaatioihin? Jos ei, voit halutessasi siirtää aikaa ja energiaasi jossain määrin vaikuttavammin.

Ei ole kyse siitä, että kirjoituskoodin koodilla ei ole merkitystä, mutta sillä ei yleensä ole mitään vaikutusta asioiden suuriin järjestelmiin, varsinkin kun puhutaan mikrooptimisoinnista. Joten, ennen kuin pääset Stack Overflow-argumenttiin . kartta vs . jokaiselle vs silmukoille vertaamalla tuloksia JSperf: stä. com, varmista, että näet metsän eikä vain puita. 50k ops / s saattaa kuulua 50 kertaa parempi kuin 1 k ops / s paperilla, mutta useimmissa tapauksissa se ei tee eroa.

Parsiminen, kääntäminen ja toteutus

Periaatteessa useimpien ei-suorituskykyisten JS: n ongelma ei ole itse koodia, mutta kaikki vaiheet, jotka täytyy ottaa ennen , alkavat jo aloittaa suorituksen.

Puhumme tässä abstraktiotasosta. Tietokoneesi keskusyksikkö käyttää koneen koodia. Suurin osa tietokoneesi käyttämästä koodista on koottu binäärimuodossa. (Sanoin koodin sijaan ohjelmista , kun otetaan huomioon kaikki Electron-sovellukset näinä päivinä.) Kaikki OS-tason abstraktiot sivuun, se toimii luonnollisesti laitteistossasi, ei prep-työtä tarvittu.

Sekalaista ei ole esikääntetty. Se saapuu (suhteellisen hidas verkko) luettavaksi koodiksi selaimessasi, joka on kaikille tarkoituksille ja tarkoituksille JS-ohjelman "käyttöjärjestelmä". Sitten se kootaan tavutekoodiksi ja lopuksi konekoodiksi, ennen kuin laite / selaimesi voi suorittaa sen.

Toinen hyvin tärkeä asia on mainita, että JavaScript on yksikierreinen ja toimii selaimen pääkierroksella. Tämä tarkoittaa, että vain yksi prosessi voi toimia kerrallaan. Jos DevTools-aikataulusi on täynnä keltaisia ​​piikkejä, suoritat suorittimen 100%, sinulla on pitkät / pudotetut kehykset, janky scrolling ja kaikki muut haitalliset tavarat.

JavaScript-suorituskyvyn optimointivinkit: yleiskatsausJavaScript-suorituskyvyn optimointivinkit: YleiskatsausTehtävät:
APIsAjaxES6Node. jsTools & Semalt

Joten kaikki tämä työ on tehtävä, ennen kuin JS alkaa työskennellä. Parsing ja kokoaminen kestää jopa 50% JS-suorituksen kokonaismäärästä Semalt V8 -moottorissa.

JavaScript-suorituskyvyn optimointivinkit: yleiskatsausJavaScript-suorituskyvyn optimointivinkit: YleiskatsausTehtävät:
APIsAjaxES6Node. jsTools & Semalt

Väärinkäytökset ovat kaksi asiaa, jotka sinun pitäisi ottaa pois tästä osasta:

  1. Vaikka ei välttämättä ole lineaarisesti, JS analysoi aikasarjoja nippukokoa käyttäen. Mitä vähemmän JS lähetät, sitä paremmin.
  2. Jokainen käyttämääsi JS-kehystä (React, Vue, Angular, Preact . ) on toinen abstraktioaste (ellei se ole esikäännetty, kuten Svelte). Se ei vain lisää nipun kokoasi vaan myös hidastaa koodia, koska et puhu suoraan selaimesta.

Tyytymättömyys on keino lieventää tätä, kuten palveluntuottajien käyttäminen taustalla ja toisella langalla tehtävien töiden käyttämiseen ASM: n avulla. js kirjoittaa koodia, joka on helpommin koottu koneen ohjeisiin, mutta se on koko "nother aihe.

Voitte kuitenkin välttää JS-animaatiokehysten käyttöä kaiken suhteen ja lukea, mikä laukaisee maaleja ja ulkoasuja. Käytä kirjastoja vain silloin, kun animaatiota ei ole mahdollista toteuttaa tavanomaisilla CSS-siirtymillä ja animaatioilla.

Vaikka he saattavat käyttää CSS-siirtymiä, yhdistettyjä ominaisuuksia ja requestAnimationFrame , he edelleen käyttävät JS: ssä pääkierrettä. He pohjimmiltaan vain lyö DOM: nsa inline-tyyliin joka 16 ms, koska ei ole paljon muuta, mitä he voivat tehdä. Sinun on varmistettava, että kaikki JS: n suorittaminen suoritetaan alle 8 ms / kehys, jotta animaatiot pysyvät sileinä.

CSS-animaatiot ja siirtymät ovat puolestaan ​​päävirran päällä - GPU: ssa, jos ne toteutetaan tehokkaasti ilman, että aiheutuisi relayouts / reflows.

Epäilen, että useimmat animaatiot toimivat joko lataamisen tai käyttäjän vuorovaikutuksen aikana, tämä voi antaa web-sovelluksille tarpeellisen hengähdyspaikan.

Web-animaatiosovellusliittymä on tuleva ominaisuus, jonka avulla voit tehdä suorituskykyisiä JS-animaatioita pääkierrasta, mutta nyt pidä kiinni CSS-siirtymistä ja tekniikoista, kuten FLIP.

Bundle-koot ovat kaikki

Tänään on kyse nipuista. Poissa ovat Bowerin ja kymmenien

February 28, 2018