Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

藏色散人
Lepaskan: 2023-04-11 15:30:28
ke hadapan
2235 orang telah melayarinya
Artikel ini membawakan anda pengetahuan yang berkaitan tentang H5 terutamanya berkongsi dengan anda pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat.

Latar Belakang

Pada bulan Mac, kami akan menguruskan pelancaran segera projek H5 dalam talian yang penting Artikel ini secara beransur-ansur akan memperkenalkan cara meningkatkan kadar pelancaran 1.5 saat melalui pengoptimuman halaman H5.

Mengapa kita perlu mengoptimumkan?

  • Dari perspektif pengguna, pengoptimuman boleh membuat halaman dimuatkan dengan lebih pantas, bertindak balas dengan lebih pantas kepada operasi pengguna dan memberikan pengalaman pengguna yang lebih baik. Ia adalah sangat penting untuk meningkatkan pengalaman pengguna dan mengurangkan kadar pecah pengguna. Antaranya, laporan Global Web Performance Matters untuk e-dagang juga menerangkan secara khusus kepentingan pengoptimuman.
  • Dari perspektif perusahaan, pengoptimuman boleh mengurangkan bilangan permintaan halaman atau mengurangkan lebar jalur yang diduduki oleh permintaan, yang boleh menjimatkan kos sumber yang banyak dan akhirnya meningkatkan penukaran hasil.

Matlamat pengoptimuman

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

Seperti yang dapat dilihat daripada gambar di atas, sesetengah nama domain mungkin lebih rendah daripada 90%, dan yang tertinggi adalah tidak mencapai 96% , masih terdapat jurang tertentu daripada matlamat yang ditetapkan iaitu 98%.

Analisis Prestasi H5

Alat Analisis

Paparan web memuatkan H5

Biasanya, ia dibahagikan kepada peringkat berikut:

  1. Pengamatan paparan web.
  2. Tiba di halaman baharu, disambungkan ke rangkaian, memuat turun html, css, js daripada pelayan dan halaman itu mempunyai skrin putih.
  3. Bingkai asas halaman muncul, js meminta data halaman dan halaman berada dalam keadaan pemuatan.
  4. Data yang diperlukan muncul, pemaparan keseluruhan halaman selesai dan pengguna boleh berinteraksi. Tonton proses permulaan H5 secara visual daripada grafik: Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

Cara memendekkan masa proses ini telah menjadi kunci untuk mengoptimumkan prestasi H5. Seterusnya, mari kita lihat secara terperinci pada titik pengoptimuman untuk diperhatikan pada setiap peringkat.

Pelan pengoptimuman

Mulakan daripada aspek berikut:

  • Memuatkan pengoptimuman strategi
  • Tambah skrin rangka
  • Pengoptimuman permintaan sumber (sumber statik, gambar dan webp, memuatkan gambar yang malas, memuatkan komponen atas permintaan)
  • Pengoptimuman sumber pembungkusan
  • CDN & cache

Kemudian kami akan analisa setiap satu

Memuatkan pengoptimuman strategi

Lihat gambar dahulu:

developers.google.com/web/fundame…)Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat Daripada ini Apa yang dapat kita lihat dalam gambar boleh diringkaskan secara kasar sebagai empat perkara berikut:

  • Situasi lalai: Penghuraian HTML, kemudian memuatkan JS, pada masa ini penghuraian HTML terganggu, kemudian JS dilaksanakan , dan akhirnya pelaksanaan JS selesai dan Sambung semula penghuraian HTML.
  • Dalam kes penangguhan: HTML dan JS berjalan seiring, dan JS dilaksanakan terakhir (skrip js dilaksanakan selepas semua elemen dimuatkan, dan dilaksanakan dalam susunan yang diisytiharkan oleh skrip js, tetapi ia tidak akan dilaksanakan sehingga semua dokumen dom dihuraikan) dilaksanakan).
  • kes async: HTML dan JS berjalan seiring, dan pelaksanaan JS mungkin diselesaikan sebelum penghuraian HTML (skrip js dilaksanakan di luar susunan, tidak kira apa perintah yang anda isytiharkan, asalkan tertentu skrip js dimuatkan laksanakan serta-merta).
  • kes modul: serupa dengan kes tangguh, kecuali berbilang fail JS akan dimuatkan semasa proses pengekstrakan (mengisytiharkan atribut acript tag type="module" untuk menerima sintaks import dan eksport modul es6, memuatkan juga Sama seperti menangguhkan, kecuali berbilang fail JS boleh dimuatkan).

Contoh praktikal dalam projek:

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

Pramuat

praambil dan pramuat

pramuat ialah standard web baharu yang memuatkan sumber yang anda tentukan pada awal kitaran hayat halaman, sambil memastikannya sebelum mekanisme pemaparan utama penyemak imbas bermula.

Penggunaan khusus adalah seperti berikut:

    <scirpt></scirpt>
    
    <scirpt></scirpt>复制代码
Salin selepas log masuk

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

Nota: pramuat diletakkan di sebelah tajuk untuk menjadikannya yang paling awal campur tangan .

prefetch 是提示浏览器,用户在下次导航时可能会使用的资源(HTML,JS,CSS或者图片等),因此浏览器为了提升性能可以提前加载、缓存资源。prefetch 的加载优先级相对较低,浏览器在空闲的时候才会在后台加载。用法与 preload 类似,将 rel 的值替换成 prefetch 即可。

preload 是告诉浏览器页面必定需要的资源,浏览器一定会加载这些资源,而 prefetch 是告诉浏览器页面可能需要的资源,浏览器不一定会加载这些资源。所以建议:对于当前页面很有必要的资源使用 preload,对于可能在将来的页面中使用的资源使用 prefetch。

注意:用 preload 和 prefetch 情况下,如果资源不能被缓存,那么都有可能浪费一部分带宽,请慎用。非首页的资源建议不用 preload,prefetch 作为加载下一屏数据来用。

dns-prefetch 和 preconnect

dns-prefetch

DNS 请求需要的带宽非常小,但延迟较高,这点特别是在手机网络上比较明显。预读取 DNS 能让延迟明显减少一些(尤其是移动网络下)。为了帮助浏览器对某些域名进行预解析,你可以在页面的html标签中添加 dns-prefetch 告诉浏览器对指定域名预解析。

dns-prefetch 是一项使浏览器主动去执行域名解析的功能。dns-prefetch 应该尽量的放在网页的前面,推荐放在后面。具体使用方法如下:

<link>复制代码
Salin selepas log masuk
Salin selepas log masuk

洗车项目中有体现:

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

注意:dns-prefetch需慎用,推荐首屏加载资源添加DNS Prefetch

preconnect

和 DNS prefetch 类似,preconnect 不仅会解析 DNS,还会建立 TCP 握手连接和 TLS 协议(如果是https的话)。用法如下:

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saatpreconnect 允许浏览器在 HTTP 请求实际发送到服务器之前建立早期连接。可以预先启动 DNS 查找、TCP 握手和 TLS 协商等连接,从而消除这些连接的往返延迟并为用户节省时间。

<link>复制代码
Salin selepas log masuk
Salin selepas log masuk

骨架屏

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat从图上可以看出有白屏情况,FCP 时间超过了 1秒多,解决下来就用了骨架屏来解决白屏情况 并提升 FCP。

骨架屏就是在页面资源尚未加载完成以及渲染尚未完成时,需要先给用户的展示页面大致结构。直到资源加载完成以及渲染完成后,使用渲染的页面。骨架屏处理方案也很多,常用方案有以下几种:

  • 首屏:可以在index.html模版中手写骨架屏相关代码。
  • 其他页面:可以利用UI提供SVG图
  • 作为SPA中路由切换的loading:需自己编写骨架屏,推荐两个成熟方便定制的svg组件去定制骨架屏-   react-content-loadervue-content-loader
  • 骨架图渲染前不要出现任何网络请求,在此之前 HTML 内容不要超过 4KB。

我这里采用了固定的骨架屏SVG打包自动注入到模板方式。并产出了基于vite 的自动化注入骨架屏和无阻塞缓存资源文件@auto/vite-plugin-cdn私有插件。

举个?:

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saatFokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

Pengoptimuman permintaan sumber

Mampatan imej dan webp

imej ialah kawasan yang perlu ditumpukan semasa mengoptimumkan prestasi tapak web. Kenapa awak cakap macam tu? Mari lihat gambar: Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat Secara amnya, imej potong yang disediakan oleh UI adalah imej tidak dimampatkan, jadi semasa proses pembangunan, kita mesti memampatkannya semula. Jika imej yang dimampatkan masih lebih besar daripada 500KB, pertimbangkan untuk membahagikan imej kepada beberapa bahagian. Pada masa ini, terdapat banyak alat pemampatan imej di pasaran, saya ingin mengesyorkan alat yang berguna (docsmall) kepada semua orang. Boleh batch compress semua jenis gambar.

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

Kelebihan WebP ialah ia mempunyai algoritma pemampatan data imej yang lebih baik, yang membawa kelebihan saiz imej yang lebih kecil apabila mata kasar tidak menyedari perbezaan kualiti imej; mempunyai kedua-dua mod mampatan lossless dan lossy, ketelusan Alpha dan ciri animasi, dan kesan penukaran pada JPEG dan PNG adalah agak cemerlang, stabil dan seragam. Sumber imej disediakan secara dalaman dan boleh dimuat naik ke Perkhidmatan pecutan hadapan atau Perkhidmatan sumber statik hadapanPustaka sumber dalaman akan menjana format webp secara automatik dan anda boleh menambah format= apabila memproses imej apabila membungkus projek webp sudah mencukupi parameter. Perbandingan sebelum dan selepas webp:

Daripada hasil perbandingan, saiz imej yang sama menggunakan webp dikurangkan sekurang-kurangnya 50%, dan semakin besar imej, semakin besar nisbah pengoptimuman . Saiz fail sangat dikurangkan dan masa pemuatan dipendekkan Dalam senario di mana terdapat sejumlah besar imej pada halaman yang besar, kelajuan pemaparan halaman dipertingkatkan. Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saatFokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saatCDN & Caching

Seperti yang dinyatakan di atas,

Perkhidmatan pecutan hadapan

atau Perkhidmatan sumber statik bahagian hadapan semua perkhidmatan dalaman menyepadukan fungsi CDN. Untuk keadaan tertentu, sila rujuk dokumentasi penggunaan. Aplikasi yang menggabungkan dua perkhidmatan di atas boleh menangani isu sumber dengan baik Pada masa ini, projek SPA baharu kami dikeluarkan kepada perkhidmatan pecutan bahagian hadapan. Seperti yang ditunjukkan dalam gambar:

Fail sumber secara automatik dicache

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saatCDN Terbongkar

Daripada gambar, gambar kiri tidak terkena cache, manakala kanan gambar mencecah cache Dalam banyak projek, kerana antara muka nama domain adalah sama dengan antara muka web, CDN tidak mendayakan caching. Kami akan menggunakan nama domain Path untuk mendayakan caching CDN.

Pengoptimuman sumber pembungkusan

Mengekstrak perpustakaan pihak ketiga

Biasanya, kod kebanyakan perpustakaan pihak ketiga tidak akan berubah tanpa peningkatan versi Pada masa ini, anda boleh Gunakan DllPlugin: Pakej perpustakaan pihak ketiga dengan kebolehgunaan semula yang tinggi bersama-sama, jadi anda tidak perlu membungkusnya semula jika anda tidak menaik taraf.

Kelebihan melakukan ini:

  • 提取的第三方库生成的资源版本号(资源的访问连接)不会变,提高了缓存的利用;
  • 避免打包出单个文件的大小太大,不利于加载;
  • 每次构建只重新打包业务代码,提高打包效率。

为了让前端页面性能更优, App WebView 中针对 ReactVueZepto 三大常用框架相关资源及 Polyfill 进行了预加载处理,所以我们把这些固定的资源调整为无阻塞的预加载地址。具体如何使用 App H5提供了 webpack的相关配置说明。

这里针对 vite 的配置做些说明:

import { defineConfig, loadEnv } from &#39;vite&#39;;
import react from &#39;@vitejs/plugin-react&#39;;
import legacy from &#39;@vitejs/plugin-legacy&#39;;
import createExternal from &#39;rollup-plugin-external-globals&#39;;
import cdn from &#39;@auto/vite-plugin-cdn&#39;; 
export default ({ mode }) => {
  process.env = { ...process.env, ...loadEnv(mode, process.cwd()) };
  const { VITE_USER_NODE_ENV = &#39;mock&#39; } = process.env;
  const plugins: Array<any> = [];
  const isProduction = process.env.NODE_ENV === &#39;production&#39;;
  if (isProduction) {
    // 设置预加载的 react 等包为 external
    plugins.push(
      createExternal({
        react: &#39;React&#39;,
        &#39;react-dom&#39;: &#39;ReactDOM&#39;,
        history: &#39;HistoryLibrary&#39;,
        &#39;react-router&#39;: &#39;ReactRouter&#39;,
        &#39;react-router-dom&#39;: &#39;ReactRouterDOM&#39;,
        immer: &#39;immer&#39;,
        axios: &#39;axios&#39;,
        &#39;js-cookie&#39;: &#39;Cookies&#39;,
      }),
    );
    plugins.push(
      cdn({
        enableModule: true,
      }),
    );
  }
  // https://vitejs.dev/config/
  return defineConfig({
      legacy({
        targets: [&#39;> 0.05%&#39;, &#39;not dead&#39;, &#39;not op_mini all&#39;],
      }),
      ...plugins,
    ],

    build: {
      rollupOptions: {
        external: [
          &#39;react&#39;,
          &#39;react-dom&#39;,
          &#39;history&#39;,
          &#39;react-router&#39;,
          &#39;react-router-dom&#39;,
          &#39;axios&#39;,
          &#39;js-cookie&#39;,
        ],
       
      },
    },
  });
};
Salin selepas log masuk

这里@auto/vite-plugin-cdn私有插件中提供正常骨架屏、预加载资源、处理资源加载顺序

示例:Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat

优化打包资源

我们来看一组图:

从图上看优化前后,文件数从295 个减少到 214 个, 大小从 1.63MB 减少到439.88KB,大小降了73.6460%

webpack 和 vite 配置

设置预警来检验打包文件

资源(asset)是从 webpack 生成的任何文件。此选项根据单个资源体积(单位: bytes),控制 webpack 何时生成 性能提示。 用法:

//  webpack 设置单个静态资源文件的大小最大超过300KB则会给出警告
module.exports = {
  //...
  performance: {
    maxAssetSize: 1024 * 300 
  }
};
Salin selepas log masuk
// vite 设置
build: {
      chunkSizeWarningLimit: 300 // 块大小警告的限制(以 kbs 为单位)默认 500
    }
Salin selepas log masuk

将打包后的静态资源控制在 300KB 以内,最终通过 Gzip 压缩后,基本都在 100KB 以内。其他的优化包括提取第三方库、移除调试和无用代码、Tree Shaking 等。

总结

经过以上的一系列的优化实施,我们来看一下优化前后数据的对比:Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat从2月底开始实施优化,上图可以很明显看出数据的变化,秒开率虽然已经做到了95%以上,达到 98%的只有个别项目,还需要在迭代过程中关注性能以及持续的优化,这里也感谢为H5页面秒开做出贡献的同学。如有什么问题和想法欢迎留言区评论交流。

如果你读完了也不妨点个赞哟,万分感谢!

Atas ialah kandungan terperinci Fokus pada pengoptimuman dan amalan pembukaan halaman H5 dalam beberapa saat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.im
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