Rumah > tajuk utama > Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

青灯夜游
Lepaskan: 2022-04-29 11:10:36
ke hadapan
4383 orang telah melayarinya

Bagaimana untuk mengoptimumkan prestasi projek Vue? Artikel berikut akan berkongsi dengan anda beberapa kaedah pengoptimuman prestasi yang pasti akan digunakan dalam projek vue saya harap ia akan membantu semua orang.

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

Sebutkan性能优化 Adakah anda masih ingat pengalaman temuduga yang terlintas di fikiran ramai orang? Bagaimanapun, pada pendapat saya, pengoptimuman prestasi akan sentiasa berada dalam medan bahagian hadapan 热度之王.

Projek yang saya uruskan baru-baru ini kebetulan telah meletakkan banyak usaha ke arah ini Saya ingin berkongsi sedikit pengalaman, berharap ia dapat membantu semua orang!

Piawaian pengoptimuman prestasi


Memandangkan kita bercakap tentang pengoptimuman prestasi, mesti ada piawaian yang diiktiraf. Inilah yang telah kita dengar berkali-kali Lighthouse

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

Banyak unit mempunyai platform pemantauan prestasi mereka sendiri Kami hanya perlu memperkenalkan SDK yang sepadan, dan kemudian kewujudan halaman anda boleh dianalisis pada platform Berkenaan isu prestasi, semua orang belajar perkara yang menakjubkan!

Malah, kecuali untuk perniagaan yang menuntut yang memerlukan 特殊的定制, dalam kebanyakan kes, platform pengoptimuman prestasi unit kami sebenarnya menggunakan penyemak imbas tanpa kepala (Puppeteer) untuk menjalankan Lighthouse.

Setelah memahami prinsip platform pemantauan prestasi unit kami, kami boleh melakukan pengoptimuman prestasi yang disasarkan, iaitu, untuk Lighthousepengaturcaraan

Rumah Api

Lighthouse ialah alat automasi sumber terbuka yang dilancarkan oleh Google Chrome. Ia boleh mengumpulkan berbilang penunjuk prestasi halaman web moden, menganalisis prestasi aplikasi web dan menjana laporan, memberikan pembangun cara untuk mengoptimumkan prestasi .

Bercakap tentangLighthouseIa telah disepadukan dalam Google Chrome moden

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

Dia boleh menganalisis prestasi halaman kami melalui beberapa penunjuk

Rumah Api mengukur metrik prestasi berikut:

, tempatan mungkin perlu mencapai

70 mata差异, dalam talian Adalah mungkin untuk mencapai status lulus Jika terdapat keperluan untuk pengoptimuman prestasi, semua orang boleh mengendalikannya mengikut kesesuaian (tetapi saya rasa lulus sudah cukup. Lagipun, , warisan tidak boleh hilang, dan kita perlu berbelanja. lebih banyak masa. ciri dalam halaman anda Kesesakan prestasi biasa dan cadangan untuk pengoptimuman, seperti: 大学考试有曰:60分万岁,61分浪费

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

Jadi untuk cadangan pengoptimuman ini, kita perlu melakukan beberapa pengoptimuman biasa:

  • Kurangkan javascript yang tidak digunakan

  • Alihkan sumber penyekat pemaparan

  • Mampatan kualiti imej

  • Hadkan bilangan fon yang digunakan dan gunakan sesedikit variasi yang mungkin

  • Optimumkan laluan pemaparan kritikal: muatkan hanya sumber yang diperlukan yang diperlukan untuk pemaparan halaman semasa dan muatkan sumber kedua selepas pemaparan halaman selesai

Analisis pengoptimuman prestasi am


Kami tahu bahawa terdapat enam penunjuk prestasi dalam rumah api, dan antara enam penunjuk ini, LCP、 FCP、speed index, ketiga-tiga indeks ini amat penting, kerana secara umum Dalam kes ini, ketiga-tiga penunjuk ini akan menjejaskan skor TTI、TBT、CLS

, jadi apabila kami mengoptimumkan, kami perlu meningkatkan skor LCP, FCP dan speedIndex Selepas ujian, walaupun halaman kosong akan mempunyai masa Skor awal pada dasarnya adalah 0.8 saat

Nota: Perlu diingat bahawa semua ujian semasa kami adalah berdasarkan, 移动端 (sebab mengapa kami menggunakan terminal mudah alih adalah kerana PC Kuasa pengkomputeran yang kuat, beberapa kesesakan prestasi), dan halaman mesti mempunyai kandungan berikut untuk mendapatkan skor Kandungan mesti mengandungi satu atau lebih daripada

Jika tidak akan terdapat ralat berikut<p></p>

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

Seterusnya kita akan mulakan dengan tiga penunjuk LCP, FCP dan speedIndex<p></p>

FCP (First Contentful Paint)

Seperti namanya, ia adalah

, iaitu masa apabila kandungan pertama kali dilukis pada halaman, tetapi memandangkan halaman yang kami bangunkan sekarang adalah aplikasi spa, jadi permulaan pada peringkat rangka kerja mesti mempunyai 首次内容绘制 tertentu dengan mengambil perancah yang dibina oleh vue-cli sebagai contoh, apabila saya memulakan perancah kosong, bungkus dan muat naiknya. kepada CDN untuk penggunaan, FCP akan dinaikkan daripada 0.8s Sehingga 1.5 saat, dapat dilihat bahawa perbezaan vue bukan 性能损耗 dan ia juga akan mengalami kehilangan prestasi. (Belajar perkongsian video: 免费tutorial vuejs)

Sebelum mengoptimumkan kandungan halaman, kami mengisytiharkan tiga premis<p></p>
  • Masa untuk menambah baik FCP ialah sebenarnya Optimumkan

    Laluan Perenderan Kritikal

  • Jika ia adalah fail gaya (fail CSS), penyemak imbas mesti menghuraikannya sepenuhnya sebelum memaparkan halaman (itu sebabnya ia dikatakan CSS Render-blocking) <p></p>
  • Jika ia ialah fail skrip (fail JavaScript), penyemak imbas mesti: Berhenti menghuraikan, memuat turun skrip dan menjalankannya. Hanya selepas ini ia boleh meneruskan penghuraian, kerana skrip JavaScript boleh menukar kandungan halaman (terutamanya HTML). (Inilah sebab JavaScript menyekat penghuraian) <p></p>
Berdasarkan ujian kes penggunaan di atas, kami mendapati bahawa tidak kira bagaimana kami mengoptimumkan, kehilangan prestasi rangka kerja itu sendiri tidak boleh dipadamkan perkara yang boleh kita lakukan Tujuannya adalah untuk membolehkan rangka kerja melakukan pemulaan lebih awal dan memulakan kandungan yang kurang Kaedah pengoptimuman yang boleh dilakukan adalah seperti berikut: <p></p>
  • Semua fail js yang tidak digunakan. untuk permulaan dimuatkan secara tidak segerak Maksudnya, tambah

    atau defer, dan beberapa pemalam pihak ketiga yang memerlukan CDN perlu diletakkan di bahagian bawah halaman (kerana diletakkan di bahagian atas, penghuraiannya. akan menghalang penghuraian html, sekali gus menjejaskan muat turun css dan fail lain This Also one of asnyc) 雅虎军规

  • js membongkar fail, mengambil vue-cli sebagai contoh, secara amnya. kita boleh melakukan pemisahan kod melalui splitChunks konfigurasi cli untuk memecah beberapa Pek CDN pihak ketiga, atau bongkarkannya. Jika terdapat laluan, buka pek laluan untuk memastikan setiap laluan hanya

    加载当前路由对应的js代码

  • Optimumkan saiz fail untuk mengurangkan saiz pakej fon, fail css dan fail js (daripada tentu Perancah ini telah dilakukan secara lalai) <p></p>
  • Optimumkan struktur projek Permulaan setiap komponen adalah 性能损耗 atas dasar memastikan 可维护性, cuba kurangkan bilangan komponen yang dimulakan yang dimuatkan

  • Pengoptimuman pada peringkat protokol rangkaian ini memerlukan pelayan untuk bekerjasama dengan bahagian hadapan yang tulen dan tidak boleh dicapai Pada era kelaziman

    hari ini, unit mereka sendiri secara amnya membolehkan kaedah pengoptimuman ini dalam awan. pelayan secara lalai, seperti menghidupkan 云服务器, menggunakan gzip, dsb. cdn

Malah, teras untuk menambah baik FCP hanyalah dua konsep

dan 减少初始化视图内容 减少初始化下载资源大小

LCP (Largest Contentful Paint)

Seperti namanya, ia adalah

Bila hendak melaporkan LCP, kata pegawai itu ini 最大内容绘制

Untuk menangani perubahan yang berpotensi ini, penyemak imbas akan mengedarkan jenis

largest-contentful-paintPerformanceEntry sejurus selepas melukis bingkai pertama, yang digunakan untuk mengenal pasti elemen kandungan terbesar . Walau bagaimanapun, selepas memaparkan bingkai berikutnya, penyemak imbas menghantar satu lagi PerformanceEntry apabila elemen kandungan terbesar berubah.

Sebagai contoh, pada halaman web dengan teks dan imej pengepala, penyemak imbas mungkin pada mulanya hanya memaparkan bahagian teks dan sementara itu menghantar entri

yang atribut largest-contentful-paint biasanya merujuk kepada element atau <p></p>. Kemudian, setelah imej pertama selesai dimuatkan, penyemak imbas akan menghantar entri <h1></h1> kedua yang atribut largest-contentful-paintnya akan merujuk element . <img alt="Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!" >

Adalah penting untuk ambil perhatian bahawa elemen tidak dianggap sebagai elemen kandungan maksimum sehingga ia dipaparkan dan kelihatan kepada pengguna. Imej yang belum dimuatkan tidak dianggap "diberikan". Perkara yang sama berlaku untuk nod teks yang menggunakan fon web semasa

tempoh penyekatan fon. Dalam kes ini, elemen yang lebih kecil mungkin dilaporkan sebagai elemen kandungan terbesar, tetapi setelah elemen yang lebih besar selesai dipaparkan, ia akan dilaporkan melalui objek yang lain. PerformanceEntry

Malah, penjelasan dalam bahasa vernakular ialah dalam keadaan biasa,

akan melaporkan LCP图片、视频以及大量文本绘制完成后

Memahami perkara ini, kaedah pengoptimuman akan jelas, cuma cuba kurangkan saiz sumber ini . Selepas ujian, selepas mengurangkan saiz imej dan kandungan video yang dipaparkan pada skrin pertama, skor keseluruhan meningkat dengan ketara Beberapa kaedah pengoptimuman disediakan: <p></p>
  • Imej tempatan boleh dimampatkan dengan. sendiri menggunakan alat pemampatan dalam talian Disyorkan:

    https://tinypng.com/

  • Antara muka disertakan dengan gambar Secara amnya, unit mempunyai konfigurasi pemindahan parameter oss atau cdn yang sepadan untuk mengawal kualiti imej melalui alamat kaedah pemindahan parameter bar<p></p>
  • Malas memuatkan imej<p></p>

SpeedIndex (indeks kelajuan)

Menggunakan kemajuan Visual visual pemuatan halaman, mengira skor keseluruhan untuk kelajuan kandungan dilukis. Untuk melakukan ini, anda perlu terlebih dahulu dapat mengira bilangan bahagian yang "dilengkapkan" pada pelbagai titik masa semasa pemuatan halaman. Dalam WebPagetest, ini dilakukan dengan merakam video halaman yang dimuatkan dalam penyemak imbas dan menyemak setiap bingkai video (10 bingkai sesaat dalam ujian dengan penangkapan video didayakan, tetapi buat masa ini, anggap kita boleh Tugaskan). peratusan lengkap untuk setiap bingkai video (nombor yang dipaparkan di bawah setiap bingkai) Speed Index

Di atas adalah penjelasan rasmi kaedah pengiraan Sebenarnya, dalam istilah popular, indeks kelajuan yang dipanggil adalah ukuran bagaimana kandungan halaman dengan cepat diisi<p></p>

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

一图胜千言

Selepas ujian, ia adalah sama seperti kandungan LCP dan video mempunyai kesan yang besar pada SpeedIndex. Semua arah pengoptimuman adalah sama seperti sebelumnya Secara keseluruhannya, selagi masa LCP dan FCP dinaikkan, masa SpeedIndex akan dipertingkatkan dengan ketara <p></p> Walau bagaimanapun, perlu diingatkan bahawa kelajuan antara muka akan. juga menjejaskan masa SpeedIndex Disebabkan populariti AJAX hari ini, kebanyakan Data kami ditarik menggunakan antara muka. Jika kelajuan antara muka terlalu perlahan, ia akan menjejaskan pemaparan awal halaman anda dan menyebabkan masalah prestasi, oleh itu, semasa mengoptimumkan prestasi,

请求后端伙伴协助,也是性能优化的一个方案

Selesaikan masalah kesesakan prestasi <.>

Analisis di atas menyediakan beberapa kaedah pengoptimuman konvensional berdasarkan tiga penunjuk Antara kaedah pengoptimuman ini, beberapa daripadanya boleh disemak dan dioptimumkan dengan segera. saiz fon

  • Bekerjasama dengan pelayan untuk menggunakan mekanisme caching penyemak imbas Dayakan cdn, dayakan gzip, dsb.

  • Kurangkan proses rangkaian. protokol Penggunaan, kurangkan permintaan http, kurangkan pertanyaan dns, elakkan ubah hala

  • Optimumkan laluan pemaparan kritikal, muatkan js secara tak segerak, dsb.

  • Tetapi ada Adalah Tidak mudah bagi kami untuk menyelesaikan masalah kaedah pengoptimuman kerana ia disertakan dalam pakej Fail js ini mengandungi banyak logik Berikut adalah dua kaedah yang boleh membantu mengenal pasti di mana kesesakan prestasi berlaku:

Analisis kandungan pakej<p></p>

Dalam keadaan biasa, titik pengoptimuman yang tidak dapat kami nilai semuanya adalah selepas pembungkusan Kami tidak boleh menganalisis bahawa perkara itu bukan yang kami perlukan pada skrin pertama, jadi kami tidak boleh Untuk membuat pengoptimuman baharu dan menyelesaikan masalah semasa, pengeluar bundle utama juga mempunyai penyelesaian pakej analisis mereka sendiriAmbil vue-cli sebagai contoh

<p></p>Kita hanya perlu Perintah di atas disediakan dalam perancah, yang boleh dijana semasa pembungkusan Fail analisis keseluruhan pakej <p></p>
"report": "vue-cli-service build --report"
Salin selepas log masuk
<p></p> ditunjukkan dalam rajah di atas, fail js yang dibungkus boleh dianalisis. Apakah komponen yang disertakan? Dengan cara ini, kita boleh mengetahui fail mana yang tidak perlu dimuatkan secara serentak, atau menggunakan CDN untuk mengasingkannya secara individu melalui konfigurasi, untuk mengetahui masalah prestasi

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

Gunakan liputan kod chorme devtool <p></p>

Seperti yang ditunjukkan dalam rajah di bawah,

<p></p>Gunakan pemeriksaan liputan kod devtool untuk mengetahui js atau css yang mana kod fail belum digunakan. Digabungkan dengan analisis kandungan pakej, kita boleh meneka secara kasar di mana kesesakan prestasi dan melaksanakan pemprosesan khas yang sepadan

Kumpulkan kaedah pengoptimuman prestasi projek Vue ini dan anda akan dapat menggunakannya suatu hari nanti!

Pengoptimuman khas untuk vue<p></p>

Di atas ialah beberapa kaedah pengoptimuman biasa yang boleh anda temui di mana-mana sahaja. Saya baru sahaja menyatakan sebab asas untuk melakukan pengoptimuman rutin ini. Selepas anda dapat memahami sebab-sebab ini dengan lebih jelas,


Kemudian syarikat kami adalah vue, dan kami perlu mendapatkan cara vue 在性能瓶颈的时候能游刃有余,而不是为了面试死记硬背,一到用的时候就不灵

Picture Lazy memuatkan

Apa yang dipanggil memuatkan imej yang malas bermakna halaman itu hanya memaparkan imej dalam kawasan yang kelihatan semasa Ini mengurangkan bilangan imej lain yang dipaparkan dan boleh meningkatkan dan masa, dengan itu meningkatkan skor

SpeedIndexMemperkenalkan pemalam memuatkan malas imej dalam vue, pengesyoran pertama: vue-lazyloadLCP

https: //github. com/hilongjw/vue-lazyload

  • <p></p>Mudah untuk digunakan, kaya dengan fungsi

Tatal maya

Pada halaman yang mengandungi senarai panjang, pernahkah anda mendapati bahawa semakin banyak anda menatal ke bawah, semakin anda tersekat Pada masa ini, penatalan maya berguna? Prinsip asasnya ialah untuk hanya memaparkan beberapa keping data dalam kawasan yang boleh dilihat, tetapi mensimulasikan kesan gelongsor biasa Kerana setiap kali ia hanya memaparkan data dalam kawasan mainan, prestasinya akan bertambah baik apabila meluncur <. 🎜>Terdapat dua pemalam yang lebih mudah digunakan dalam vue:

<p></p>
vue-virtual-scroller: https://github.com/Akryum/vue-virtual - scroller<p></p>
  • vue-virtual-scroll-list: https://github.com/tangbc/vue-virtual-scroll-list<p></p>
  • Pada masa ini syarikat kami menggunakan vue-virtual-scroll-list Apabila menatal ke bawah, anda boleh menambah beberapa gesaan pemuatan di kawasan paging

Komponen berfungsi dalam vue

<. 🎜>

Dalam Vue, kita tahu bahawa inisialisasi komponen menggunakan prestasi adalah yang berbeza. Tetapi dengan komponen yang berfungsi, masalah ini mudah diselesaikan Kerana fungsi adalah komponen Seperti namanya, ia adalah fungsi secara terang-terangan, ia hanyalah

. Ia menghapuskan proses pemulaan komponen , yang menjimatkan banyak proses pemula<p></p><p></p>Bilakah anda harus menggunakan komponen berfungsi?

render函数开销Apabila komponen anda mempunyai. tiada logik perniagaan dan hanya memaparkan kandungan, Ini adalah apabila komponen berfungsi berguna

Gunakan v-show dan KeepAlive untuk menggunakan semula dom

<p></p>

我们知道v-show是通过display 控制dom的展示隐藏,他并不会删除dom 而我们在切换v-show的时候其实是减少了diff的对比,而KeepAlive 则是直接复用dom,连diff 的过程都没了,并且他们俩的合理使用还不会影响到初始化渲染。如此一来减少了js 的执行开销,但是值得注意的是,他并不能优化你初始化的性能,而是操作中的性能

分批渲染组件

在前面我们提到过SpeedIndex 的渐进渲染是提高SpeedIndex的关键,有了这个前提,我们就可以分批异步渲染组件。先看到内容,然后在渲染其他内容

举个例子:

<template>
    <div>
        {{ data1 }}
    </div>
    <div v-if="data1">
        {{ data2 }}
    </div>
</template>
<script>
import { ref } from &#39;vue&#39;
export default {
    setup() {
        let data1 = ref(&#39;&#39;)
        let data2 = ref(&#39;&#39;)
        // 假设 这是从后端取到的数据
        const data = {
            data1: &#39;这是渲染内容1&#39;,
            data2: &#39;这是渲染内容2&#39;
        }
        data1.value = data.data1
        //利用requestAnimationFrame 在空闲的时候当前渲染之后在渲染剩余内容
        requestIdleCallback(() => {
            data2.value = data.data2
        })
        return {
            data1,
            data2
        }
    },
}
</script>
Salin selepas log masuk

上述例子比较简单可能描述的不太贴切,在这里特此说明一下,当前方法适用于组件内容较多,每次render 时间过长,导致白屏时间过长,比如,一次拉取用户列表,那么分批渲染就非常合适,先展示一部分用户信息,最后直到慢慢将所有内容渲染完毕。如此对浏览器的SpeedIndex 也非常友好

最后


性能优化一直是一个很火的话题, 不管从面试以及工作中都非常重要,有了这些优化的点,你在写代码或者优化老项目时都能游刃有余,能提前考虑到其中的一些坑,并且规避。

但是大家需要明白的是,不要为了性能优化而性能优化,我们在要因地制宜,在不破坏项目可维护性的基础上去优化,千万不要你优化个项目性能是好了,但是大家都看不懂了,这就有点得不偿失了,还是那句话,60分万岁61份浪费,差不多得了,把经历留着去干更重要的事情!

原文地址:https://juejin.cn/post/7089241058508275725

作者:好学习吧丶

(学习视频分享:web前端开发编程入门

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan