Hướng dẫn switch case vs if-else javascript - chuyển đổi trường hợp so với if-else javascript
Các bạn tôi có một vài câu hỏi: Show
Lý do để đặt câu hỏi này là có vẻ như tôi có được hiệu suất tốt hơn trong một tuyên bố Được chỉnh sửa một cách khó chịu Đây không phải là mã của tôi, JavaScript đang được sản xuất máy chủ từ một thư viện được biên dịch và tôi không có quyền truy cập vào mã. Phương pháp sản xuất JavaScript được gọi là Unfortuantly this is not my code the Javascript is being produced serverside from a compiled library and I have no access to the code. The method that is producing the javascript is called
Lưu ý 0 là một danh sách phân tách dấu phẩy.Những gì nó sản xuất là
Lưu ý: Trường hợp 1 = tên được chuyển vào hàm serverside
Bây giờ tôi đã thay đổi đầu ra của hàm được chèn vào Textarea, đã viết một số mã JavaScript để phân tích thông qua hàm và chuyển đổi nó thành một tập hợp các câu lệnh 2.Cuối cùng tôi chạy chức năng và nó chạy tốt nhưng hiệu suất khác nhau ở IE và Firefox.
Danwellman 8.8198 Huy hiệu vàng60 Huy hiệu bạc87 Huy hiệu đồng8 gold badges60 silver badges87 bronze badges Khi được hỏi ngày 27 tháng 5 năm 2010 lúc 16:30May 27, 2010 at 16:30
John Hartsockjohn HartsockJohn Hartsock 83.7K23 Huy hiệu vàng127 Huy hiệu bạc146 Huy hiệu đồng23 gold badges127 silver badges146 bronze badges 4
Trả lời nói chung:
Trang web thử nghiệm
Fcmam5 1.58115 huy hiệu bạc23 Huy hiệu đồng15 silver badges23 bronze badges Đã trả lời ngày 27 tháng 5 năm 2010 lúc 16:37May 27, 2010 at 16:37
17 Đôi khi tốt hơn là không sử dụng. Ví dụ, trong tình huống "công văn", JavaScript cho phép bạn làm mọi thứ theo một cách hoàn toàn khác:
Thiết lập phân nhánh nhiều chiều bằng cách tạo một đối tượng có rất nhiều lợi thế. Bạn có thể thêm và xóa chức năng một cách linh hoạt. Bạn có thể tạo bảng công văn từ dữ liệu. Bạn có thể kiểm tra nó theo chương trình. Bạn có thể xây dựng các trình xử lý với các chức năng khác. Có chi phí thêm của một cuộc gọi chức năng để đạt được tương đương với "trường hợp", nhưng lợi thế (khi có rất nhiều trường hợp) của một bộ tra cứu băm để tìm chức năng cho một khóa cụ thể. Đã trả lời ngày 27 tháng 5 năm 2010 lúc 16:48May 27, 2010 at 16:48
POINTYPOODTYPointy 396K59 Huy hiệu vàng576 Huy hiệu bạc607 Huy hiệu Đồng59 gold badges576 silver badges607 bronze badges 2
Sự khác biệt về hiệu suất giữa 4 là nhỏ, về cơ bản chúng thực hiện cùng một công việc. Một sự khác biệt giữa chúng có thể tạo ra sự khác biệt là biểu thức để kiểm tra chỉ được đánh giá một lần trong switch trong khi nó được đánh giá cho mỗi 6. Nếu nó tốn kém để đánh giá biểu thức, tất nhiên là làm điều đó nhanh hơn so với thực hiện nó hàng trăm lần.Sự khác biệt trong việc thực hiện các lệnh đó (và tất cả tập lệnh nói chung) khác nhau khá nhiều giữa các trình duyệt. Nó là phổ biến để thấy sự khác biệt về hiệu suất khá lớn cho cùng một mã trong các trình duyệt khác nhau. Vì bạn khó có thể kiểm tra hiệu suất tất cả các mã trong tất cả các trình duyệt, bạn nên sử dụng mã phù hợp nhất với những gì bạn đang làm và cố gắng giảm số lượng công việc thực hiện thay vì tối ưu hóa cách thực hiện. Đã trả lời ngày 27 tháng 5 năm 2010 lúc 16:53May 27, 2010 at 16:53
GuffaguffaGuffa 675K108 Huy hiệu vàng723 Huy hiệu bạc996 Huy hiệu Đồng108 gold badges723 silver badges996 bronze badges 1 Câu trả lời của Pointy cho thấy việc sử dụng một đối tượng theo nghĩa đen thay thế cho 0 mới mỗi khi hàm 1 được gọi là:
Nếu 0 chứa một số lượng lớn các mục, điều này có thể tạo ra chi phí đáng kể. Tốt hơn là chỉ cần thiết lập bản đồ hành động một lần và sau đó sử dụng bản đồ đã được tạo mỗi lần, ví dụ:
Đã trả lời ngày 26 tháng 7 năm 2017 lúc 20:29Jul 26, 2017 at 20:29
Michael Gearymichael GearyMichael Geary 28K9 Huy hiệu vàng63 Huy hiệu bạc75 Huy hiệu Đồng9 gold badges63 silver badges75 bronze badges Khác với cú pháp, một công tắc có thể được thực hiện bằng cách sử dụng một cây làm cho nó 3, trong khi A nếu/khác phải được thực hiện với cách tiếp cận thủ tục 4. Thường xuyên hơn cả hai đều được xử lý theo thủ tục và sự khác biệt duy nhất là cú pháp, và hơn nữa, điều đó có thực sự quan trọng - trừ khi bạn gõ các trường hợp 10k là nếu/cách khác?Đã trả lời ngày 27 tháng 5 năm 2010 lúc 16:42May 27, 2010 at 16:42
Evan Carrollevan CarrollEvan Carroll 74.2K44 Huy hiệu vàng244 Huy hiệu bạc431 Huy hiệu Đồng44 gold badges244 silver badges431 bronze badges 4
Về cơ bản, sử dụng bất cứ điều gì làm cho mã dễ đọc nhất. Chắc chắn có những nơi mà một hoặc các cấu trúc khác làm cho sạch hơn, dễ đọc hơn và dễ bảo trì hơn. Điều này quan trọng hơn nhiều là có lẽ tiết kiệm một vài nano giây trong mã JavaScript. Đã trả lời ngày 27 tháng 5 năm 2010 lúc 16:36May 27, 2010 at 16:36
Jon Benedictojon BenedictoJon Benedicto 10,4K3 Huy hiệu vàng27 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges27 silver badges30 bronze badges 9
Tôi không nghĩ vậy, 6.
Hành vi giống nhau trên tất cả các trình duyệt :) Đã trả lời ngày 27 tháng 5 năm 2010 lúc 16:35May 27, 2010 at 16:35
SarfrazsarfrazSarfraz 372K76 Huy hiệu vàng529 Huy hiệu bạc576 Huy hiệu Đồng76 gold badges529 silver badges576 bronze badges 1
Đã trả lời ngày 27 tháng 5 năm 2010 lúc 16:37May 27, 2010 at 16:37
KoenkoenKoen Phim thương hiệu vàng 3.5781 Huy hiệu bạc54 Huy hiệu đồng1 gold badge34 silver badges54 bronze badges Trường hợp chuyển đổi có nhanh hơn khôngHóa ra, câu lệnh chuyển đổi nhanh hơn trong hầu hết các trường hợp khi so sánh với IF-Else, nhưng chỉ nhanh hơn đáng kể khi số lượng điều kiện lớn. Sự khác biệt chính về hiệu suất giữa hai là chi phí gia tăng của một điều kiện bổ sung lớn hơn đối với IF-Else so với đối với Switch.the switch statement is faster in most cases when compared to if-else , but significantly faster only when the number of conditions is large. The primary difference in performance between the two is that the incremental cost of an additional condition is larger for if-else than it is for switch .
Trường hợp chuyển đổi có tốt hơn nếuMột câu lệnh chuyển đổi nhanh hơn đáng kể so với thang if-else nếu có nhiều if-else liên quan.Điều này là do việc tạo ra một bảng nhảy cho công tắc trong quá trình biên dịch.Kết quả là, thay vì kiểm tra trường hợp nào được thỏa mãn trong suốt quá trình thực thi, nó chỉ quyết định trường hợp nào phải được hoàn thành.. This is due to the creation of a jump table for switch during compilation. As a result, instead of checking which case is satisfied throughout execution, it just decides which case must be completed.
Tôi có nên sử dụng các trường hợp chuyển đổi JavaScript không?Sử dụng công tắc thay vì nếu khi: bạn đang so sánh nhiều điều kiện có thể của một biểu thức và bản thân biểu thức là không tầm thường.Bạn có nhiều giá trị có thể yêu cầu cùng một mã.Bạn có một số giá trị sẽ yêu cầu về cơ bản tất cả các thực thi của một giá trị khác, cộng với chỉ một vài câu lệnh.You are comparing multiple possible conditions of an expression and the expression itself is non-trivial. You have multiple values that may require the same code. You have some values that will require essentially all of another value's execution, plus only a few statements. |