Tối ưu hóa JavaScript cho các vòng lặp lồng nhau
Kỹ thuật tối ưu hóa vòng lặp. bộ 2 Show
Cải thiện bài viết Lưu bài viết Thích bài viết
Cải thiện bài viết Lưu bài viết Điều kiện tiên quyết - Tối ưu hóa vòng lặp. Hiệp 1 1. vòng phân hạch. cải thiện vị trí của tham chiếu – Trước khi tối ưu hóa for(i=0;i<100;i++) {a[i]=… b[i]=… } Sau khi tối ưu hóa for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=… 2. Trao đổi vòng lặp. cải thiện vị trí tham chiếu – Trước khi tối ưu hóa for(i=0;i<100;i++) for(j=0;j<100;j++) a[j][i]=… Sau khi tối ưu hóa for(j=0;j<100;j++) for(i=0;i<100;i++) a[j][i]=… 3. Đảo ngược vòng lặp – Trước khi tối ưu hóa for(i=0;i<100;i++) a[99-i]=… Sau khi tối ưu hóa for(i=99;i>=0;i--) a[i]=… 4. Bỏ kiểm soát vòng lặp. giảm thiểu kiểm tra và nhảy nhưng tăng kích thước mã – Trước khi tối ưu hóa for(i=0;i<100;i++) a[i]=… Sau khi tối ưu hóa for(i=0;i<100;i+=2) {a[i]=… a[i+1]=… } 5. Tách vòng lặp – Trước khi tối ưu hóa ________số 8Sau khi tối ưu hóa for(i=0;i<50;i++) a[i]=… for(;i<100;i++) b[i]=… 6. lột vòng lặp. trường hợp đặc biệt của tách vòng lặp – Trước khi tối ưu hóa for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=…0 Sau khi tối ưu hóa for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=…1 7. Hủy chuyển đổi – Trước khi tối ưu hóa for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=…2 Sau khi tối ưu hóa for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=…3 8. Thay thế kiểm tra vòng lặp. tăng khả năng loại bỏ mã chết – Trước khi tối ưu hóa for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=…4 Sau khi tối ưu hóa for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=…5 Ghi chú cá nhân của tôi arrow_drop_up Tiết kiệm Vui lòng Đăng nhập để nhận xét.Vòng lặp đóng một vai trò quan trọng trong hiệu suất ứng dụng. Các vòng lặp được sử dụng phổ biến nhất, tác động thực thi được đo bằng mẫu dữ liệu khổng lồVài ngày trước, một cuộc thảo luận đã diễn ra trong nhóm phụ trợ nút liên quan đến hiệu suất của các ứng dụng có thể mở rộng trong Node. js. Không ai nghi ngờ về tốc độ nút nhưng kiến trúc ứng dụng và thực thi mã cũng quan trọng không kém. Một hệ thống được thiết kế tốt và mã sạch đóng vai trò quan trọng trong việc thực thi ứng dụng. Vì vậy, tôi đã chọn viết một cái gì đó từ vùng mã để giúp cải thiện thời gian thực thi mã Vòng lặp là một yếu tố thiết yếu của mã được các nhà phát triển yêu cầu trong nhiều tình huống. Tôi đã chọn thảo luận chi tiết về hiệu suất thực thi của vòng lặp với số liệu thống kê để xác định hiệu quả của vòng lặp trong các điều kiện và môi trường khác nhau Hiệu quả không chỉ cần thiết cho giá nhiên liệu tăng vọtLặp lại các bộ sưu tập là một thành phần cấu thành trong mã hóa, cộng với nếu dữ liệu liên quan đến các cấu trúc phức tạp thì các vòng lặp lồng nhau là không thể tránh khỏi. Do đó, chúng tôi sẽ kiểm tra hiệu suất của các vòng lặp khác nhau dựa trên thời gian thực hiện của mỗi vòng lặp trên mẫu dữ liệu cụ thể Chúng tôi sẽ kiểm tra hiệu suất của các vòng lặp trên mảng một chiều và mảng lởm chởm (mảng của mảng), mỗi vòng lặp sẽ chạy nhiều lần để quan sát thời gian trung bình được thực hiện trong các môi trường, máy móc và hệ điều hành khác nhau. Hãy trao cơ hội công bằng cho tất cả mọi người Mảng một chiều (10 triệu lần lặp)Một mảng chứa 10 triệu số theo thứ tự, cấu trúc này sẽ được duyệt qua nhiều lần bởi các vòng lặp khác nhau, giá trị trung bình sẽ được tính dựa trên thời gian thực hiện của một vòng lặp. Mã mẫu cho cấu trúc điền và cú pháp vòng lặp khác nhau được sử dụng trong thử nghiệm như sau. Vui lòng lưu ý, mỗi vòng lặp thực hiện cùng một hướng dẫn bên trong phần thân không được đề cập ở đây để giữ cho mẫu sạch sẽ để dễ hiểu for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=…6 Các số sau được tạo bằng mili giây trong các môi trường khác nhau Số liệu thống kê khá thú vị trên một nền tảng khác nhưng các vòng lặp cổ điển cho thấy hiệu suất dữ liệu tốt hơn so với Foreach và ES6. Một bức tranh đáng giá cả ngàn lời nói nên tốt hơn là đánh giá các con số trong biểu đồ Reverse-while đang dẫn đầu một sprint nhưng chắc chắn, reverse-while không thể được sử dụng trong nhiều trường hợp. Đối với vòng lặp, hiệu suất rất ấn tượng với sự khác biệt nhỏ nhưng trước khi đi đến kết luận, hãy thử các vòng lặp tương tự trên các mảng lởm chởm Mảng hai chiều (100 triệu lần lặp)Thiết lập bộ sưu tập với 10.000 mục và mỗi mục có thêm 10.000 mục con nên để truy cập từng mục trong vòng lặp, cần 10.000 * 10.000 = 100.000.000 (100 triệu lần lặp). Mã mẫu cho cấu trúc điền và cú pháp vòng lặp khác nhau được sử dụng trong thử nghiệm như sau for(i=0;i<100;i++) a[i]=… for(i=0;i<100;i++) b[i]=…7 Các số sau được tạo trong mili giây Một so sánh cho thấy rằng một lần nữa, vòng vani cổ điển hoạt động tốt hơn. Các kết quả trên khá bất ngờ đối với một mảng răng cưa ngược lại trong khi hoạt động chậm hơn một chút với cấu trúc lồng nhau so với mảng một chiều, do đó nên đánh giá cấu trúc theo tình huống. Hãy so sánh các vòng lặp trong biểu đồ thanh Người ta có thể dễ dàng đưa ra quyết định rằng các vòng lặp cổ điển có hiệu quả tốt hơn nhiều nhưng nếu cấu trúc không chứa dữ liệu lớn thì ES6 hoặc forEach có thể chọn bản chất cú pháp thân thiện và mã dễ bảo trì hơn về mặt chủ quan nhưng nếu tốc độ là mục tiêu thì các vòng lặp cổ điển không đáng kể Một lý do hợp lý cho việc chậmTrong trường hợp các vòng lặp cổ điển, động cơ chủ yếu cần lo lắng về độ dài, gia số và kết thúc nhưng mặt khác, thiết lập chức năng và dọn dẹp nội dung sau khi hoàn thành công việc là một chi phí lớn Các công cụ ngôn ngữ cấp cao được triển khai với các sự đánh đổi khác nhau phụ thuộc vào nhiều yếu tố như hiệu suất, tốc độ, tính dễ dàng, bảo trì, v.v. đóng vai trò quan trọng trong việc thực thi mã. Stack Overflow có một bài đăng rất hay dành riêng cho chủ đề này, điều này sẽ chứng minh thêm lý do chậm hơn Kết quả cuối cùng (cũng từ nhiều bài báo)
Hãy đánh tôi nếu có bất kỳ phát hiện nào để chia sẻ với các chuyên viên máy tính. Các lĩnh vực mã và cấu trúc khác sẽ được khám phá trong các bài đăng sắp tới, hãy theo dõi chúng tôi Làm cách nào để tối ưu hóa cho vòng lặp trong JavaScript?Vòng lặp for bao gồm bốn phần. khởi tạo, điều kiện kiểm tra trước, thân vòng lặp và sau khi thực hiện. Cách nó hoạt động như sau. đầu tiên, mã khởi tạo được thực thi (var i = 0;). Vậy điều kiện thử trước (i < 10;). Nếu điều kiện kiểm tra trước đánh giá là t rue, thì phần thân của vòng lặp được thực thi .
Làm cách nào chúng ta có thể giảm độ phức tạp về thời gian của vòng lặp for lồng nhau?Hầu hết thời gian, thay vì cố gắng tìm đến các giải pháp phức tạp khác như lưu vào bộ nhớ đệm và thậm chí là các giải pháp phức tạp hơn, hiểu phân tích thuật toán có thể hữu ích . Hơn nữa, trong trường hợp các vòng lặp thực hiện các truy vấn cơ sở dữ liệu bằng ORM, nhiều vòng lặp lồng nhau có thể được cải thiện chỉ bằng cách sử dụng SQL THAM GIA.
Vòng lặp for nào nhanh hơn trong JavaScript?Vòng lặp nhanh nhất là vòng lặp for, cả khi có và không có độ dài bộ nhớ đệm đều mang lại hiệu suất thực sự giống nhau. . Vòng lặp while với số lần giảm khoảng 1. Chậm hơn 5 lần so với vòng lặp for Một vòng lặp sử dụng chức năng gọi lại (như forEach tiêu chuẩn), chậm hơn khoảng 10 lần so với vòng lặp for Cái nào nhanh hơn forEach hay for loop JavaScript?forEach Loop
. Nó chậm hơn so với vòng lặp truyền thống về hiệu suất. |