2009-08-05 22 views

Trả lời

11

Điều thứ hai có vẻ rõ ràng hơn với tôi vì nó thể hiện ý định hơn là triển khai.

Tôi nghi ngờ có rất nhiều tình huống mà bất kỳ sự khác biệt hiệu suất nào cũng sẽ tạo ra bất kỳ sự khác biệt đáng chú ý nào và có thể nó phụ thuộc vào việc triển khai.

+4

+1 về điều đó: với Math.max, mọi người đọc mã của bạn ** bất thường ** hiểu những gì bạn đang cố gắng làm; với?:, họ sẽ phải suy nghĩ ít nhất trong một hoặc hai giây ... Nếu bạn có 300 dòng mã, nó đã mất vài phút suy nghĩ có lẽ không có lý do chính đáng (ngoại trừ một số phần thực sự quan trọng của bạn ứng dụng, loại tối ưu hóa vi mô này có lẽ là vô nghĩa) - ai nói điều gì đó về tối ưu hóa sớm, và gốc rễ của tất cả điều ác? ^^ –

+0

Tôi nghĩ rằng đó là donald knuth – Breton

+2

Đây thực sự là một yếu tố khi bạn đang đi qua 130MB Float32Array đối tượng. –

1

Đối với tốc độ, không có sự khác biệt đáng kể.

Đối với kiểu dáng, Math.max dễ đọc hơn và do đó là tùy chọn tốt nhất.

0

Math.max() hoạt động chính xác như bạn đã viết đầu tiên. Nó sử dụng toán tử ternary để trả về giá trị tối đa. Vì vậy, nếu u muốn phụ tùng một số nano giây, bạn có thể sử dụng cách đầu tiên, để tránh một cuộc gọi đến một chức năng. Tuy nhiên, IMHO, sự khác biệt này không thể thực sự ảnh hưởng đến hiệu suất, trừ khi u có một đống Math.max để làm.

3

Trên đơn nguyên, JIT có thể sử dụng các phương thức Math.Min và Math.Max ​​nội tuyến và cung cấp hiệu suất tốt hơn so với các tùy chỉnh, nội tuyến, triển khai. Nó sẽ sử dụng hướng dẫn đặc biệt nếu có sẵn bởi phần cứng. Vì vậy, một ngày nếu trong JavaScript có một số JIT (Google V8?) Có lẽ nó sẽ là một số lợi ích hiệu suất cho lớp học Toán người dùng.

6

Theo thử nghiệm jsperf này, câu lệnh if là trình diễn xuất sắc nhất.

http://jsperf.com/math-min-vs-if-condition-vs/2

Tuy nhiên, tôi đồng ý rằng Math.max/Math.min là dễ đọc hơn.

+0

Cảm ơn bạn. Sử dụng thử nghiệm của bạn tôi nhận được những kết quả này: 'function' -> 7% chậm hơn,' Math.min' -> 1% chậm hơn, 'if' -> nhanh nhất. – Luke

1

Dưới đây là một thử nghiệm JSPerf cho phép bạn thử nghiệm nó trên (s) trình duyệt của bạn:

http://jsperf.com/math-min-vs-if-condition-vs/13

xét nghiệm của tôi trên một số trình duyệt cho thấy Math.min, các nhà điều hành ternary và một câu lệnh if thực hiện tương tự.

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