Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Meningkatkan kecekapan: Amalan pembangunan PHP asynchronous HTTP memuat turun berbilang fail

Meningkatkan kecekapan: Amalan pembangunan PHP asynchronous HTTP memuat turun berbilang fail

王林
王林asal
2023-09-11 13:04:411248semak imbas

提升效率:PHP 异步 HTTP 下载多个文件的开发实践

Dengan perkembangan pesat Internet, orang ramai mempunyai keperluan yang lebih tinggi dan lebih tinggi untuk kelajuan pemuatan dan pengalaman pengguna halaman web. Halaman web selalunya mengandungi sejumlah besar gambar, fail gaya, fail skrip, dsb., dan proses pemuatan fail ini akan mempengaruhi kelajuan pemuatan dan prestasi halaman web.

Bagi pembangun yang menggunakan bahasa PHP untuk pembangunan web, cara meningkatkan kecekapan pemuatan fail halaman web adalah soalan biasa. Dalam kaedah tradisional muat turun fail HTTP segerak, apabila halaman perlu memuatkan berbilang fail, satu fail perlu dimuat turun sebelum fail seterusnya boleh dimuat turun, menyebabkan masa memuatkan fail yang lama. Untuk meningkatkan kecekapan muat turun, kami boleh menggunakan mod tak segerak untuk memuat turun fail.

Muat turun HTTP tak segerak bermakna semasa memuat turun fail, kod dibenarkan untuk terus melakukan operasi lain tanpa menunggu muat turun fail selesai sebelum meneruskan. Bahasa PHP menyediakan pelbagai cara untuk melaksanakan muat turun HTTP tak segerak Artikel ini akan memperkenalkan kaedah pelaksanaan berdasarkan GuzzleHttp.

Pertama, anda perlu menggunakan Composer untuk memasang GuzzleHttp. Buka terminal atau baris arahan, masukkan direktori projek, dan laksanakan arahan berikut untuk memasang GuzzleHttp:

composer require guzzlehttp/guzzle

Selepas pemasangan selesai, masukkan fail Autoload GuzzleHttp ke dalam kod projek:

require 'vendor/autoload.php';

Seterusnya, kita boleh menggunakan yang berikut kod untuk mencapai muat turun tak segerak berbilang fail Fail:

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;
use PsrHttpMessageResponseInterface;
use GuzzleHttpExceptionRequestException;

$client = new Client();

$urls = [
    'http://example.com/image1.jpg',
    'http://example.com/image2.jpg',
    'http://example.com/image3.jpg'
];

$promises = [];

foreach ($urls as $url) {
    $request = new Request('GET', $url);
    $promise = $client->sendAsync($request)->then(
        function (ResponseInterface $response) use ($url) {
            $body = $response->getBody();
            // 处理下载后的文件保存或其他操作
            echo "Downloaded file from $url
";
        },
        function (RequestException $exception) use ($url) {
            echo "Failed to download file from $url: " . $exception->getMessage() . "
";
        }
    );

    $promises[] = $promise;
}

$results = GuzzleHttpPromiseunwrap($promises);

Kod di atas mula-mula mencipta objek Pelanggan GuzzleHttp, dan kemudian mentakrifkan tatasusunan URL bagi fail yang akan dimuat turun. Seterusnya, gelung foreach digunakan untuk melintasi tatasusunan URL, objek permintaan GuzzleHttp dicipta dan objek permintaan dihantar ke kaedah sendAsync. Kaedah sendAsync menghantar permintaan HTTP secara tidak segerak dan mengembalikan objek Promise.

Untuk setiap permintaan, kami boleh memproses hasil permintaan melalui kaedah kemudian. Dua fungsi panggil balik ditakrifkan dalam kaedah itu, satu ialah fungsi panggil balik kejayaan dan satu lagi ialah fungsi panggil balik kegagalan. Fungsi panggil balik yang berjaya akan menghantar objek ResponseInterface, yang melaluinya kita boleh mendapatkan kandungan fail yang dimuat turun, dan kemudian menyimpan atau melaksanakan operasi lain yang gagal fungsi panggil balik akan melepasi objek RequestException, yang melaluinya kita boleh mendapatkan punca kegagalan .

Selepas gelung tamat, kami menggunakan kaedah GuzzleHttpPromiseunwrap untuk menunggu secara serentak untuk semua objek Promise selesai. Dengan cara ini kita boleh mencapai muat turun tak segerak berbilang fail.

Menggunakan HTTP tak segerak untuk memuat turun berbilang fail boleh meningkatkan kecekapan muat turun fail, mengurangkan masa memuatkan fail dan menambah baik pengalaman pengguna. Walau bagaimanapun, perlu diingat bahawa kerana muat turun tak segerak tidak menyekat pelaksanaan kod, kod tambahan diperlukan untuk mengendalikan operasi selepas muat turun fail selesai, seperti menyimpan fail atau operasi lain yang seterusnya.

Selain GuzzleHttp, terdapat perpustakaan dan kaedah lain yang serupa yang boleh melaksanakan muat turun HTTP tak segerak, seperti Swoole, ReactPHP, dll. Pembangun boleh memilih kaedah yang sesuai mengikut situasi sebenar projek.

Dengan menggunakan amalan pembangunan menggunakan HTTP tak segerak PHP untuk memuat turun berbilang fail, kami boleh meningkatkan kecekapan pemuatan fail, meningkatkan prestasi halaman web dan pengalaman pengguna. Saya percaya kaedah ini akan digunakan dengan lebih meluas dalam pembangunan web akan datang.

Atas ialah kandungan terperinci Meningkatkan kecekapan: Amalan pembangunan PHP asynchronous HTTP memuat turun berbilang fail. 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