Saya sering bertanya-tanya mengapa parsing ketat tidak dipilih saat membuat HTML. Untuk sebagian besar riwayat Internet, browser telah menerima segala jenis markup dan mencoba yang terbaik untuk menguraikannya. Proses ini menurunkan kinerja, memungkinkan orang untuk menulis omong kosong, dan membuatnya sulit menghentikan fitur usang.
Apakah ada alasan khusus mengapa HTML tidak diurai secara ketat?
Jawaban:
Alasannya sederhana: Pada saat browser grafis pertama, NCSA Mosiac dan kemudian Netscape Navigator, hampir semua HTML ditulis dengan tangan. Para pembuat browser (Netscape dibangun oleh orang-orang ex-Mosaic) dengan cepat mengakui bahwa menolak untuk membuat HTML yang salah akan ditahan terhadap mereka oleh pengguna, dan voila!
sumber
Karena membuat tebakan terbaik adalah hal yang benar untuk dilakukan, dari sudut pandang pembuat browser. Pertimbangkan situasinya: idealnya, HTML yang Anda terima sepenuhnya benar dan spesifik. Itu keren. Tetapi bagian yang menarik adalah apa yang terjadi ketika HTML tidak benar; karena kita berurusan dengan input dari sumber yang tidak memiliki pengaruh, sungguh, kita harus siap untuk ini. Sekarang ketika itu terjadi, apa yang bisa kita lakukan? Kami memiliki dua opsi: a) gagal, dan b) melakukan upaya terbaik untuk pulih dari kesalahan. Jika kami gagal, pengguna tidak memiliki apa-apa selain pesan kesalahan yang tidak berguna, dan tidak ada yang dapat mereka lakukan, karena mereka tidak mengontrol server. Jika kami melakukan upaya terbaik, pengguna memiliki setidaknya apa yang dapat kami buat dari halaman tersebut, dan seringkali tebakannya sebagian besar benar.
Satu-satunya masalah sebenarnya dengan ini adalah ketika Anda memerlukan pesan kesalahan, yang biasanya dalam situasi pengembangan - Anda ingin memastikan HTML yang Anda hasilkan benar, dan karena "berfungsi di browser X" tidak sama dengan "benar", kami tidak bisa hanya menjalankannya melalui browser dan melihat apakah itu berfungsi: kami tidak dapat membedakan antara HTML yang benar dan HTML yang salah yang telah diperbaiki oleh browser untuk Anda. Ini adalah masalah yang bisa dipecahkan; ada plugin browser yang melaporkan pelanggaran standar, ada validator W3C, dan banyak alat serupa lainnya.
sumber
Penulis HTML dan alat pembuat menghasilkan markup jelek. Peramban melakukan yang terbaik dengan alasan kompetitif: peramban yang gagal merender sebagian besar laman web dengan cara apa pun yang masuk akal akan ditolak oleh pengguna, yang tidak akan peduli dengan kesalahan siapa itu.
Ini agak berbeda dari apa yang dilakukan implementasi bahasa pemrograman. Kompiler dan penerjemah bekerja pada kode yang dapat dianggap ditulis oleh seorang programmer, sedangkan semua orang dan saudaranya dapat menulis HTML dengan pelatihan minimal, atau tanpa. Markup HTML adalah kode, dalam arti tertentu, tetapi merupakan data daripada instruksi bahasa pemrograman, dan tradisi (baik) dalam perangkat lunak adalah toleran terhadap data.
XHTML pada prinsipnya menerapkan aturan penguraian yang ketat (XML), sehingga dokumen XHTML yang disajikan dengan tipe konten XML hanya akan ditampilkan jika dokumen tersebut dibuat dengan baik dalam arti XML - jika tidak, hanya kesalahan pertama yang dikomunikasikan kepada pengguna. Ini tidak pernah menjadi populer di web authoring - hampir semua "XHTML" sekitar berfungsi sebagai teks / html dan diproses sebagai sup tag tradisional dengan cara yang sangat liberal, hanya dengan beberapa keanehan baru.
sumber
HTML authors and authoring tools produce crappy markup.
- mereka melakukannya karena browser menerimanya. Jika sejak awal peramban tidak menerimanya - maka alat & penulis ini tidak akan bisa lolos dengan memproduksi markup jelekPendeknya adalah bahwa HTML didasarkan pada bahasa markup non-hyperlink lainnya yang disebut SGML yang sering digunakan untuk dokumentasi dan manual dan sejenisnya.
Dari sebuah artikel tentang sejarah HTML:
Mencatat bagian yang saya cetak tebal, pada dasarnya, mereka menerapkan subset dari tag yang tersedia di sistem SGML yang mereka kenal, menambahkan tag anchor <a> baru, dan memilih untuk mengabaikan salah satu dari banyak tag yang mereka tidak lakukan. t peduli atau ingin mendukung karena alasan apa pun (seperti tag untuk daftar pustaka, xmp untuk tag "contoh", "kotak" untuk menggambar kotak di sekitar blok teks, dll). Jadi cara paling sederhana untuk melakukannya adalah dengan memaafkan markup yang tidak diketahui oleh parser dan mengabaikan markup yang tidak diketahui sebaik mungkin, terlepas dari apakah penyebabnya adalah pengguna mengetikkan markup buruk, atau cara termudah tercepat untuk mengubah dokumen yang ada menjadi format HTML baru ini adalah untuk menambahkan beberapa hyperlink ke dokumen SGML yang ada, dan mengabaikan tag apa pun yang tidak didukung atau diterapkan.
sumber
Ini sebagian sisa bersejarah dari perang browser
IE dan netscape berlomba untuk mengambil alih pasar dan terus merilis fitur-fitur baru yang terus menjadi semakin "luar biasa", dan dipaksa untuk menerima halaman yang dirancang untuk browser lain.
Ini berarti bahwa browser menerima dan mengabaikan tag yang tidak dikenal secara diam-diam, setelah komite mulai terlibat ... yah Anda memiliki sebuah komite yang merancang hal - hal dan sebagai hasilnya banyak versi yang berbeda (dengan beberapa spesifikasi yang ditulis secara ambigu) di mana browser ingin mendukung sebagian besar mereka, dan membuat parser terpisah untuk setiap versi akan menjadi sangat besar. Jadi (relatif) lebih mudah menggunakan pengurai tunggal dengan mode yang berbeda.
Untuk bagian lain, netscape dan IE ingin agar html dapat diakses oleh orang awam (seperti halnya tren saat itu) yang berarti mencoba melakukan apa yang ingin dilakukan pengguna alih-alih apa yang dia katakan harus dilakukan dan tersandung setiap tag yang menggantung.
Yang memperburuk masalah adalah bahwa ada juga beberapa situs "tutorial" yang mengajarkan hal yang salah dan berpikir mereka benar karena apa yang mereka ajarkan berhasil.
Pada akhirnya ini berarti bahwa jika Anda sekarang membuat browser dengan penguraian html ketat hanya 99% dari situs di luar sana tidak akan berfungsi.
sumber
<o24wowzo>
tag tetapi menolak keras pada tetapi, menolak keras pada<o23wowzo>
, tetapi seperti sebuah desain akan merusak aspek "yang bisa dibaca manusia" dari HTML.Yah kami mencoba membuat opsi ketat yang bagus di tahun 000-an tapi itu tidak berhasil karena orang-orang yang mengikuti "praktik terbaik" secara membabi buta, menyalahkan browser ketika markup yang salah mereka hancur berkeping-keping dalam mode ketat. Dan vendor browser tidak suka disalahkan.
Mereka mengklaim itu karena mereka ingin web lebih mudah diakses oleh non-profesional tetapi tidak ada yang berhenti menggunakan HTML 4 dalam bentuk yang paling lunak.
Yang mengatakan, Anda masih dapat melayani HTML5 sebagai XML jika Anda menginginkan tata letak gaya yang ketat. IMO itu bisa menjadi cara yang baik untuk menuai manfaat melakukan tata letak atau UI bekerja dalam mode yang lebih ketat sebelum Anda meneruskannya kepada orang lain yang mungkin atau mungkin tidak ingin itu ketat tanpa risiko nyata (kecuali mereka merobek dokumennya karena mereka benar-benar menyukai mode quirks - pada tahun 2017 (saat pengeditan ini) mereka harus ditembak. Jadi masih ada dasarnya tetapi lakukan penelitian. Sepertinya saya ingat ada beberapa peringatan yang tidak kita miliki dengan XHTML yang tidak benar-benar berdampak pada tata letak pekerjaan. Hanya saja jangan menyebarkan berita bahwa itu "satu-satunya cara untuk melakukannya dengan benar" atau twits yang setuju dengan pembicaraan semacam itu akan mendongeng ide, menyalahkan browser lagi, dan mereka akan mengambil gigi dari satu-satunya alternatif ketat yang tersisa. (2017 edit:
http://mathiasbynens.be/notes/xhtml5
sumber