Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pelaksanaan penghalaan berprestasi tinggi dalam PHP dan teknik pengoptimuman prestasi untuk pemadanan laluan

Pelaksanaan penghalaan berprestasi tinggi dalam PHP dan teknik pengoptimuman prestasi untuk pemadanan laluan

王林
王林asal
2023-10-15 12:43:571220semak imbas

Pelaksanaan penghalaan berprestasi tinggi dalam PHP dan teknik pengoptimuman prestasi untuk pemadanan laluan

Cara melaksanakan penghalaan berprestasi tinggi dalam PHP dan teknik pengoptimuman prestasi untuk pemadanan laluan

Dalam pembangunan web, penghalaan ialah komponen yang sangat penting, yang menentukan cara kami mengendalikan permintaan URL dan mengedarkan permintaan kepada pengendali yang sepadan. Dalam aplikasi berskala besar, sistem penghalaan yang cekap bukan sahaja dapat meningkatkan prestasi laman web, tetapi juga memberikan pengalaman pengguna yang lebih baik. Artikel ini akan memperkenalkan cara melaksanakan penghalaan berprestasi tinggi dalam PHP dan menyediakan beberapa teknik pengoptimuman prestasi untuk padanan laluan serta contoh kod khusus.

1. Kaedah pelaksanaan

  1. Kaedah pelaksanaan penghalaan asas
    Dalam PHP, kita boleh menggunakan pernyataan if-else asas untuk melaksanakan penghalaan mudah. Mula-mula dapatkan laluan URL permintaan semasa, dan kemudian padankan fungsi pemprosesan yang sepadan melalui pernyataan if-else. Kod sampel adalah seperti berikut:
$request_uri = $_SERVER['REQUEST_URI'];

if ($request_uri == '/') {
    // 处理首页请求
    home();
} elseif ($request_uri == '/about') {
    // 处理关于页面请求
    about();
} elseif ($request_uri == '/contact') {
    // 处理联系页面请求
    contact();
} else {
    // 处理404页面请求
    notFound();
}

Dengan cara ini, setiap permintaan URL memerlukan padanan if-else yang lengkap Memandangkan bilangan peraturan penghalaan meningkat, prestasi akan terjejas secara beransur-ansur.

  1. Gunakan ungkapan biasa untuk memadankan laluan
    Untuk meningkatkan prestasi padanan laluan, kami boleh menggunakan ungkapan biasa untuk memadankan URL. Ungkapan biasa boleh dipadankan menggunakan fungsi preg_match PHP. Kod sampel adalah seperti berikut:
$request_uri = $_SERVER['REQUEST_URI'];

if (preg_match('/^/$/', $request_uri)) {
    // 处理首页请求
    home();
} elseif (preg_match('/^/about$/', $request_uri)) {
    // 处理关于页面请求
    about();
} elseif (preg_match('/^/contact$/', $request_uri)) {
    // 处理联系页面请求
    contact();
} else {
    // 处理404页面请求
    notFound();
}

Menggunakan penghalaan padanan ungkapan biasa boleh mengendalikan pelbagai permintaan dengan lebih fleksibel, tetapi padanan ungkapan biasa juga akan memberi kesan tertentu pada prestasi.

  1. Gunakan jadual penghalaan untuk pemadanan
    Untuk meningkatkan lagi prestasi penghalaan, anda boleh menggunakan jadual penghalaan untuk pemadanan. Jadual penghalaan ialah struktur data yang memetakan URL kepada fungsi pemprosesan. Apabila memproses permintaan, kami hanya perlu mencari fungsi pemprosesan yang sepadan dalam jadual penghalaan. Kod sampel adalah seperti berikut:
$request_uri = $_SERVER['REQUEST_URI'];

$routes = [
    '/' => 'home',
    '/about' => 'about',
    '/contact' => 'contact',
    // 更多的路由规则
];

if (isset($routes[$request_uri])) {
    $handler = $routes[$request_uri];
    $handler();
} else {
    // 处理404页面请求
    notFound();
}

Menggunakan jadual penghalaan untuk pemadanan boleh meningkatkan prestasi penghalaan dengan sangat baik. Anda tidak perlu memadankan setiap peraturan URL satu persatu.

2. Kemahiran pengoptimuman prestasi

  1. Jadual penghalaan cache
    Dalam aplikasi sebenar, data dalam jadual penghalaan mungkin agak besar, dan jadual penghalaan perlu dihuraikan semula setiap kali permintaan diproses. Untuk meningkatkan prestasi, jadual penghalaan boleh dicache dalam ingatan dan hanya perlu dimuatkan sekali apabila aplikasi bermula. Kod sampel adalah seperti berikut:
$request_uri = $_SERVER['REQUEST_URI'];

$routes = [
    '/' => 'home',
    '/about' => 'about',
    '/contact' => 'contact',
    // 更多的路由规则
];

// 缓存路由表
$cache = new Cache();
$cache->set('routes', $routes);

// 从缓存中获取路由表
$routes = $cache->get('routes');

if (isset($routes[$request_uri])) {
    $handler = $routes[$request_uri];
    $handler();
} else {
    // 处理404页面请求
    notFound();
}
  1. Optimumkan ungkapan biasa
    Jika anda menggunakan ungkapan biasa untuk pemadanan laluan, anda boleh mengoptimumkan prestasi ungkapan biasa. Beberapa petua pengoptimuman biasa termasuk:
  2. Cuba gunakan mod tidak tamak
  3. Minimumkan penggunaan kurungan
  4. Gunakan kelas aksara dan bukannya koleksi aksara
  5. Gunakan pembatas
  6. Gunakan rentetan mentah
  7. adalah seperti berikut
:

kod

$request_uri = $_SERVER['REQUEST_URI'];

if (preg_match('~^/$~', $request_uri)) {
    // 处理首页请求
    home();
} elseif (preg_match('~^/about$~', $request_uri)) {
    // 处理关于页面请求
    about();
} elseif (preg_match('~^/contact$~', $request_uri)) {
    // 处理联系页面请求
    contact();
} else {
    // 处理404页面请求
    notFound();
}

Dengan mengoptimumkan ungkapan biasa, anda boleh meningkatkan prestasi padanan laluan.

    Caching keputusan padanan laluan
  1. Jika hasil padanan URL tertentu adalah pasti, hasil padanan laluan boleh dicache tanpa padanan semula setiap kali. Kod sampel adalah seperti berikut:
  2. $request_uri = $_SERVER['REQUEST_URI'];
    
    $routes = [
        [
            'pattern' => '/',
            'handler' => 'home'
        ],
        [
            'pattern' => '/about',
            'handler' => 'about'
        ],
        [
            'pattern' => '/contact',
            'handler' => 'contact'
        ],
        // 更多的路由规则
    ];
    
    // 从缓存中获取路由匹配结果
    $matched_route = $cache->get($request_uri);
    
    if (!$matched_route) {
        // 匹配路由
        foreach ($routes as $route) {
            if (preg_match('~^' . $route['pattern'] . '$~', $request_uri)) {
                $matched_route = $route;
                // 缓存路由匹配结果
                $cache->set($request_uri, $matched_route);
                break;
            }
        }
    }
    
    if ($matched_route) {
        $handler = $matched_route['handler'];
        $handler();
    } else {
        // 处理404页面请求
        notFound();
    }
Dengan menyimpan hasil padanan penghalaan, masa pemadanan dan jumlah pengiraan boleh dikurangkan, dan prestasi penghalaan boleh dipertingkatkan.

Ringkasan:

Artikel ini memperkenalkan beberapa cara untuk melaksanakan penghalaan berprestasi tinggi dalam PHP dan menyediakan beberapa petua pengoptimuman prestasi untuk padanan laluan. Dalam aplikasi praktikal, memilih kaedah dan teknik yang sesuai berdasarkan situasi tertentu boleh meningkatkan prestasi tapak web dan pengalaman pengguna dengan ketara. Dengan meng-cache jadual penghalaan, mengoptimumkan ungkapan biasa dan mencache hasil padanan, jumlah pengiraan penghalaan boleh dikurangkan dengan berkesan dan prestasi penghalaan dipertingkatkan.

Atas ialah kandungan terperinci Pelaksanaan penghalaan berprestasi tinggi dalam PHP dan teknik pengoptimuman prestasi untuk pemadanan laluan. 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