Konteks
Bekerja sebagai pengembang lepas, saya sering membuat situs web sepenuhnya berdasarkan XSLT. Dengan kata lain, pada setiap permintaan, file XML dihasilkan, berisi semua yang perlu kita ketahui tentang konten halaman: nama pengguna yang saat ini masuk, entri menu atas, jika menu ini dinamis / dapat dikonfigurasi, teks untuk tampilkan di area spesifik halaman, dll. Kemudian proses XSL (cache, dll.) ke halaman HTML / XHTML untuk dikirim ke browser.
Ini memiliki poin yang baik untuk membuatnya lebih mudah untuk membuat situs web skala kecil, terutama dengan PHP. Ini adalah semacam mesin template, tetapi saya lebih suka mesin template lain karena jauh lebih kuat daripada kebanyakan mesin template, dan karena saya tahu itu lebih baik dan menyukainya. Juga dimungkinkan, jika perlu, untuk memberikan akses ke data XML mentah berdasarkan permintaan untuk akses otomatis, tanpa perlu membuat API terpisah.
Tentu saja, itu akan gagal sepenuhnya pada situs web skala menengah atau besar, karena, bahkan dengan teknik caching yang baik, XSL masih menurunkan kinerja situs web secara keseluruhan dan membutuhkan lebih banyak server di sisi server.
Pertanyaan
Browser modern memiliki kemampuan untuk mengambil file XML dan mentransformasikannya dengan file XSL terkait yang dinyatakan dalam XML like <?xml-stylesheet href="demo.xslt" type="text/xsl"?>
. Firefox 3 dapat melakukannya. Internet Explorer 8 juga dapat melakukannya.
Ini berarti bahwa dimungkinkan untuk memigrasikan pemrosesan XSL dari server ke sisi klien untuk 50% pengguna (berdasarkan statistik peramban di beberapa situs web tempat saya mungkin ingin menerapkan ini). Ini berarti bahwa 50% pengguna hanya akan menerima file XML pada setiap permintaan, sehingga mengurangi bandwidth mereka dan server (file XML menjadi lebih pendek dari analog HTML yang diproses), dan mengurangi penggunaan CPU server.
Apa kelemahan teknik ini?
Saya memikirkan beberapa hal, tetapi itu tidak berlaku dalam situasi ini:
- Implementasi yang sulit dan kebutuhan untuk memilih, berdasarkan permintaan browser, kapan harus mengirim XML mentah dan kapan harus mengubahnya ke HTML. Jelas, sistem tidak akan jauh lebih sulit daripada yang sebenarnya. Satu-satunya perubahan yang dilakukan adalah menambahkan tautan file XSL ke setiap XML, dan menambahkan cek browser.
- Lebih banyak IO dan penggunaan bandwidth, karena file XSLT akan diunduh oleh browser, alih-alih di-cache oleh server. Saya tidak berpikir itu akan menjadi masalah, karena file XSLT akan di-cache oleh browser (seperti gambar, atau CSS, atau file JavaScript sebenarnya di-cache).
- Mungkin ada beberapa masalah di sisi klien, seperti mungkin masalah saat menyimpan halaman di beberapa browser.
- Kesulitan untuk men-debug kode: tidak mungkin memperoleh sumber HTML yang sebenarnya digunakan peramban, karena satu-satunya sumber yang ditampilkan adalah XML yang diunduh. Di sisi lain, saya jarang melihat kode HTML di sisi klien, dan dalam kebanyakan kasus, itu tidak dapat digunakan secara langsung (spasi kosong dihapus).
sumber
ngx_http_xslt_module
atau keempatnya). Saya sangat meragukan dukungan sisi klien XSLT 2.0 lebih baik.Jawaban:
Browser tidak dapat secara progresif merender XSLT
Ini berarti tidak ada lagi yang dimuat dan tidak ada yang ditampilkan sampai semua data dan seluruh stylesheet dimuat dan diproses.
Anda melewatkan rendering progresif dan prefetching gambar, CSS & JS.
Muatan awal tertunda oleh permintaan lain
Untuk file-file ish kecil (<20kb) jumlah permintaan, bukan bandwidth, adalah penghambat kinerja front-end, dan sebagian besar halaman dan stylesheet akan masuk dalam kategori ini.
Jika Anda memiliki halaman besar, maka itu lebih buruk - lihat poin pertama.
Anda mungkin tidak menghemat bandwidth
XSLT sendiri cukup verbose dan mungkin perlu mengandung template untuk seluruh situs dan logika untuk semua kasus yang jarang terjadi, bukan hanya hal-hal yang digunakan pada halaman saat ini.
Anda masih harus memasukkan semua data yang ditandai dalam file XML utama yang Anda kirim, misalnya jika Anda mengirim posting blog, maka tidak ada keajaiban yang dapat dilakukan XSLT untuk membuatnya secara substansial lebih kecil. Jika Anda mengirim data yang kompleks, toh itu akan memiliki banyak markup.
Tembolok berlebihan
Tembolok peramban tidak terlalu bagus :
dan di seluler, di mana latensi membuat permintaan ekstra paling mahal, cache bahkan lebih buruk .
Periksa rasio pentalan Anda - mereka adalah pengguna yang tidak mendapat manfaat dari XSLT yang di-cache, dan bahkan membayar harga tambahan untuk mengunduh stylesheet dan menunggu untuk diproses.
gzip
adalah XSLT terbalikSebagian besar transformasi dilakukan melalui XSLT untuk mengubah markup singkat menjadi lebih verbose dan menambahkan pengulangan. Tapi gzip sangat bagus dalam menghapus pengulangan / redundansi dari file!
Anda harus tetap menggunakan gzip (boros untuk mengirim XML tanpa kompresi). Sangat mungkin bahwa ukuran gzip dari dokumen yang diproses akan hampir sama dengan ukuran gzip dari XML yang belum diproses - tetapi Anda tidak perlu mengirim XSLT tambahan, dan browser akan dapat mulai merender segera setelah paket pertama tiba.
Klien mungkin lambat
Bahkan dengan asumsi kasus pemuatan terbaik dari cache, pemrosesan XSLT di sisi klien lebih cepat hanya jika CPU pengguna lebih cepat, dan mesin XSLT mereka lebih cepat.
Di sisi server Anda dapat melakukan semua jenis trik pengoptimalan (mis., Cache yang diproses fragmen atau bahkan seluruh halaman). Anda dapat menggunakan prosesor XSLT terbaru dan tercepat (browser hanya memiliki XSLT 1.0 dan kemungkinan tidak terlalu optimal). Dan server Anda mungkin memiliki CPU yang lebih besar daripada banyak komputer kantor, ponsel, dll.
sumber
gzip
poinTidak ada alasan mengapa melakukan sisi server ini tidak boleh skala serta menghasilkan HTML secara langsung. Juga tidak ada banyak alasan untuk overhead konstan besar dibandingkan dengan PHP. Tampaknya ada kompiler XSLT> JVM / CLR dan saya kira Anda bahkan bisa menerjemahkannya ke kode asli.
Namun gagasan untuk mengangkut data dan struktur presentasi secara terpisah adalah baik.
Ini dapat menghemat banyak bandwidth dan bahkan kinerja server. Namun pomeL telah menyebutkan sejumlah poin.
Untuk dukungan yang tepat di browser, xslt.js dapat membantu.
Secara pribadi, saya bukan penggemar XML, jadi saya akan menggunakan JSON sebagai gantinya dan mesin template JS, yang akan dijalankan di browser. Atau semacam mesin template, yang mengubah markup template menjadi js dapat dieksekusi di sisi server, yang digunakan untuk rendering di sisi klien.
JavaScript cukup cepat dan tersedia hampir di mana saja. JSON dan JS jauh lebih kompak daripada XML dan XSLT.
sumber
Mengirim XML yang ringkas dan memiliki XSLT yang di-cache pada klien bahkan dapat menghemat bandwidth Anda.
Anda meninggalkan browser apa pun yang tidak mendukung XSLT, seperti ponsel cerdas. Tetapi Anda harus membuat versi khusus untuk ini.
sumber
:hover
. dll.Masalah utama yang dulunya adalah bahwa hanya beberapa browser yang mendukung hal ini dengan baik, jadi pada dasarnya tidak ada masalah dengan membuat platform baru untuk didukung. Selain itu versi IE yang lebih lama tidak mendukung ini dengan baik, dan jika saya ingat dengan benar setidaknya satu IE memiliki dialek XSLT yang berbeda memberikan segala macam masalah yang menyenangkan.
sumber