Rumah >hujung hadapan web >tutorial js >Bahagian Tepi modular Termasuk komponen untuk Pengiraan JavaScript
Pada musim panas 2022, rakan sepasukan saya Kailan bekerja pada peti Rust untuk Fastly Compute, melaksanakan subset bahasa templat Edge Side Includes (ESI) dan menerbitkan catatan blog tentang ia. Artikel ini penting bukan sahaja kerana kami mengeluarkan pustaka yang berguna, tetapi kerana ia merupakan ilustrasi cemerlang tentang perkara yang boleh dibawa oleh Compute kepada kami: kelebihan boleh atur cara dengan fungsi modular. Dan kini JavaScript telah tersedia secara umum di Compute selama lebih daripada setahun, sudah tiba masanya kami mempunyai penyelesaian yang sama untuk pengguna JavaScript kami. Pustaka ESI Fastly untuk JavaScript, kini tersedia pada npm, membolehkan anda menambah pemprosesan ESI yang berkuasa pada aplikasi anda.
Selama hampir sedekad, CDN Fastly telah mendapat sokongan untuk Edge Side Includes (ESI), bahasa templat yang berfungsi dengan mentafsir teg khas dalam sumber HTML anda. Ia berkisar pada teg
index.html
<body> <esi:include src="./header.html" /> <main> Content </main> </body>
header.html
<header>Welcome to the web site</header>
output
<header>Welcome to the web site</header>Content
Apabila Compute memasuki pemandangan, landskap tepi berubah dalam dua cara utama: kebolehprograman dan modulariti.
Tidak lama selepas sokongan platform kami untuk Rust telah stabil, kami menerbitkan peti untuk Rust yang melaksanakan ESI, dan menambah kebolehprograman. Anda kini boleh mengkonfigurasi, menggunakan kod, cara membina permintaan bahagian belakang tambahan dan cara mengendalikan serpihan respons. Anda juga boleh melakukan pemprosesan ESI pada dokumen yang tidak berasal dari pelayan bahagian belakang. Kebolehprograman ini membezakannya daripada sokongan ESI yang kami ada dalam VCL, yang terhad kepada set tetap ciri yang kami tawarkan.
Pada masa yang sama, pendekatan ini sangat modular, memberikan pengaturcara pilihan untuk melaksanakan pemprosesan ESI ini atas dasar setiap permintaan, dan pilihan untuk menggabungkan pemprosesan dengan modul lain yang berfungsi dengan jenis data yang serasi dan digunakan mereka dalam sebarang susunan dan/atau keadaan logik yang dinyatakan.
Sama seperti keluaran Rust kami, kami mahu pustaka JavaScript ini boleh diprogramkan. Sokongan JavaScript Fastly sentiasa menerima API Ambil dan API Streams pendampingnya. Satu ciri berguna bagi Streams API ialah antara muka TransformStream, membenarkan data untuk "disampaikan" melalui objek untuk menggunakan transformasi—sempurna untuk ESI. Dengan melaksanakan pemproses ESI sebagai pelaksanaan TransformStream, kami dapat menyesuaikannya terus ke dalam Aplikasi Pengiraan Cepat yang ditulis dalam JavaScript.
Berikut ialah cara anda boleh menstrim melaluinya:
<body> <esi:include src="./header.html" /> <main> Content </main> </body>
Transformasi, yang kami panggil EsiTransformStream, digunakan pada strim secara langsung, mengurangkan kebimbangan memori dan prestasi. Ini bermakna:
Selain itu, reka bentuk ini adalah modular, menjadikan EsiTransformStream sebagai alat lain yang boleh anda gunakan bersama dengan perkara lain. Sebagai contoh, anda mungkin mempunyai transformasi lain yang anda ingin gunakan pada respons, seperti pemampatan, dan respons boleh disalurkan melalui mana-mana bilangan strim transformasi ini, kerana ia adalah antara muka standard sepenuhnya. Jika anda mahu, anda juga boleh mendayakan ESI secara bersyarat untuk permintaan atau respons tertentu sahaja, seperti pengepala permintaan, laluan atau jenis kandungan respons.
Begini cara anda membuat seketika EsiTransformStream:
<header>Welcome to the web site</header>
Pembina mengambil URL dan objek Pengepala, dan secara pilihan mengambil beberapa pilihan sebagai parameter ketiga. Seperti yang diterangkan sebelum ini, fungsi utama ESI ialah memuat turun templat tambahan, untuk dimasukkan ke dalam strim yang dihasilkan. Menghadapi
Dalam kes paling mudah, anda hanya akan menggunakan nilai pengambilan objek konfigurasi. Jika anda tidak menyediakannya, maka ia menggunakan fungsi pengambilan global sebaliknya, tetapi dalam Kira anda memerlukannya untuk menentukan hujung belakang untuk pengambilan untuk digunakan apabila menyertakan templat (melainkan anda menggunakan ciri hujung belakang dinamik). Contoh coretan di atas memberikan bahagian belakang bernama origin_0 sebelum memanggil pengambilan global.
Itu sahaja! Dengan persediaan mudah ini, anda boleh mempunyai bahagian belakang yang menyajikan teg ESI dan aplikasi Compute yang memprosesnya. Berikut ialah contoh penuh yang boleh anda jalankan:
Pelaksanaan ini menawarkan lebih banyak ciri ESI daripada yang lain yang kami sediakan pada masa lalu.
Kadangkala, fail yang dirujuk oleh
<body> <esi:include src="./header.html" /> <main> Content </main> </body>
Jika /templates/header.html menyebabkan ralat, pemproses ESI secara senyap mengabaikan ralat dan menggantikan keseluruhan
Anda juga boleh menggunakan pengendalian ralat yang lebih berstruktur dengan menggunakan
<header>Welcome to the web site</header>
Pemproses ESI mula-mula melaksanakan kandungan
Adalah penting untuk ambil perhatian bahawa keseluruhan
ESI juga membenarkan pelaksanaan bersyarat, dengan melakukan semakan masa jalan pada pembolehubah. Berikut ialah contoh cek sedemikian:
<header>Welcome to the web site</header>Content
Apabila pemproses menemui
Pemproses menyediakan set pembolehubah terhad, yang berdasarkan terutamanya pada kuki permintaan. Dalam contoh di atas, kuki HTTP dengan nama "kumpulan" disemak untuk nilainya. Pelaksanaan kami adalah berdasarkan spesifikasi bahasa ESI; rujuk padanya untuk butiran lanjut.
Pelaksanaan ini menyokong teg berikut bagi spesifikasi bahasa ESI.
Pembolehubah ESI disokong dalam atribut teg ESI dan Ungkapan ESI disokong dalam atribut ujian
Walaupun set ciri cukup untuk teruja, bahagian yang benar-benar menarik untuk boleh diprogramkan ialah lebih banyak perkara boleh dilakukan. Membawa masuk templat ialah penggunaan utama ESI, tetapi itu bukan semua yang boleh dilakukannya. Ini contohnya.
Pertimbangkan anda mempunyai cap masa yang ditandakan dalam dokumen anda yang anda mahu diwakili sebagai tarikh relatif apabila ia dipaparkan, seperti "2 hari yang lalu". Terdapat banyak cara untuk melakukan ini, tetapi untuk mempunyai prestasi terbaik dan implikasi ingatan, adalah bagus untuk melakukan pencarian/gantian dalam strim. Pengaturcaraan perpustakaan ESI ini sebenarnya boleh digunakan sebagai pilihan yang baik untuk melakukan ini.
Kami boleh menentukan cap masa untuk dikodkan dalam dokumen hujung belakang anda menggunakan teg ESI yang dibuat khas dalam format seperti berikut:
<body> <esi:include src="./header.html" /> <main> Content </main> </body>
Sebagai contoh, coretan ini boleh mewakili tengah malam pada 1 Januari 2024, waktu Pasifik:
<header>Welcome to the web site</header>
Sekarang, sediakan EsiTransformStream untuk menyediakan dokumen gantian sintetik apabila ia melihat corak URL itu:
<header>Welcome to the web site</header>Content
Sekarang, apabila pemproses menemui contoh coretan di atas, ia akan mengeluarkan hasil yang serupa dengan yang berikut (bergantung pada berapa hari ke hadapan anda menjalankannya):
const transformedBody = resp.body.pipeThrough(esiTransformStream); return new Response( transformedBody, { status: resp.status, headers: resp.headers, }, );
Oleh kerana dokumen bahagian belakang boleh dicache oleh Fastly, permintaan masa hadapan boleh mendapat manfaat daripada HIT cache, manakala pemprosesan akan terus memaparkan masa relatif yang dikemas kini.
Untuk contoh langsung ini, lihat biola berikut:
@fastly/esi kini tersedia di npm, sedia untuk ditambahkan pada mana-mana program JavaScript. Gunakannya di tepi dalam program Fastly Compute anda, sudah tentu, tetapi sebenarnya, ia juga berfungsi di luar Compute, selagi persekitaran anda menyokong API pengambilan. Kod sumber penuh tersedia di GitHub.
Mulakan dengan mengklon salah satu Fiddles di atas dan mengujinya dengan asal-usul anda sendiri, walaupun sebelum anda membuat akaun Fastly. Apabila anda bersedia untuk menerbitkan perkhidmatan anda pada rangkaian global kami, anda boleh mendaftar untuk percubaan percuma Compute dan kemudian mulakan segera dengan perpustakaan ESI pada npm.
Dengan Compute, kelebihan boleh diprogramkan dan modular – pilih dan gabungkan penyelesaian yang paling sesuai untuk anda, atau bina sendiri. Kami bukan satu-satunya yang boleh menyediakan modul seperti ini untuk Compute. Sesiapa sahaja boleh menyumbang kepada ekosistem dan mengambil daripadanya. Dan, seperti biasa, temui kami di forum komuniti Fastly dan beritahu kami perkara yang telah anda bina!
Atas ialah kandungan terperinci Bahagian Tepi modular Termasuk komponen untuk Pengiraan JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!