2011-12-24 45 views
7

Có phải [x,y,z].join('') thực sự nhanh hơn x + y + z cho chuỗi không?[x, y, z] .join ('') có thực sự nhanh hơn x + y + z cho chuỗi không?

Dưới sự ấn tượng rằng join() là nhanh hơn, tôi bắt đầu thông qua mã của tôi để sử dụng nó chứ không phải là +, sau đó tôi chạy vào dòng sau trong mã Google Analytics:

ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 

Giả sử các lập trình viên của Google là một trong những người hiểu biết nhiều nhất, nó làm tôi ngạc nhiên. Tất nhiên, dòng đó sẽ chỉ chạy một lần cho mỗi lần tải trang, và người ta có thể nói rằng bất kỳ sự khác biệt tốc độ nào là không đáng kể. Nhưng vẫn?

+1

Tốc độ của một chức năng được xác định bởi JavaScript triển khai, thay đổi giữa các trình duyệt. Để kiểm tra - http://jsperf.com/ – Bakudan

+1

Đây cũng là '[x, y] .join ('')'. Tôi tin rằng các khoản tiết kiệm là với một số lượng lớn các đối số (vì bạn thực hiện một cuộc gọi cho mỗi phụ thêm với '+' và tham gia chỉ là một cuộc gọi hàm.) – Hogan

+0

+ Bakudan, tìm thấy một thử nghiệm mà nên làm sáng tỏ một số: http: // jsperf .com/concat-vs-join2/4 – TJR

Trả lời

2

Sử dụng Firebug Console trong Firefox 6.0.2 sử dụng đoạn mã sau:

b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = "sfhfdshdshsdh" + "sfhsfdhsfhdsfh" + "shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh";} c = new Date().getTime(); d = c - b; 

b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = ["sfhfdshdshsdh","sfhsfdhsfhdsfh","shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh"].join();} c = new Date().getTime(); d = c - b; 

tôi trung bình trong 40 thấp cho dấu "+" và 50 thấp cho "tham gia" để có vẻ như tham gia chậm hơn. Điều này rất có thể do nhu cầu tạo một mảng để tham gia. Điều này cũng có thể khác trong các trình duyệt khác nhau với các trình thông dịch khác nhau.

+2

Có lẽ bạn nên thử [jspref.com] (http://jspref.com/). –

6

Phương pháp Array .join() (-trick) để ghép chuỗi có nguồn gốc của nó sau đó khi các trang web chạy trên Internet Explorers như rất nhiều. Đối với IE6 + 7, nó rất đúng so với .join()nhiều hơn nhanh hơn việc sử dụng toán tử + do hành vi thực sự xấu với các hoạt động chuỗi trong IE.

Đối với các trình duyệt khác sự khác biệt về hiệu suất không lớn như vậy, do đó, khuyên bạn nên sử dụng .join() (một lần nữa, ngược lại). Ngày nay, hầu hết các công cụ tối ưu hóa hoạt động chuỗi thời gian lớn và trừ khi bạn nghĩ rằng bất kỳ mã nào của bạn chạy trong IE6 + 7 rất nhiều, bạn chỉ nên sử dụng +.

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