2011-08-25 34 views
8

Tôi đang sử dụng GWT để xây dựng một ứng dụng và tôi đang đối mặt với các vấn đề tốc độ nghiêm trọng với điều tôi nghĩ sẽ khá nhanh. Tôi có một JSONObject với dữ liệu trong cấu trúc sau (nhưng đó là lớn hơn nhiều):Lặp lại chậm thông qua một JSONArray trong GWT

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

Tôi cố gắng để lặp qua các đối tượng JSON để lưu trữ tất cả các thuộc tính thành một ArrayList mà mọi đối tượng node có, với thuộc tính các kích thước khác nhau, từ 4 đến 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(); 
} 

Vòng lặp mà tôi đang thực hiện mất khoảng một phút, và tôi không biết cách cải thiện. Phút đang ở chế độ phát triển, nhưng tôi không biết liệu nó có nhanh hơn không khi tôi biên dịch nó.

+0

Cách bạn phân tích cú pháp cấu trúc JSON là tốt. Một phút có vẻ hơi nhiều cho khoảng 800 hồ sơ. Tuy nhiên tôi có thể đảm bảo rằng hiệu suất là tốt trong chế độ sản xuất (bạn thực sự nên thử nó). Đối với mục đích thử nghiệm, bạn có thể loại bỏ các node.attributeArrayList.add() gọi và xem nếu nó ảnh hưởng đến hiệu suất. BTW bạn đang sử dụng trình duyệt nào trong chế độ phát triển? –

+0

Lý do tôi không sử dụng chế độ sản xuất là vì tôi nhận được lỗi 404 trên cuộc gọi không đồng bộ. Vì tôi không nhận được 404 trên chế độ phát triển, tôi chỉ ở lại với việc sử dụng nó. Tìm kiếm của tôi cho câu trả lời cho thấy nó có thể là một vấn đề SOP, vì vậy tôi đã loại đẩy nó sang một bên. – aelnaiem

+0

404 không liên quan gì đến SOP (vì 404 có nghĩa là đã đạt đến máy chủ). Tuy nhiên, có thể bạn đang sử dụng một đường dẫn tuyệt đối, hoạt động trong chế độ dev vì webapp được triển khai tại ROOT của máy chủ, nhưng không phải ở chế độ prod nơi bạn triển khai webapp với đường dẫn ngữ cảnh không trống ". Nhiều khả năng sửa lỗi là nối đường dẫn của bạn với 'GWT.getHostPageBaseURL()' để nó "tương đối" với trang chủ của bạn, bất cứ nơi nào nó được triển khai. –

Trả lời

0

Bạn sử dụng GWT như thế nào? Bên trong một IDE? Theo kinh nghiệm của tôi, có quá nhiều điểm ngắt làm chậm dòng chảy thực hiện, có thể bạn có thể kiểm tra điều đó không? Đặc biệt khi tôi thấy rằng trong sản xuất có vẻ tốt ...

0

Nếu mọi thứ khác không thành công, bạn luôn có thể viết bằng Javascript gốc và gọi nó qua JSNI.

3

Bạn đã thử sử dụng lớp phủ chưa?

GWT Coding Basics - JavaScript Overlay Types

Bạn có thể tạo ra các loại lớp phủ khá dễ dàng: -

// 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(); 
    } 
} 

Rất dễ sử dụng và tôi nghĩ rằng sẽ nhanh hơn nhiều so với sử dụng đối tượng JSONObject.

Các vấn đề liên quan