Tbh. la penalización de rendimiento es insignificante ... Realmente dudo que vayas a hacer 100.000 búsquedas por id. Si lo haces, entonces el rendimiento de QSA es lo último que debes mirar.
En cuanto a por qué, agregar un if/else extra puede hacer que las búsquedas id sean más efectivas, pero luego otros selectores css serán una fracción (aún insignificante) más lenta. ¿Por qué optimizar QSA para hacer frente a las consultas de identificación cuando hay un método especializado para hacer exactamente eso mucho más rápido de todos modos.
En cualquier caso, los navegadores apuntan a la velocidad y omitir cosas como esta hace que los gráficos de rendimiento general se vean mucho mejor. En esta carrera de referencia, REALMENTE es sobre cada milisegundo, pero para los desarrolladores ... sean realistas, otros puntos de referencia son más importantes, el rendimiento de QSA no debería ser un factor más.
En cuanto a la conveniencia del desarrollador, funciona, sigue siendo tan rápido que no lo notarás en las aplicaciones reales (te reto a que me muestres dónde es VISIBLE VISUALMENTE sin dejar de ser un programa sensato; o).
No he visto la fuente de esos navegadores, pero ¿está seguro de que no se asignan directamente? Habrá una penalización de rendimiento para analizar la cadena y calcular si solo es una identificación directa. – Quentin
Chicos si hace clic a través de esa prueba jsperf vinculada en la pregunta, debe quedar claro que si el navegador * intenta * derivar un selector '#id' a la resolución 'getElementById()', está haciendo un * terrible * trabajo de eso Probablemente no lo intente. – Pointy
Bien, aquí hay algunas pruebas: [WebKit * does * map 'querySelector' on' document.getElementById'] (http://codesearch.google.com/codesearch/p#OAMlx_jo-ck/src/third_party/WebKit/WebCore/ dom/Node.cpp & l = 1580 & exact_package = chromium) – Gumbo