2017-09-06 44 views
5

Tôi tò mò cách phương thức _.now của Underscore nhanh hơn chỉ new Date().getTime(). Tôi thấy những điều sau trên codebase github của họ.Phương thức hiện tại của Underscrore nhanh hơn như thế nào?

// A (possibly faster) way to get the current timestamp as an integer. 
_.now = Date.now || function() { 
    return new Date().getTime(); 
}; 

Ai đó có thể giải thích những gì đang diễn ra ở đây?

+0

Với chức năng mũi tên bạn nhận được '_.now = Date.now ||() => + ngày mới() '. ;-) Nhưng tôi đoán bất cứ điều gì không hỗ trợ * Date.now * sẽ không hỗ trợ chức năng mũi tên ... – RobG

Trả lời

3

Cũng không cần phải tạo đối tượng new Date, sử dụng lợi thế được cung cấp bởi Date.now. Vấn đề duy nhất với đó là hỗ trợ trình duyệt, vì vậy chúng bao gồm một dự phòng. Nó cũng có thể là một ý tưởng tốt hơn để chỉ cần bao gồm một polyfill

if (typeof Date.now != "function") 
    Date.now = function() { return new Date().getTime(); }; 

và sử dụng thay vì vận động chức năng trợ giúp của chính chúng.

+1

Thư viện như gạch dưới, lodash, jQuery không thay đổi môi trường JS thông thường, chúng cung cấp tất cả các chức năng của chúng trong không gian tên riêng của họ. – Barmar

+0

Giống như '$ .each()' thay vì 'polyray.prototype.forEach' polyfill. – Barmar

+0

@Barmar Vâng, cách tiếp cận đó có một số lợi thế rõ ràng. Tôi chỉ thích xem nó được sử dụng chỉ cho chức năng cốt lõi của họ, cung cấp * nhiều hơn * so với các phương thức chuẩn, và giữ cho lớp tương thích bên trong thay vì để lộ trên không gian tên (trừ khi đó là mục đích thư viện rõ ràng). – Bergi

0

Bằng cách sử dụng Date.now, bạn không cần phải tạo đối tượng. Nhưng nó không được hỗ trợ trong IE < 9. Trong trường hợp này, nó sử dụng hàm Date(). GetTime mới.

Comparison

Bạn có thể tham khảo link này để xem chi tiết hỗ trợ trình duyệt: http://caniuse.com/#search=Date.now

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