2010-06-01 26 views
34

मैं ऐसे पृष्ठ में कुछ साधारण क्लाइंट-साइड प्रदर्शन tweaks ढूंढने की कोशिश कर रहा हूं जो लाखों मासिक पृष्ठ दृश्य प्राप्त करता है। मेरे पास एक चिंता है जो सीएसएस सार्वभौमिक चयनकर्ता (*) का उपयोग है।सार्वभौमिक चयनकर्ता का प्रदर्शन प्रभाव क्या है?

उदाहरण के लिए, की तरह एक बहुत ही सरल HTML दस्तावेज़ पर विचार निम्नलिखित:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>Example</title> 
    <style type="text/css"> 
     * { 
     margin: 0; 
     padding: 0; 
     } 
    </head> 
    <body> 
    <h1>This is a heading</h1> 
    <p>This is a paragraph of text.</p> 
    </body> 
</html> 

सार्वभौमिक चयनकर्ता ऊपर घोषणा body, h1 और p तत्वों के लिए, के बाद से उन में केवल होते हैं लागू होगी दस्तावेज़।

body, h1, p { 
    margin: 0; 
    padding: 0; 
} 

या यह बिल्कुल वैसा ही शुद्ध प्रभाव होगा:

सामान्य तौर पर, मैं इस तरह के रूप में एक शासन से बेहतर प्रदर्शन देखना होगा?

क्या सार्वभौमिक चयनकर्ता अधिक काम करता है जिसे मुझे पता नहीं हो सकता है?

मुझे एहसास है कि इस उदाहरण में प्रदर्शन प्रभाव बहुत छोटा हो सकता है, लेकिन मुझे ऐसा कुछ सीखने की उम्मीद है जो वास्तविक दुनिया की स्थितियों में अधिक महत्वपूर्ण प्रदर्शन सुधारों का कारण बन सकती है।

मैं दस्तावेज़ में बाद में अन्य शैलियों के साथ सार्वभौमिक चयनकर्ता नियम में शैलियों को ओवरराइड करने का इरादा नहीं रखता - यानी, इसे त्वरित और गंदे रीसेट स्टाइलशीट के रूप में उपयोग करना। मैं वास्तव में सार्वभौमिक चयनकर्ता का उपयोग करने की कोशिश कर रहा हूं जैसा कि मुझे लगता है कि यह इरादा है - एक बार और सभी के लिए दस्तावेज़ में सभी तत्वों के लिए एक नियम सेट लागू करने के लिए।

आखिरकार, मैं यह निर्धारित करने की उम्मीद कर रहा हूं कि क्या सार्वभौमिक चयनकर्ता के बारे में कुछ धीमी गति से धीमा है या अगर यह अत्यधिक दुरुपयोग के कारण खराब रैप है। यदि * { margin: 0; } सचमुच body, h1, p { margin: 0; } के बराबर है, तो यह मेरे प्रश्न का उत्तर देगा, और मैं पूर्व के साथ जाने के बारे में जानूंगा क्योंकि यह अधिक संक्षिप्त है। यदि नहीं, तो मैं समझना चाहता हूं कि सार्वभौमिक चयनकर्ता धीरे-धीरे क्यों प्रदर्शन करता है।

+3

एक प्रदर्शन दृष्टिकोण से, यह _ever__ के लिए एक विशेषता के लिए _ever_ बेहतर है, केवल अंततः इसे फिर से सेट करने के लिए? ब्राउजर डिफॉल्ट सीखना आपको अधिक समय नहीं लगेगा - आप सीएसएस फाइलों को "रीसेट" से संकेत प्राप्त कर सकते हैं, लेकिन मैं वास्तव में एक का उपयोग करने के लिए अब तक नहीं जाऊंगा। ओपन सोर्स ब्राउजर में ओपन सोर्स सीएसएस डिफॉल्ट हैं जिन्हें आप देख सकते हैं। – reisio

+0

मुझे यकीन नहीं है कि आपने मेरा प्रश्न समझा है। मैं रीसेट करने की तलाश नहीं कर रहा हूं और फिर शैलियों को फिर से लागू कर रहा हूं, बल्कि पृष्ठ पर प्रत्येक तत्व के लिए एक नियम लागू करता हूं। मेरा सवाल यह है कि क्या यह सार्वभौमिक चयनकर्ता का उपयोग करने के लिए तकनीकी रूप से समान है क्योंकि यह प्रत्येक तत्व को अलग-अलग चुनने के लिए है, या यदि किसी भी कारण से प्रदर्शन जुर्माना लगाता है। – Bungle

+0

'*' स्पष्ट रूप से स्पष्ट रूप से 'body, h1, p' के बराबर नहीं है। * केवल * कारण यह धीरे-धीरे क्यों करता है क्योंकि आप सब कुछ के लिए शैलियों को लागू करते हैं, जबकि कोई अन्य चयनकर्ता आपको डीओएम में तत्वों के एक विशिष्ट सबसेट तक सीमित करता है। लेकिन असली सवाल यह है कि, क्या यह इतना धीमा है कि एक ब्राउज़र बहुत अधिक शैलियों को लागू करने से उत्तरदायी नहीं होगा? मुझे उस पर बेहद शक़ है। यह भी देखें: [* {बॉक्स-आकार: सीमा बॉक्स} FTW] (http://paulirish.com/2012/box-sizing-border-box-ftw) – BoltClock

उत्तर

45

आधुनिक ब्राउज़रों में प्रदर्शन प्रभाव नगण्य है, बशर्ते आप प्रत्येक तत्व (जैसे बॉक्स-छाया, जेड-अक्ष रोटेशन) पर धीमी प्रभाव लागू न करें। मिथक कि सार्वभौमिक चयनकर्ता धीमा है दस साल पहले जब यह धीमा था, एक हैंगओवर है।

संदर्भ: http://www.kendoui.com/blogs/teamblog/posts/12-09-28/css_tip_star_selector_not_that_bad.aspx

1

जेनेरिक चयनकर्ताओं से बचने से हमेशा आपके पृष्ठ प्रतिपादन में तेजी आएगी। वाइल्डकार्ड * धीमा है, खासकर जब आपके पृष्ठ जटिल घोंसले बन जाते हैं और आपका तत्व skyrocket की गणना करता है।

आपको हमेशा निम्नतम स्तर पर एक आईडी निर्दिष्ट करना चाहिए जो आप संभवतः कर सकते हैं (मुझे एहसास है कि यह असंभव हो जाता है, विशेष रूप से डेटाबेस परिणामों जैसे चीजों से निपटने के दौरान)। मतलब यह है कि इन नियमों की तलाश में है कि माता-पिता में हर तत्व के माध्यम से लूप नहीं है प्रतिपादन इंजन .mysuperclass के प्रत्येक तत्व के लिए - लेकिन जब आप की तरह

.mysuperclass ul li p a 

चयनकर्ताओं का उपयोग आप एक वर्ग चार सामान्य चयनकर्ताओं के बाद की है।

संक्षेप में, मेरा उत्तर आपके सीएसएस के साथ जितना संभव हो उतना सटीक होना चाहिए, और जहां तक ​​आप अपने चयनकर्ताओं के साथ डोम में ड्रिल कर सकते हैं। वाइल्डकार्ड और जेनेरिक से बचें।

+0

धन्यवाद, जारोड। मुझे लगता है कि मैं अपने प्रश्न में बेहतर जोर दे सकता हूं कि मैं अपने सीएसएस नियमों के साथ पृष्ठ पर हर तत्व को लक्षित करना चाहता हूं - यानी सार्वभौमिक चयनकर्ता, जैसा कि मैं समझता हूं, वही है जो मैं इस मामले में चाहता हूं। चूंकि मैंने हमेशा सार्वभौमिक चयनकर्ता को धीमा होने के बारे में भी सुना है, इसलिए मुझे यह जानने की उम्मीद है कि क्या वह धीमी गति से चयनकर्ता के लिए निहित है, या सिर्फ इसके सामान्य उपयोग पर आधारित है (उदाहरण के लिए, एक त्वरित और गंदे रीसेट स्टाइलशीट का पालन किया जाएगा स्टाइल ओवरराइड द्वारा)। – Bungle

+0

मैं देखता हूं। मैं क्रोम के डेवलपर टूल का उपयोग करके कुछ स्पीड टेस्ट करने का सुझाव दूंगा। इसे विस्तृत करें और स्पष्ट टैग परिभाषा बनाम वाइल्डकार्ड चयनकर्ता का उपयोग करने के लिए परिणाम देखें। क्रोम आपको एक प्रक्रिया को तोड़ देगा कि प्रत्येक प्रक्रिया कितनी देर तक लेती है। –

+12

मैं आपके चयनकर्ताओं के साथ * जितना संभव हो उतना विशिष्ट "होने के खिलाफ * सलाह दूंगा। भविष्य में जब आप शैलियों में परिवर्तन करना चाहते हैं या जब आपके पास अधिक अपवाद हैं, तो आप उन चयनकर्ताओं को ओवरराइड करना चाहेंगे, जो अधिक विशिष्ट हैं जितना अधिक कठिन हो जाते हैं। विशिष्टता कम रखें, और अधिक तत्व और कक्षा चयनकर्ताओं का उपयोग करें। http://numiko.com/labs/2011/07/css-specificity-wars/ – chharvey

2

मैं समझता हूँ कि वाइल्डकार्ड एक प्रदर्शन प्रभाव पड़ता है, लेकिन छोटे साइटों पर प्रभाव नगण्य है। प्रगतिशील वृद्धि के आधार पर साइट बनाने के लिए वाइल्डकार्ड बहुत उपयोगी उपकरण हैं। जाहिर है, एचटीएमएल *, वास्तव में बड़ा साइटों पर प्रभाव डालता है प्रदर्शन की तरह कुछ का उपयोग कर, लेकिन यह अधिक विशिष्ट बनाने, इस तरह के रूप #element_id *, जल्दी से बच्चे तत्वों के लिए सार्वभौमिक परिवर्तन करने के लिए मदद करता है।

वाइल्डकार्ड सब के बाद एक कारण के लिए नहीं है। इसका उपयोग करने के बजाय आपको समझना होगा कि इसका उपयोग न करने से ज्यादा फायदेमंद होगा। ये संदर्भ पर निर्भर करता है।

मैं वाइल्डकार्ड और सामान्य चयनकर्ताओं का उपयोग जब सीएसएस टेम्पलेट्स बना रही है। कस्टम शैलियों का उपयोग करके एक अपरिचित वर्डप्रेस थीम के अंदर तत्वों की एक श्रृंखला को जल्दी से बदलने का यह एक शानदार तरीका भी है।

भी बूटस्ट्रैप, जो लोकप्रिय और सुव्यवस्थित है, सही परिस्थितियों में वाइल्डकार्ड का उपयोग करता है।

संदर्भ:

  • http://getbootstrap.com/css/
  • Gustafson, ए 2015 अनुकूली वेब डिजाइन: क्रमिक परिवर्धन के साथ रिच अनुभव क्राफ्टिंग। बर्कले, (सीए): न्यू राइडर्स।
संबंधित मुद्दे