2011-03-22 19 views
38

फ्लाई/रनटाइम पर जेएस और सीएसएस को कैसे कम करें, ताकि अगर मैं रनटाइम/फ्लाई पर छोटा हो तो मैं अपने सर्वर में मूल कोड संरचना रख सकता हूं।फ्लाई पर जेएस या सीएसएस को कैसे कम करें

+16

आप दो संस्करण क्यों नहीं रखते? और उत्पादन में कमी और विकास में पूर्ण उपयोग करें? –

+3

+1 लुसकान, सर्वोत्तम अभ्यास दो संस्करणों को रखना है। –

+1

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

उत्तर

3

की जरूरत है मैं तो स्वतंत्र रूप से बोलने सकता है;

एक जेएस/सीएसएस फ़ाइल को छोटा करने के लक्ष्य के रूप में यह लक्ष्य होगा कि यह अधिक तेज़ हो जाता है (और कम डिस्क स्थान का भी उपयोग करता है)। रनटाइम पर इसे छोटा करके, वह लाभ पूरी तरह से खो जाएगा।

शायद मैं आपके अंतिम लक्ष्य में गलत हूं, लेकिन यह मेरे दिमाग में पहले आता है।

संपादित करें: @ एएनटी द्वारा पोस्ट ने मेरे लिए इसे स्पष्ट किया।

+2

रनटाइम minified फ़ाइल कैश किया गया है, जाहिर है। फिर भी, अच्छी प्रणाली में, यह वेबसाइट की शुरुआत में छोटा हो गया है। जब आपके 258 बड़े पैमाने पर पुन: संसाधित और आपके अत्यधिक बड़े कोणीय अनुप्रयोग के लिए आर्किटेक्टेड जेएस फाइलें हैं, तो यह आवश्यक है। यह डीबगिंग के लिए रनटाइम होना चाहिए। डीबग = सत्य (आपके सिस्टम के आधार पर), आपको सच्ची फाइलें दिखा सकता है और स्टेपिंग की अनुमति दे सकता है। –

4

HTML5 Boilerplate एक आसान निर्माण स्क्रिप्ट के साथ आता है जो जेएस, सीएसएस, छवियों और बहुत कुछ को संपीड़ित करता है। इसकी जांच - पड़ताल करें!

जैसा कि अन्य उत्तरों में बताया गया है, "असली" ऑन-द-फ्लाई मिनिफिकेशन (प्रत्येक बार अनुरोध किए जाने पर फ़ाइल को गतिशील रूप से संपीड़ित करें) एक बहुत अच्छा विचार नहीं होगा।

+11

जब फ्लाई पर छोटा होता है, तो उसे फ़ाइल में कैश करें। यदि कोई स्रोत फ़ाइल टाइमस्टैम्प बदलता है - इसे फ्लाई पर फिर से छोटा करें और कैश करें। मेरी सभी परियोजनाओं में वर्षों से काम किया। – Meglio

2

Assetic एक अच्छी परियोजना है जो सीएसएस और जावास्क्रिप्ट जैसे संसाधनों को व्यवस्थित करने में सहायता करती है। एक परिचय के लिए here देखें।

आम तौर पर रनटाइम खनन सर्वर सर्वर पर ठोस कैशिंग और ब्राउज़र के रास्ते में क्लाइंट और प्रॉक्सी कैश के उपयोग के साथ जोड़ा जाना चाहिए।

9

मुझे लगता है कि आपका प्रश्न वास्तव में होना चाहिए: मैं अपने लाइव सर्वर को विश्वसनीय रूप से और दोबारा अद्यतन कैसे कर सकता हूं? आपको एक स्वचालित तैनाती स्क्रिप्ट की आवश्यकता है। Personally मैं Fabric पसंद करता हूं, लेकिन अन्य उपकरण उपलब्ध हैं।

एक स्वचालित तैनाती स्क्रिप्ट आपको एक एकल कमांड चलाने की अनुमति देगी जो लाइव सर्वर पर जायेगी और स्रोत कोड अपडेट करेगी, किसी भी तैनाती चरण (जैसे जावास्क्रिप्ट को छोटा करने) चलाएं और वेबसर्वर को पुनरारंभ करें।

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

ऐसे कई कार्यक्रम हैं जो कम से कम प्रदर्शन करते हैं, जिनका उल्लेख अभी तक नहीं किया गया है JSMin है।

+4

"... फाइल पर" * फ्लाई * पर होना चाहिए मुझे लगता है? ;-) –

+1

हूप्स, अच्छी जगह :-) –

+5

यह प्रश्न का उत्तर नहीं देता है और न ही एक अच्छा समाधान देता है। – Ligemer

0

Thats बिल्कुल WebUtilities (जे 2 ईई के लिए) करता है। लिंक यहां दिया गया है।

http://code.google.com/p/webutilities/

यह minification करता है और मक्खी पर मिल जाती हैं। संसाधन में संशोधन नहीं होने पर संसाधन के खनन या पुन: प्रसंस्करण को फिर से शुरू करने से बचने के लिए कैशिंग भी है।यह निम्नलिखित अनुकूलन के साथ भी मदद करता है।

  • जोड़ें जे एस, सीएसएस और छवि फ़ाइलों के लिए शीर्ष लेख समय-सीमा समाप्त ब्राउज़र द्वारा संचित किया जा करने के लिए एक अनुरोध में एक से अधिक जे एस या CSS फ़ाइलें परोसें
  • कम करें जे एस, मक्खी
  • कम करें इनलाइन सीएसएस पर सीएसएस फ़ाइलें और जे एस कोड ब्लॉक
  • आपकी प्रतिक्रिया के लिए वर्ण एन्कोडिंग जोड़े
  • सर्वर संकुचित सामग्री (gzip/संपीड़ित/Deflate) गति लोडिंग के
  • कैश प्रतिक्रियाएं पुन: प्रसंस्करण से बचने से

यदि आप इसे दिलचस्प पाते हैं तो कृपया एक नज़र डालें।

+0

PHP-आधारित सर्वर के लिए ऐसा कुछ भी? – ADTC

-1

मुझे संदेह है कि यह छोटा सा सनकी वास्तव में उस अंतर को बड़ा बनाता है यदि जेएस को ज़्लिब संपीड़न के साथ भेजा जाता है।

सबसे पहले, सफेद स्थान बेहद अच्छी तरह से संपीड़ित होता है, इसलिए कम से कम फाइलसाइजेशन जो कमीकरण से होता है, शायद jQuery जैसे बड़े पुस्तकालयों के साथ केवल एक प्रमुख मुद्दा है (जिसे संभवतः एक सीडीएन से सेवा दी जानी चाहिए जब तक कि आपको हैक किए गए संस्करण की आवश्यकता न हो)।

सेक्रॉली, जेएस आमतौर पर क्लाइंट द्वारा कैश किया जाता है, जब तक कि आप अलग-अलग पृष्ठों पर कई अलग-अलग स्क्रिप्ट का उपयोग नहीं करते हैं, अधिकांश पेज लोड यह एक फर्क नहीं पड़ता है।

खनन के साथ समस्याएं और मैं ऐसा क्यों नहीं करता (jQuery जैसी चीजों को छोड़कर): ए) यह टिप्पणियों को स्ट्रिप करता है, इसलिए जब तक कि आप उन्हें दोबारा नहीं जोड़ते, कॉपीराइट नोटिस जैसी चीजें खो जाती हैं। इसके परिणामस्वरूप लाइसेंस उल्लंघन हो सकता है, क्योंकि कई ओएसएस लाइसेंसों के लिए भी कॉपीराइट की आवश्यकता होती है।

बी) जब कोई समस्या हो, तो यह देखने के लिए अच्छा है कि सर्वर आपके कामकाजी प्रति से अलग होने पर वास्तविक सेवा को देख रहा है। न्यूनतम कोड उस सम्मान में अच्छा नहीं करता है।

मेरी निजी राय - फ्लाई पर zlib संपीड़न, हाँ। minify - केवल वास्तव में बड़ी फ़ाइलों के लिए।

प्रदर्शन जेएस को दुभाषिया में पार्स करना - शायद यदि ब्राउज़र 32 एमबी रैम के साथ ऐप्पल परफॉर्म पर चल रहा है। मैं नहीं खरीदता कि यह ज्यादातर स्क्रिप्ट के साथ एक असली दुनिया अंतर बनाता है। धीमे पृष्ठ जो आमतौर पर धीमे होते हैं क्योंकि बहुत अधिक अक्षम कोड एक ही समय में चल रहे हैं या अधिभारित सर्वरों पर बहुत अधिक अनुरोध कर रहे हैं। (क्या आपको वास्तव में उपयोगकर्ता नाम की उपलब्धता की जांच करने की आवश्यकता है क्योंकि मैं प्रत्येक अक्षर टाइप करता हूं? जब आप किसी भिन्न फ़ील्ड में बदलते हैं या जब मैं सबमिट करता हूं तो आप जांच नहीं सकते हैं ???;)

+0

ए - सच नहीं है। आमतौर पर आप कॉपीराइट टिप्पणियों को रखने के लिए मिनीफायर को कॉन्फ़िगर कर सकते हैं। उदाहरण के लिए, दस्तावेज़ीकरण uglify देखें। – Meglio

+0

मैं असहमत हूं। जब पेज लोड होते हैं तो वे फ़ाइलों को लोड करना बंद कर देते हैं यदि फ़ाइल लोड हो रही है (जब तक async विशेषता उपयोग में नहीं है)। यदि आप धीमे पृष्ठ लोड होने पर DevTools खोलते हैं, तो आप देखेंगे कि यह लटक रहा है क्योंकि एक स्क्रिप्ट को जल्दी से डाउनलोड नहीं किया जा रहा है। स्क्रिप्ट को आकार में काटना कुछ हद तक मदद करता है। –

+1

जैसा कि लोग कहना चाहते हैं, आप "इतिहास के गलत पक्ष" पर थे। छोटाकरण (एक रनटाइम प्रक्रिया - "डीबग" मोडहास दर्ज करने की क्षमता के साथ भी सबसे छोटे अनुप्रयोगों के लिए आवश्यक साबित होता है। अधिकांश कोणीय जेएस अनुप्रयोगों के साथ दर्जन या सैकड़ों जेएस फाइलें होती हैं, आपको गठबंधन/छोटा करना होता है। यह बहस हो गई है वर्षों से अधिक। आपको इसे प्रतिबिंबित करने के लिए अपने रेंट को अपडेट करना चाहिए। –

1

यदि आपके पास पूर्ण नियंत्रण है अपाचे/Ngnix विन्यास, एक बढ़िया विकल्प (सामान्य रूप में)

+0

मैंने पेजस्पेड की कोशिश की और कभी-कभी संकुचित होता है, कभी-कभी नहीं, अन्य 404 देते हैं ... मैंने इस समाधान के साथ छोड़ दिया – marcostvz

5

हैं के साथ अपने मामले में, PageSpeed मॉड्यूल सक्षम करने के लिए किया जाएगा आपका लक्ष्य बनाना है जावास्क्रिप्ट थोड़ा कम पठनीय, और रनटाइम पर ऐसा करते हैं, आप इसे बहुत, सरल, सरल रख सकते हैं। कोड की केवल तीन पंक्तियों के साथ आप कुछ मिलीसेकंड के भीतर कुल खनन की ओर एक लंबा सफर तय कर सकते हैं।

// make it into one long line 
$code = str_replace(array("\n","\r"),'',$code); 
// replace all multiple spaces by one space 
$code = preg_replace('!\s+!',' ',$code); 
// replace some unneeded spaces, modify as needed 
$code = str_replace(array(' {',' }','{ ','; '),array('{','}','{',';'),$code); 

यह किसी भी वाक्यविन्यास की जांच नहीं करता है। इसका उपयोग करने के बाद कोड अमान्य हो सकता है। अपने जेएस में लाइनों के अंत की जांच करें, एक ';' है कहीं याद आ रही है?

+0

मैंने अभी इस संस्करण का परीक्षण किया है और मूल जेएस में एक साधारण टिप्पणी (//) होने पर यह जेएस त्रुटि उत्पन्न करता है। लाइन ब्रेक यहाँ, एम जांचें http://imgur.com/a/TzM30 – err

11

खोज और साइटों अनुकूलन का एक बहुत कुछ करने के बाद मैं सच में सीएसएस फ़ाइलों के लिए इस स्क्रिप्ट का उपयोग करने की सलाह देते हैं:

<style> 
<?php 
    $cssFiles = array(
     "style.css", 
     "style2.css" 
    ); 

    $buffer = ""; 
    foreach ($cssFiles as $cssFile) { 
     $buffer .= file_get_contents($cssFile); 
    } 
    $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer); 
    $buffer = str_replace(': ', ':', $buffer); 
    $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer); 
    echo($buffer); 
?> 
</style> 

यह html में से एक में सभी सीएसएस फ़ाइलों को संपीड़ित और अतीत यह करने के लिए अतिरिक्त अनुरोध की संख्या को कम शून्य। यदि आप एचटीएमएल में शैलियों को पेस्ट करने से पसंद करते हैं तो आप अपनी खुद की संपीड़ित सीएसएस फ़ाइल भी बना सकते हैं।

+0

पर विज़ुअलाइजेशन के लिए y टिप्पणी अगर आप संकुचित सीएसएस को सहेजने और उसे लोड करने के तरीके को जोड़ सकते हैं तो यह बहुत अच्छा है! अगर मैंने ऐसा किया है तो मैं – danielad

+0

अपडेट करूंगा, जबकि एचटीएमएल में सीएसएस चिपकाने से वास्तव में अनुरोधों की मात्रा कम हो जाती है (1 के साथ), यह सीएसएस को कैश होने से रोकता है। एक अच्छा कैशिंग मेगननिज्म अनुरोधों की संख्या और HTML दस्तावेज़ों के आकार को कम करता है। – DavidKunz

+0

यही कारण है कि आपको हमेशा जो बदल रहा है उसे मापना चाहिए। यदि आप अपने महत्वपूर्ण पथ सीएसएस को अच्छे मौके पर रेखांकित कर रहे हैं तो आपको कथित विलंबता में कमी दिखाई देगी, भले ही यह कैश नहीं है, खासकर मोबाइल पर। –

संबंधित मुद्दे