2011-08-25 11 views
8

में जेएसओएनएआरए के माध्यम से धीमी पुनरावृत्ति, मैं एक एप्लीकेशन बनाने के लिए जीडब्ल्यूटी का उपयोग कर रहा हूं, और मुझे कुछ तेज गति के मुद्दों का सामना करना पड़ रहा है जो मैंने सोचा था कि बहुत तेज़ होगा। मैं निम्नलिखित संरचना में डेटा के साथ एक JSONObject है (लेकिन यह बहुत बड़ा है):जीडब्ल्यूटी

{"nodeData" : [ 
       { "name":"one", "attributes":["uno","dos"]}, 
       {"name":"two", "attributes":["tres"]} 
       ] 
} 

मैं एक ArrayList प्रत्येक नोड वस्तु है जो में सभी विशेषताओं स्टोर करने के लिए JSON ऑब्जेक्ट के माध्यम से पुनरावृति करने के लिए कोशिश कर रहा हूँ, विशेषता के साथ पाश मैं क्रियान्वित कर रहा हूँ के लिए 4 से 800.

JSONObject JSONnode = nodeData.get(i).isObject(); 
Node node = new Node(JSONnode.get("name").toString(); 
JSONArray attributeArray = JSONnode.get("Attributes").isArray(); 
int attributeSize = attributeArray.size(); 


for(int j = 0; k < attributeSize; j++){ 
    node.attributeArrayList.add(attributeArray.get(j).toString(); 
} 

से लेकर आकार एक मिनट है, जो बहुत लंबा लगता है के बारे में ले जा रहा है, और मुझे यकीन है कि यह कैसे सुधार करने के लिए नहीं कर रहा हूँ। यह मिनट विकास मोड में है, लेकिन मुझे नहीं पता कि यह संकलित होने पर यह तेज़ होगा या नहीं।

+0

जिस तरह से आप JSON संरचना को पार्स कर रहे हैं ठीक है। लगभग 800 रिकॉर्ड के लिए एक मिनट थोड़ा सा लगता है। हालांकि मैं गारंटी दे सकता हूं कि उत्पादन मोड में प्रदर्शन ठीक है (आपको वास्तव में इसे आजमाएं)। परीक्षण उद्देश्यों के लिए आप node.attributeArrayList.add() कॉल को हटा सकते हैं और देख सकते हैं कि यह प्रदर्शन को प्रभावित करता है या नहीं। बीटीडब्लू आप किस ब्राउज़र का विकास मोड में उपयोग कर रहे हैं? –

+0

कारण मैं उत्पादन मोड का उपयोग नहीं कर रहा हूं क्योंकि मुझे एसिंक कॉल पर 404 त्रुटि मिल रही है। चूंकि मुझे विकास मोड पर 404 नहीं मिल रहा है, इसलिए मैं इसका उपयोग कर रहा हूं। उत्तरों के लिए मेरी खोज ने सुझाव दिया कि यह एक एसओपी समस्या हो सकती है, इसलिए मैंने इसे अलग करने के लिए धक्का दिया है। – aelnaiem

+0

ए 404 के पास एसओपी के साथ कुछ लेना देना नहीं है (क्योंकि 404 का मतलब है कि सर्वर पहुंचा है)। हालांकि यह बहुत अच्छी तरह से हो सकता है कि आप एक पूर्ण पथ का उपयोग कर रहे हैं, जो देव मोड में काम करता है क्योंकि वेबपैप सर्वर के रूट पर तैनात किया जाता है, लेकिन प्रोड मोड में नहीं, जहां आपने वेबपैप को एक खाली "संदर्भ पथ के साथ तैनात किया है "। सबसे अधिक संभावना है कि आपके पथ को 'GWT.getHostPageBaseURL()' में जोड़ना है, इसलिए यह आपके होस्ट पेज पर "सापेक्ष" है, जहां भी इसे तैनात किया गया है। –

उत्तर

0

आप जीडब्ल्यूटी का उपयोग कैसे करते हैं? एक आईडीई के अंदर? मेरे अनुभव में, बहुत से ब्रेकपॉइंट्स निष्पादन प्रवाह को धीमा कर देते हैं, क्या आप इसे देख सकते हैं? विशेष रूप से मैं जब देखते हैं कि उत्पादन में यह ठीक लग रहा है ...

0

बाकी सब विफल रहता है, तो आप हमेशा कि लिखना देशी जावास्क्रिप्ट में और JSNI के माध्यम से यह कह सकते हैं।

3

क्या आपने ओवरले का उपयोग करने का प्रयास किया है?

GWT Coding Basics - JavaScript Overlay Types

आप बहुत आसानी से ओवरले प्रकार बना सकते हैं: -

// An overlay type 
class Customer extends JavaScriptObject { 

    // Overlay types always have protected, zero-arg ctors 
    protected Customer() { } 

    // Typically, methods on overlay types are JSNI 
    public final native String getFirstName() /*-{ return this.FirstName; }-*/; 
    public final native String getLastName() /*-{ return this.LastName; }-*/; 

    // Note, though, that methods aren't required to be JSNI 
    public final String getFullName() { 
    return getFirstName() + " " + getLastName(); 
    } 
} 

उपयोग करने के लिए बहुत आसान और मैं JSONObject वस्तुओं का उपयोग करने से बहुत तेजी से किया जाएगा लगता है।