2012-08-07 12 views
10

Google Sites साइट पर काम कर रहा है, जो स्प्रेडशीट से डेटा लेता है और गतिशील रूप से कई चार्ट बनाता है, मैंने उल्लेख किया कि Google Apps स्क्रिप्ट काफी धीमी है। मैंने Cache सेवा का उपयोग कर कोड को प्रोफाइल किया और इसे अनुकूलित किया, जहां यह संभव है। अनुकूलन के बाद चार्टिंग कोड लगभग लेता है। 127 सेकेंड वाले 11 चार्ट बनाने के लिए 3 सेकेंड (275 9 एमएस सबसे तेज़ समय है, जिसे मैंने कभी देखा है)। और इस बार इस मामले के लिए है जब सभी डेटा कैश में रखा जाता है। पहला निष्पादन समय, जो स्प्रेडशीट से डेटा प्राप्त करता है और उन्हें कैश में रखता है, लगभग 10 सेकंड है। प्रोफाइल कोड को सरल स्थानों में पर्याप्त समय (मिलीसेकंड के दसियों) की आवश्यकता होती है। जीएएस प्रदर्शन को मापने के लिए, मैंने एक बहुत ही सरल प्रक्रिया लिखी और जीएएस पर्यावरण में इसे तैनात किया, जैसे कि वेब अनुप्रयोग तैनात किया गया, और Caja Playground में। इसके अलावा मैंने जीएएस इश्यू ट्रैकर को issue जमा किया।जीएएस प्रदर्शन अन्य सर्वर-साइड जावास्क्रिप्ट

Eric Koleda उचित mentioned, कि क्लाइंट पर चल रहे कोड के साथ सर्वर कोड की तुलना करना सही नहीं है। मैं बेंचमार्क कोड को फिर से लिखता हूं और यहां परिणाम हैं। विवरण और स्पष्टीकरण निम्नलिखित हैं।

 
Engine   |List To Map|Adjust|Quick Sort|Sort|Complete| 
GAS    |  138| 196|  155| 38|  570| 
rhino-1.6.5  |   67| 44|  31| 9|  346| 
spidermonkey-1.7|   40| 36|  11| 5|  104| 
  • GAS - एक पंक्ति विभिन्न कार्यों का निष्पादन समय युक्त गैस इंजन पर भाग गया। हर बार मिलीसेकंड में हैं। जीएएस निष्पादन समय काफी व्यापक सीमाओं में गिर जाता है। तालिका में सबसे तेज समय है जो मैंने 5-10 निष्पादन में किया था। सबसे खराब Complete समय, जो मैंने देखा है, 1194 एमएस था। स्रोत कोड here है। परिणाम here हैं।
  • rhino-1.6.5 और spidermonkey-1.7 - पंक्तियों में GAS के समान कार्यों के निष्पादन समय होते हैं लेकिन ideone.com का उपयोग करते हुए संवाददाता जावास्क्रिप्ट इंजन पर निष्पादित होते हैं। इन इंजनों के लिए कोड और समय here और here हैं।

बेंचमार्क कोड में कुछ फ़ंक्शन शामिल हैं।

  • List To Map [listToMap] - एक फ़ंक्शन जो ऑब्जेक्ट्स की सूची को एक कंपाउंड कुंजी वाले मानचित्र में परिवर्तित करता है। यह साइट स्क्रिप्ट से लिया जाता है और लगभग लेता है। चार्टिंग कोड के 9.2% (275 एमएस के 256)।
  • Adjust [adjustData_] - एक फ़ंक्शन जो मैट्रिक्स में सभी दिनांक कॉलम को पूर्वनिर्धारित प्रारूप में किसी टेक्स्ट में परिवर्तित करता है, उसे स्थानांतरित करता है और [[[a], [1]], [[b], [2]]] से [[a, 1], [b, 2]] पर पंक्तियों को परिवर्तित करता है। यह स्क्रिप्ट से भी लिया जाता है और लगभग उपभोग करता है। 30.7% (275 एमएस का 857)।
  • Sort - एक मानक Array.sort फ़ंक्शन, यह परीक्षण में शामिल किया गया है कि यह देखने के लिए कि मानक कार्य कितनी तेजी से काम करता है।
  • Quick Sort [quick_sort] - एक त्वरित सॉर्ट फ़ंक्शन here लिया गया। इसे Array.sort फ़ंक्शन निष्पादन समय के साथ तुलना करने के लिए बेंचमार्क में जोड़ा गया है।
  • Complete [test] - एक फ़ंक्शन जिसमें कार्यों की कॉल, परीक्षण डेटा तैयार करना और ऊपर वर्णित कार्य शामिल हैं। इस बार कच्चे में समय का सारांश नहीं है।

निष्कर्ष: गैस कार्यों निष्पादन समय drifts। जीएएस Complete फ़ंक्शन काम करता है 1.6 धीमी प्रतिस्पर्धी की तुलना में धीमा समय। जीएएस मानक Array.sort फ़ंक्शन दो अन्य इंजनों की सबसे धीमी गति से धीमा है।सारांश में List To Map और Adjust सारांश में धीमे प्रतिस्पर्धी की तुलना में धीमे (334 एमएस बनाम 111 एमएस) हैं। कार्य चार्टिंग फ़ंक्शन के 39.2% (2759 एमएस के 1113) लेते हैं। मुझे उम्मीद नहीं थी कि ये कार्य इतनी धीमी गति से काम करते हैं। उदाहरण के लिए, कैश का उपयोग करके उन्हें अनुकूलित करना संभव है। आइए मान लें कि ऑप्टिमाइज़ेशन के बाद, इन फ़ंक्शन निष्पादन का समय 0 एमएस होगा। इस मामले में चार्टिंग फ़ंक्शन निष्पादन 1646 एमएस है।

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

+0

क्या आपने कई बार अपने टेट चलाए? परिणाम contant हैं? मेरे अनुभव निष्पादन समय से असुरक्षित और संभवतः एकाधिक पैरामीटर –

+0

@ सर्जिनस के आधार पर अत्यधिक चर है, निश्चित रूप से, मैंने दोनों स्क्रिप्ट को कई बार निष्पादित किया। जीएएस निष्पादन समय 8 सेकंड और अधिक है। काजा स्क्रिप्ट निष्पादन समय लगभग 5 एमएस है। – megabyte1024

+0

@ सर्गेन्सस। [यहां] (https://script.google.com/macros/s/AKfycbypGjQbzQDU4qjGsN7tk6wsF3uOmloS1MiDhME-ds2NGqOc3zDM/exec) तैनात जीएएस स्क्रिप्ट और [इसका स्रोत कोड] है (https://script.google.com/d/1WfXGEkU3IHq86dJyXi0QTId4- RPLjzgk7OEin12bh8atpRr78LmqpI6z/संपादन)। – megabyte1024

उत्तर

1

मैं इस प्रदर्शन को दोहराने में सक्षम हूं, और मैं इस मुद्दे पर अपडेट पोस्ट करूंगा जैसा कि मैं उन्हें प्राप्त करता हूं।

+0

एरिक, बहुत बहुत धन्यवाद।मैंने पहले ही समस्या ट्रैकर जवाब पढ़ा है। मैं सहमत हूं कि काजा (क्लाइंट) और सर्वर स्क्रिप्ट की तुलना करना सही नहीं है। मैंने अपनी मूल "बेंचमार्क" स्क्रिप्ट को एक [ideone.com] (http://ideone.com) सर्वर पर चलाने के लिए पोर्ट किया। 'Rhidermonkey-1.7' इंजन और [9 0 एमएस] (http://ideone.com/AE96R) के लिए' rhino-1.6.5 के लिए परिणाम [276 एमएस] (http://ideone.com/L9Ejj) हैं इंजन मैं और भी वास्तविक उदाहरण बनाते हैं - त्वरित क्रम। परिणाम [spidermonkey] (http://ideone.com/YHYq0), [rhino] (http://ideone.com/uCnjX), [GAS] (http://goo.gl/I12sg) ([कोड ] (http://goo.gl/Aa43e))। जारी रखें ... – megabyte1024

+0

महान शोध, और बहुत बेहतर तुलना। ऐसा लगता है कि ऐप्स स्क्रिप्ट उन त्वरित सॉर्ट परीक्षणों में थोड़ा अधिक तुलनीय है, लेकिन अभी भी बहुत अच्छा नहीं है। –

+0

अब मैं अपनी लिपि को अनुकूलित करने के लिए काम करता हूं, बहुत स्पष्ट बाधाओं से छुटकारा पाने के लिए और सैद्धांतिक रूप से प्रदर्शन पर चर्चा करने के लिए लेकिन वास्तविक स्क्रिप्ट का उपयोग करने पर काम करता हूं। – megabyte1024

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