Rumah >hujung hadapan web >tutorial js >Muatkan Imej Lebih Pantas dalam Laravel dan JavaScript

Muatkan Imej Lebih Pantas dalam Laravel dan JavaScript

王林
王林asal
2024-09-04 07:01:36757semak imbas

Load Images Faster in Laravel and JavaScript

Dalam dunia pembangunan web, kelajuan imej dimuatkan di tapak web anda boleh menjadikan atau memecahkan pengalaman pengguna. Imej yang dimuat perlahan boleh membawa kepada kadar lantunan yang lebih tinggi, penglibatan yang lebih rendah, dan akhirnya, kesan negatif pada SEO. Jika anda menggunakan Laravel dan JavaScript, terdapat beberapa strategi yang boleh anda laksanakan untuk mengoptimumkan pemuatan imej dan memastikan aplikasi web anda menunjukkan prestasi terbaik. Dalam catatan blog ini, kami akan meneroka pelbagai teknik untuk memuatkan imej dengan lebih pantas menggunakan Laravel dan JavaScript.

1. Optimumkan Fail Imej Sebelum Memuat naik

Sebelum menyelami pengoptimuman peringkat kod, adalah penting untuk bermula dengan imej itu sendiri. Fail imej yang besar adalah salah satu sebab yang paling biasa untuk memuatkan halaman yang perlahan. Berikut ialah beberapa petua untuk mengoptimumkan imej sebelum memuat naiknya:

  • Mampat Imej: Gunakan alatan seperti TinyPNG, JPEG-Optimizer atau ImageOptim untuk memampatkan imej anda tanpa kehilangan kualiti.
  • Pilih Format yang Tepat: Gunakan JPEG untuk gambar dan PNG untuk imej dengan ketelusan. SVG bagus untuk ikon dan grafik ringkas.
  • Ubah Saiz Imej: Pastikan imej tidak lebih besar daripada yang diperlukan. Menyajikan imej lebar 2000px apabila hanya 500px diperlukan membuang lebar jalur.

2. Gunakan Caching dan Manipulasi Imej Laravel

Laravel disertakan dengan alatan berkuasa yang boleh membantu anda mengurus dan mengoptimumkan imej dengan cekap. Pakej Imej Intervensi amat berguna untuk tujuan ini.

  • Caching Imej: Anda boleh cache imej pada bahagian pelayan untuk mengurangkan masa pemuatan untuk permintaan seterusnya. Ini amat berguna untuk imej yang dijana atau diubah saiznya dengan cepat.
use Intervention\Image\Facades\Image;
use Illuminate\Support\Facades\Cache;

public function show($id)
{
    $image = Cache::remember("image_$id", 60, function() use ($id) {
        return Image::make(storage_path("app/public/images/$id.jpg"))->resize(800, 600)->encode('jpg');
    });

    return response($image)->header('Content-Type', 'image/jpeg');
}
  • Manipulasi Imej Semerta: Dengan Imej Intervensi, anda boleh mengubah saiz, memangkas dan menggunakan penapis pada imej secara dinamik, mengurangkan keperluan untuk menyimpan berbilang versi imej yang sama.
$image = Image::make('public/foo.jpg')->resize(300, 200);
return $image->response('jpg');

3. Manfaatkan Lazy Loading dalam JavaScript

Pemuatan malas menangguhkan pemuatan imej sehingga ia hampir memasuki ruang pandang, yang boleh mengurangkan masa pemuatan awal halaman secara drastik.

  • Pemuatan Malas Asli: HTML5 kini menyokong pemuatan malas secara asli dengan atribut pemuatan.
<img src="image.jpg" loading="lazy" alt="Lazy Loaded Image">
  • Perpustakaan JavaScript: Jika anda memerlukan lebih kawalan, pertimbangkan untuk menggunakan perpustakaan JavaScript seperti lazysizes.
document.addEventListener("DOMContentLoaded", function() {
    let lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
    let active = false;

    const lazyLoad = function() {
        if (active === false) {
            active = true;

            setTimeout(function() {
                lazyImages.forEach(function(lazyImage) {
                    if ((lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0) && getComputedStyle(lazyImage).display !== "none") {
                        lazyImage.src = lazyImage.dataset.src;
                        lazyImage.classList.remove("lazy");

                        lazyImages = lazyImages.filter(function(image) {
                            return image !== lazyImage;
                        });

                        if (lazyImages.length === 0) {
                            document.removeEventListener("scroll", lazyLoad);
                            window.removeEventListener("resize", lazyLoad);
                            window.removeEventListener("orientationchange", lazyLoad);
                        }
                    }
                });

                active = false;
            }, 200);
        }
    };

    document.addEventListener("scroll", lazyLoad);
    window.addEventListener("resize", lazyLoad);
    window.addEventListener("orientationchange", lazyLoad);
});

4. Gunakan Rangkaian Penghantaran Kandungan (CDN)

CDN mengedarkan imej anda merentas berbilang pelayan di seluruh dunia, jadi pengguna boleh memuat turunnya dari pelayan yang paling hampir dengan lokasi mereka. Ini mengurangkan kependaman dan mempercepatkan pemuatan imej.

  • Integrasi CDN dalam Laravel: Laravel menjadikannya mudah untuk disepadukan dengan CDN. Anda boleh menyimpan imej anda dalam storan awan seperti AWS S3 atau DigitalOcean Spaces dan menyampaikannya melalui CDN.
Storage::disk('s3')->put('path/to/image.jpg', $imageContent);

$cdnUrl = Storage::disk('s3')->url('path/to/image.jpg');

5. Laksanakan Imej WebP

WebP ialah format imej moden yang menyediakan pemampatan lossless dan lossy yang unggul untuk imej di web. Dengan menyiarkan imej dalam format WebP, anda boleh mengurangkan saiz fail dengan ketara tanpa mengorbankan kualiti.

  • Penukaran WebP Automatik: Alat seperti spatie/laravel-image-optimizer secara automatik boleh menukar imej kepada WebP semasa proses muat naik.
use Spatie\Image\Image;
use Spatie\Image\Manipulations;

Image::load('image.jpg')
    ->format(Manipulations::FORMAT_WEBP)
    ->save('image.webp');
  • Mundur untuk Penyemak Imbas Tidak Disokong: Tidak semua penyemak imbas menyokong WebP. Gunakan sandaran JavaScript atau logik sisi pelayan untuk menyampaikan versi JPEG/PNG kepada penyemak imbas yang tidak menyokong WebP.
<picture>
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="Fallback Image">
</picture>

6. Tangguh Imej Luar Skrin dalam JavaScript

Dengan menangguhkan imej luar skrin, anda memastikan bahawa hanya imej yang kelihatan serta-merta dimuatkan dahulu, manakala yang lain dimuatkan kemudian.

document.addEventListener('DOMContentLoaded', function() {
    let lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));

    function isInViewport(el) {
        const rect = el.getBoundingClientRect();
        return (
            rect.top >= 0 &&
            rect.left >= 0 &&
            rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
            rect.right <= (window.innerWidth || document.documentElement.clientWidth)
        );
    }

    function deferImageLoading() {
        lazyImages.forEach(image => {
            if (isInViewport(image)) {
                image.src = image.dataset.src;
                image.classList.remove('lazy');
            }
        });
    }

    window.addEventListener('scroll', deferImageLoading);
    window.addEventListener('resize', deferImageLoading);
    window.addEventListener('load', deferImageLoading);
});

Mengoptimumkan pemuatan imej dalam projek Laravel dan JavaScript anda adalah penting untuk menyampaikan pengalaman pengguna yang pantas dan responsif. Dengan memampatkan imej, memanfaatkan pemuatan malas, menggunakan CDN, melaksanakan format WebP dan mengoptimumkan fail CSS dan JS anda, anda boleh meningkatkan masa muat imej pada tapak web anda dengan ketara. Ingat, matlamatnya adalah untuk mengimbangi kualiti imej dengan prestasi untuk mencipta pengalaman yang lancar untuk pengguna anda.

Mula laksanakan strategi ini hari ini dan lihat perbezaan dalam prestasi tapak web anda!

Nikmati!

Atas ialah kandungan terperinci Muatkan Imej Lebih Pantas dalam Laravel dan JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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
Artikel sebelumnya:hari Miva: Hari ke-15Artikel seterusnya:hari Miva: Hari ke-15