Nếu mã JavaScript duy nhất bạn viết sẽ truy cập vào json bên ngoài, thì nó sẽ đánh bại điểm sử dụng trình biên dịch. Tuy nhiên, nếu bạn thậm chí có một số lượng nhỏ JavaScript không hoạt động ngoài việc phân tích cú pháp json của bạn thành các mô hình miền thì trình biên dịch có thể hữu ích.
Trong trình phân tích cú pháp của chúng tôi, chúng tôi truy cập dữ liệu của chúng tôi thông qua ký hiệu khung để chúng tôi có thể nhận dữ liệu chính xác. Từ đó chúng tôi đưa dữ liệu vào các mô hình của riêng mình, mà chúng tôi sử dụng. ký hiệu trên. Chúng được đổi tên một cách hoang dại, cho chúng ta kiểm tra kiểu và tất cả sự tốt lành đó.
Chỉnh sửa >> Đối với dữ liệu tôi sử dụng XHRManager. Đây là một lớp học nghiêm túc. Khi tôi nhận được một sự kiện dữ liệu từ hồ bơi đó, tôi xử lý nó như sau.
/**
* @private
* @param {goog.events.Event} evt The event recieved from the XhrIo.
*/
mypath.MyClass.prototype.onDataRecieved_ = function(evt) {
if (evt.type != 'complete') return;
var xhrIo = evt.target;
var data = xhrIo.getResponseJson();
//do somethign!
};
Tôi phải cảnh báo bạn, việc xử lý XHRManager của tôi vẫn để lại một chút công bằng mong muốn. Tôi chỉ tái cấu trúc mã của mình tuần trước để bắt đầu sử dụng nó.
Đối với phân tích tôi làm điều này: (Đây là một số công cụ thô từ cơ sở mã của tôi, vì vậy bỏ qua một số xấu xí.)
our.class.path.ContestJsonParser.prototype.setContestProperties =
function(contest, element) {
contest.setName(element['description']);
/**
* @type {!number}
*/
var timeAsInt = element['startTime'];
contest.setScheduledStartTime(timeAsInt);
var clockModel = contest.getClockModel();
if (goog.isDefAndNotNull(element['period'])) {
clockModel.setMatchState(element['period']['periodName']);
clockModel.setStateStartTime(element['period']['periodStartTime']);
}
//TODO (Johan) this needs to change today to consider the rest of the stats
//information
var stats = element['statistics'];
if (goog.isObject(stats) && goog.isDefAndNotNull(stats['score'])) {
var score = stats['score'];
contest.setMatchScore(score['home'], score['away']);
} else {
contest.setMatchScore(undefined, undefined); // clears score.
}
};
Bạn có thường xuyên tuần tự hóa dữ liệu của mình qua json.stringify và json.parse không? điều này cực kỳ kém hiệu quả, lý do của bạn để làm điều này là gì. Mã của tôi sẽ không tạo ra vô số ý nghĩa với bạn trong bối cảnh, nhưng chúng tôi tách riêng việc tạo mô hình từ phân tích cú pháp bằng cách sử dụng mô hình trình xây dựng http://en.wikipedia.org/wiki/Builder_pattern. Tôi thành thật nghĩ rằng cốt lõi của vấn đề của bạn có thể là bạn sử dụng stringify + phân tích cú pháp, giải thích cho tôi những gì bạn đang hướng tới để giải quyết với điều này. – lennel
Có, tôi sử dụng bộ nối tiếp gốc. Một lựa chọn tốt hơn là gì? Tôi đọc ở đâu đó sử dụng thư viện chậm hơn so với sử dụng phân tích gốc. Các đối tượng đến và đi qua ajax và cũng đến và từ lưu trữ cục bộ. – frenchie
Tôi vừa mới sửa đổi bình luận của tôi, kiểm tra lại và giải thích cho tôi lý do tại sao bạn sử dụng Json.stringify và Json.parse toàn bộ thời gian. – lennel