CSS Seçicileri, tarayıcı motorları tarafından sağdan sola eşleştirilir. Bu yüzden önce çocukları bulurlar ve daha sonra kuralın geri kalan kısmıyla eşleşip eşleşmediklerini görmek için ebeveynlerini kontrol ederler.
- Bu neden?
- Sadece spec söylediği için mi?
- Soldan sağa değerlendirildiyse nihai yerleşimi etkiler mi?
Bana göre bunu yapmanın en basit yolu, en az sayıda öğeye sahip seçicileri kullanmak olacaktır. Önce kimlikler (sadece 1 öğe döndürmeleri gerektiği için). Sonra sınıflar veya en az sayıda düğüme sahip bir öğe olabilir - örneğin, sayfada yalnızca bir açıklık olabilir, bu nedenle açıklığa başvuran herhangi bir kuralla doğrudan bu düğüme gidin.
İşte iddialarımı destekleyen bazı bağlantılar
- http://code.google.com/speed/page-speed/docs/rendering.html
- https://developer.mozilla.org/en/Writing_Efficient_CSS
Öyle görünüyor ki bir çocuğun tüm ebeveynlerinden ziyade ebeveynin tüm çocuklarına (çok sayıda olabilir) bakmak zorunda kalmamak için bu şekilde yapılır. DOM derin olsa bile, RTL eşleştirmesinde çoklu değil, seviye başına yalnızca bir düğüme bakar. CSS seçicileri LTR veya RTL'yi değerlendirmek daha kolay / hızlı mı?
#foo
seçicinin tüm bu düğümlerle eşleşmesi gerekir. jQuery, $ ("# foo") öğesinin her zaman yalnızca bir öğe döndüreceğini söyleme seçeneğine sahiptir, çünkü kendi API'lerini kendi kuralları ile tanımlarlar. Ancak tarayıcıların CSS uygulaması gerekir ve CSS belgedeki her şeyi verilen kimlikle eşleştirdiğini söyler.
querySelectorAll
) kullanır . Diğer durumlarda Sizzle kullanılır. Sizzle birden fazla kimlikle eşleşmiyor, ancak QSA eşleşiyor (AYK). İzlenen yol seçiciye, içeriğe, tarayıcıya ve sürümüne bağlıdır. jQuery's Query API, "Önce Yerel, Çift Yaklaşım" olarak adlandırdığım şeyi kullanır. Bununla ilgili bir makale yazdım, ama bitti. Burada bulabilmenize rağmen: fortybelow.ca/hosted/dhtmlkitchen/JavaScript-Query-Engines.html