2009-06-08 29 views
11

Tôi sẽ thực hiện một số công việc trên một chuỗi được phân tách bằng dòng. Cái nào sẽ nhanh hơn, để phân chia văn bản thông qua String.split trước và sau đó đi bộ trên mảng kết quả hoặc trực tiếp đi bộ toàn bộ văn bản thông qua một điểm kinh nghiệm reg và xây dựng mảng cuối cùng trên đường?Câu hỏi hiệu suất: String.split và sau đó đi bộ trên mảng, hoặc RegExp?

Trả lời

12

Vâng, cách tốt nhất để nhận câu trả lời là chỉ mất 2 phút và viết một vòng lặp theo cả hai nghìn lần và kiểm tra xem con bọ nào có tốc độ nhanh hơn;)

Tôi đã tối ưu hóa rất nhiều chuỗi trong khi làm việc trên MXHR và theo kinh nghiệm của tôi, các phương thức String đơn giản nhanh hơn đáng kể so với RegExps trong các trình duyệt hiện tại. Sử dụng RegExps trên các chuỗi ngắn nhất có thể và làm mọi thứ bạn có thể có thể với các phương thức String.

Ví dụ, tôi sử dụng con số này ít trong mã hiện tại của tôi:

var mime = mimeAndPayload.shift().split('Content-Type:', 2)[1].split(";", 1)[0].replace(' ', ''); 

Đó là xấu xí như địa ngục, nhưng tin hay không đó là nhanh hơn so với RegExp tương đương dưới tải cao đáng kể.

+1

Tôi xem xét thử nghiệm thông qua Firebug nhưng thực sự không tin tưởng thời gian đo lường của JS. Cảm ơn bạn rất nhiều cho câu trả lời của bạn với một ví dụ hỗ trợ;) – BYK

+0

Vì vậy, không tin tưởng firebug - tạo và so sánh một vài đối tượng ngày cũng như – annakata

+0

Vâng tôi không tin tưởng các đối tượng JS Date kể từ khi (một số thời gian trước) tôi đã cố gắng đo lường hiệu suất, mặc dù nó đã xác nhận chính xác là mili giây, nhưng nó luôn trả về bội số của giây. Đây là lý do tại sao tôi không tin tưởng nó. – BYK

1

Tôi hy vọng rằng việc sử dụng split() sẽ nhanh hơn nhiều. Nó phụ thuộc vào nhiều chi tiết cụ thể, số dòng so với độ dài, độ phức tạp của regex, v.v.

+0

Cảm ơn đã dành thời gian để câu trả lời. Tôi cũng dự kiến ​​các phương pháp bản địa sẽ nhanh hơn nhưng không có gì có thể tốt hơn một kinh nghiệm cho câu hỏi này IMO. Thanks anyway =) – BYK

+1

Câu trả lời IS dựa trên kinh nghiệm :) như dfltr đã nói, bạn cần phải thử nghiệm cho trường hợp cụ thể của bạn. – RedFilter

+0

Vâng vấn đề là, tôi không biết kích thước chuỗi và regexp sẽ là một \ n | \ r matcher đơn giản nếu tôi sử dụng regexp. Bạn có thêm đề xuất nào không? =) (BTW xin lỗi vì nghĩ rằng đó là một ước tính;)) – BYK

9

Trong khi đây là 2 năm rưỡi muộn, hy vọng điều này sẽ giúp làm sáng tỏ về vấn đề này đối với bất kỳ người xem trong tương lai: http://jsperf.com/split-join-vs-regex-replace (Bao gồm các tiêu chuẩn kết quả cho nhiều trình duyệt, cũng mã chuẩn chức năng chính nó)

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