templat
Smarty - PHP
dari
: cjjer Membuat beberapa perubahan
pada penggunaan PHP untuk mengimplementasikan lapisan logika dan lapisan presentasi model pengembangan MVC. Ada berbagai mesin templat yang dapat dipilih, tetapi setelah lahir dari mesin resmi SMARTY, pilihannya telah berubah. Konsep dan implementasinya cukup avant-garde. Artikel ini terutama membahas perbedaan karakteristik SMARTY dibandingkan dengan mesin templat lainnya, memperkenalkan secara singkat instalasi dan penggunaan mesin, dan menggunakan kasus uji kecil untuk membandingkan kecepatan dan kemudahan penggunaan templat SMARTY dan PHPLIB.
1. MVC memerlukan templat.
MVC pertama kali diringkas sebagai pola desain selama proses pengembangan bahasa SmallTalk. MVC mewakili model, tampilan, dan kontrol masing-masing. Tujuannya adalah untuk memungkinkan peran pengembangan yang berbeda untuk menjalankan tugasnya masing-masing dalam skala besar dan menengah proyek. Dalam pengembangan aplikasi jaringan, diagram berikut dapat digunakan untuk merepresentasikan hubungan antar konsep.
Gambar ini menunjukkan aplikasi WEB sederhana. Informasi yang dilihat pengguna di browser adalah konten di server database, tetapi sudah diproses oleh server aplikasi sebelumnya. Pengembang bertanggung jawab untuk menetapkan struktur data, logika untuk memproses data, dan metode untuk merepresentasikan data.
Ketika CGI menjadi populer di Cina pada tahun 1996, programmer WEB awal semuanya belajar secara otodidak dari HTML. Tidak sulit untuk mencetak baris-baris HTML dalam PERL. Namun, seiring dengan meningkatnya kecepatan jaringan, ukuran halaman juga meningkat yang asli 20 hingga 30 K, telah meroket sepuluh kali lipat. Menulis program CGI menciptakan kebutuhan mendesak: untuk memisahkan kode sumber PERL dan HTML. Dengan demikian, kemajuan sosial tercermin dalam pembagian kerja dalam tim pembangunan. Karena seniman dan pemrogram tidak terlalu mengenal karya satu sama lain, mereka perlu menggunakan bahasa yang disepakati untuk berkomunikasi selama kerja sama.
Bahasa ini bukan bahasa ibu kita atau bahasa Inggris. Istilah ini disebut template, dan logika serta penyajiannya bergantung padanya. Ini adalah metode ekspresi yang menggabungkan karakteristik HTML dan bahasa skrip. Dengan cara ini, lapisan presentasi dapat menampilkan data yang diproses oleh lapisan logika dalam format yang diinginkan pengguna. Jika Anda memiliki pengalaman pengembangan MFC pada platform Windows, Anda pasti akrab dengan enkapsulasi Document/DocumentTemplate/View. Ini adalah contoh MVC yang sangat umum. Untuk aplikasi Web, menurut saya pribadi EJB/servlets/JSP di J2EE adalah yang paling kuat, dan tentu saja ada Struktur yang sederhana dan indah. Implementasi terkenal lainnya adalah COM/DCOM+ASP. Kombinasi ini digunakan oleh sebagian besar orang di negara kita.
Dengan membandingkan beberapa implementasi MVC dalam aplikasi WEB, kita bisa mendapatkan konsep tentang template: sekumpulan skrip yang dimasukkan ke dalam HTML, atau skrip HTML, yang melaluinya konten yang disisipkan mewakili perubahan data. Berikut adalah contoh file template. Setelah diproses, template ini akan menampilkan Hello, world!
Metode pemrosesan$greetings
dihilangkan untuk saat ini, dan akan dibahas nanti untuk perbandingan.
2. Mengapa memilih SMARTY?
Untuk PHP, ada banyak mesin template yang dapat dipilih, seperti PHPLIBtemplate paling awal dan Fasttemplate yang sedang naik daun. Setelah beberapa kali peningkatan, semuanya menjadi cukup matang dan stabil. Jika Anda sangat puas dengan mesin templat yang Anda miliki saat ini, maka...silakan baca terus. Saya yakin sebagai penggemar perangkat lunak gratis atau pengembang yang mengejar efisiensi dan keanggunan, pengenalan SMARTY berikut akan menarik.
Selain pengaruh preferensi pribadi, saya selalu cenderung menggunakan implementasi standar resmi, seperti mesin XML APACHE Axis. Keuntungannya adalah Anda bisa mendapatkan kompatibilitas terbaik (misalnya, kompatibilitas MFC awal dengan Win3x lebih baik daripada kerangka aplikasi lain, dan tentu saja sekarang semua versi sudah sangat lengkap). Sebelum SMARTY dirilis, saya telah menggunakan Integrated Template eXtension di PEAR. Mesin ini hampir kompatibel dengan PHPLIBtemplate dan Fasttemplate. Dari sintaks template hingga pemrosesan template, template dibaca ke dalam memori dan kemudian fungsi parse() dipanggil untuk mengganti tag preset dengan data.
Mari kita lihat bagaimana SMARTY melakukannya. Setelah menerima request, tentukan terlebih dahulu apakah url tersebut diminta pertama kali. Jika ya, kompilasi file template yang diperlukan untuk url tersebut ke dalam skrip php, lalu redirect; jika tidak, berarti template url tersebut telah ada dikompilasi. Periksa Anda dapat mengarahkan langsung tanpa mengkompilasi ulang. Kondisi kompilasi ulang dapat diatur ke batas waktu yang tetap. Defaultnya adalah file template diubah.
Bagaimana dengan itu? Apakah itu terlihat familier? Kalau dipikir-pikir──Bukankah ini prinsip JSP! Memang, kompilasi semacam ini tampak luar biasa ketika digunakan pada mesin skrip yang diinterpretasikan seperti PHP, tetapi jika dipikir-pikir dengan hati-hati, bukankah JAVA juga diinterpretasikan dan dieksekusi oleh JVM? Artinya, tidak ada yang mustahil, yang ada hanyalah sesuatu yang tidak dapat dibayangkan.
Sekarang kita telah membicarakan tentang JAVA, izinkan saya mengungkapkan pandangan saya tentang masa depan PHP. Situs web resmi PHP mengumumkan bahwa versi PHP 5.0 akan dirilis pada akhir tahun 2003. Versi ini memiliki banyak fitur baru: seperti penanganan pengecualian, namespace, lebih berorientasi objek, dll. Bisa dikatakan semakin mendekati JAVA, dan SMARTY juga merupakan salah satu fitur baru yang membuat PHP lebih cocok untuk pengembangan proyek skala besar dan menengah. Namun sepertinya hal ini semakin menjauh dari alasan saya memilihnya, yaitu fleksibilitas dan kemudahan penggunaan. Namun dari sudut pandang siklus hidup suatu perangkat lunak, PHP sedang dalam tahap pertumbuhan, dan keuntungannya lebih besar daripada kerugiannya bagi pengembang untuk memberikan lebih banyak fungsi dengan harapan dapat kompeten untuk aplikasi komersial. Sebagai pengguna setia PHP, Anda tentu tidak ingin PHP selalu dituding kurang mumpuni bukan?
KENAPA PILIH SMARTY, HANYA KARENA SEPERTI JSP? Tentu saja ada alasan yang lebih baik. Pertama-tama, selain biaya kompilasi pertama yang relatif tinggi, selama file templat tidak diubah, skrip cache yang dikompilasi tersedia kapan saja, menghemat banyak waktu parse(). Kedua, SMARTY memiliki a perpustakaan fungsi yang kaya seperti PHP. Dari menghitung kata hingga indentasi otomatis, pembungkusan teks dan ekspresi reguler, Anda dapat menggunakannya secara langsung jika dirasa belum cukup, misalnya Anda memerlukan fungsi tampilan paging dari kumpulan hasil data, SMARTY juga memiliki kemampuan ekspansi yang kuat, yang dapat diperluas melalui plug-in.
Fakta berbicara lebih keras daripada kata-kata. Saya merancang program pengujian dan membandingkan template SMARTY dan PHPLIB berdasarkan dua faktor kecepatan dan kesulitan pengembangan. Alasan saya memilih template PHPLIB adalah karena dalam artikel Patrick "Memilih Template Paling Cocok di Dunia PHP", terdapat perbandingan antara PHPLIB. template dan Fasttemplate. Kompetisi, PHPLIBtemplate memenangkan kemenangan besar, yang memberikan SMARTY lawan yang baik. Sebelum pengujian, mari kita bahas masalah-masalah yang perlu diperhatikan selama proses instalasi.
3. Masalah yang mungkin Anda temui
Di situs resmi SMARTY, terdapat panduan pengguna terperinci, dan Anda dapat memilih versi online dalam format HTML dan PDF. Kami tidak akan membahas konten yang ada dalam manual di sini, tetapi hanya akan menjelaskan masalah yang mungkin Anda temui saat penggunaan pertama.
Pertanyaan pertama sangat fatal: katanya file yang dibutuhkan tidak dapat ditemukan? Tidak semua orang menulis aplikasi berdasarkan struktur direktori default SMARTY. Ini perlu ditentukan secara manual. Dengan asumsi struktur direktori adalah sebagai berikut:
Anda perlu menentukan struktur direktori di index.php:
$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";
Masalah pertama telah terpecahkan, dan kemudian muncul masalah kedua: Mengapa template cantik yang baru saja saya buat dengan Dreamweaver tidak dapat digunakan? Bukannya ada yang salah dengan file templatenya, tapi karena tag delimiter default SMARTY adalah {}, dan sayangnya Javascript pasti mengandung tag ini. Untungnya, kita dapat menggunakan karakter apa pun sebagai pembatas, ditambah dua kalimat berikut:
$smart->left_delimiter = "{/";
$smart->right_delimiter = "/}";
Sekarang instalasi pada dasarnya telah selesai, tidak ada masalah.
4. Kontras dan Analogi
Pertama, pikirkan tentang desain tes. Faktor penilai utama tentu saja adalah kecepatan. Untuk pengujian kecepatan, mean aritmatika digunakan. Ulangi pembuatan halaman sebanyak N kali pada halaman pengujian, lalu bandingkan total waktu pembuatan halaman. Faktor penting lainnya adalah kemudahan penggunaan (untuk skalabilitas tidak perlu membandingkan hasil), sehingga template yang digunakan tidak boleh terlalu kecil. Saya menggunakan halaman beranda pribadi saya, file HTML yang dibuat dengan Firework+Dreamweaver, berukuran sekitar 7K. Pengaturan variabel juga mengadopsi blok yang paling umum digunakan, yang disebut blok di template PHPLIB dan bagian di SMARTY. Jangan remehkan perbedaan namanya. Kriteria kegunaannya dibagi menjadi dua bagian: apakah sintaks file template dan file skrip ringkas dan mudah digunakan.
Mari selami pengujiannya. Mari kita lihat dulu sintaks kedua file templat: sisi kiri bilah biru adalah templat PHPLIB, dan sisi kanan milik SMARTY. Preferensi pribadi berbeda-beda, jadi saya tidak akan berkomentar di sini. Fokus pada membandingkan pernyataan pemrosesan dalam skrip, pertama-tama lihat template PHPLIB:
$tpl->set_file('phplib', 'bigfile.htm');
$tpl->set_block('phplib', 'row', 'rows');
for ($j = 0; $j < 10; $j++){
$tpl->set_var('tag' ,"$j");
$tpl->parse('rows', 'row', true);
}
$tpl->parse('out', 'phplib');
$tpl->p('out');
Berikut ini adalah CERDAS:
$smart->assign('row',$row);
$smart->display('bigfile.htm');
SMARTY hanya menggunakan dua variabel, tag dan baris, sedangkan template PHPLIB memiliki penangan file template tambahan dan out yang tidak dapat dijelaskan. Sejujurnya, saya tidak tahu mengapa hal ini ada ketika saya pertama kali mempelajarinya. Rasanya masih canggung sekarang. Mengapa SMARTY hanya mempunyai sedikit pernyataan pemrosesan? Jawabannya adalah usaha yang dilakukan oleh mesin. Jika Anda ingin mendalami program sumber, Anda dapat menemukan bahwa ada fungsi bernama _compile_tag() di Smarty_compiler.class.php, yang bertanggung jawab untuk mengubah tag bagian menjadi pernyataan PHP. Ini bukan label biasa, ia memiliki parameter dan data, sehingga menghemat beban kerja pemrograman skrip. Beban kerja pada label template tidak jauh berbeda.
Sekarang giliran kita untuk fokus pada kecepatan. Lagi pula, bagi seorang pengembang web yang terampil, hanya masalah waktu untuk menguasai alat yang paling sulit, belum lagi mesin template, sebuah teknologi dengan kurva pembelajaran yang lembut. Kecepatan adalah nyawa aplikasi web, terutama ketika mesin template digunakan di situs dengan banyak kunjungan bersamaan, yang bahkan lebih penting lagi. Sebelum pengujian dimulai, saya pikir template PHPLIB akan menang dalam aspek ini karena telah diupgrade berkali-kali dan pada dasarnya tidak memiliki bug. Terlebih lagi, mesin SMARTY terlalu besar, tidak seperti lawannya yang hanya memiliki dua file.
Benar saja, hasil pengujiannya seperti gambar di bawah ini, template PHPLIB memiliki keunggulan kecepatan 25%:
Namun tidak selalu seperti ini. Saya menekan refresh lagi, dan kali ini saya mendapatkan hasil yang berbeda:
PHPLIB pada dasarnya tidak berubah, tetapi SMARTY telah meningkatkan kecepatannya sebesar 25%. Lanjutkan menyegarkan, dan Anda akan mendapatkan hasil serupa dengan yang kedua kalinya: SMARTY hampir 10% lebih cepat dibandingkan template PHPLIB. Saya rasa inilah mengapa versi yang dikompilasi lebih cepat daripada versi yang ditafsirkan. Mesin SMARTY sendiri berukuran sangat besar, dan template perlu dikompilasi menjadi file php, sehingga kecepatannya tentu tidak secepat template PHPLIB yang ringkas. Namun hal ini baru pertama kali terjadi. Saat menerima permintaan untuk kedua kalinya, SMARTY menemukan bahwa template telah dikompilasi, sehingga langkah yang paling memakan waktu dilewati, dan lawan harus melakukan pencarian dan penggantian langkah demi langkah. Ini adalah contoh klasik "menukar ruang dengan waktu" yang disebutkan dalam prinsip kompilasi.
5. Kesimpulan
Kesimpulannya, jika Anda sudah jatuh cinta dengan SMARTY, tunggu apa lagi? Tentu saja, ini tidak berarti bahwa ini mahakuasa. Sama seperti ketika saya menggunakan model MVC untuk menulis situs web pribadi saya, tidak hanya tidak mengurangi beban kerja, tetapi saya juga harus selalu khawatir tentang keterkaitan antara level yang berbeda.
SMARTY tidak cocok untuk apa? Ambil contoh klasik dari manual: situs ramalan cuaca. Satu hal lagi yang terlintas dalam pikiran: pasar saham. Penggunaan SMARTY pada website seperti ini akan menjadi tidak efisien karena seringnya melakukan kompilasi ulang, sehingga template PHPLIB lebih cocok.
Artikel ini bukan untuk membandingkan kedua mesin tersebut, tetapi untuk menggambarkan kelebihan SMARTY. Hal yang paling berarti tentang penggunaannya adalah bahwa ini adalah bagian dari sistem PHP baru. Sebagai kekuatan independen, selain dua sistem utama .NET dan JAVA ONE, ada opsi lain untuk pengembangan web skala besar dan menengah. Bagi proyek GNU, signifikansinya tidak berbeda dengan pasukan Liu dan Deng yang melompat ribuan mil ke Pegunungan Dabie.
Penulis: Yu Boxiang