<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../favicon.ico">
<title>Starter Template for Bootstrap</title>
<!-- Bootstrap core CSS -->
<link href="../../dist/css/bootstrap.min.css" rel="stylesheet">
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="../../assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="starter-template.css" rel="stylesheet">
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
<script src="../../assets/js/ie-emulation-modes-warning.js"></script>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div class="container">
<div class="starter-template">
<h1>Bootstrap starter template</h1>
<p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>
</div>
</div><!-- /.container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
<script src="../../dist/js/bootstrap.min.js"></script>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<script src="../../assets/js/ie10-viewport-bug-workaround.js"></script>
</body>
</html>
var elements = document.querySelectorAll('li:not(.active)');
for(var i = 0; i < elements.length; i++) {
elements[i].style.display = 'none';
}
$('#navbar li:not(.active)').hide();
$(document.querySelectorAll('li:not(.active)')).hide();
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
Plain JS | |
jQuery | |
Hybrid |
Test name | Executions per second |
---|---|
Plain JS | 39117.4 Ops/sec |
jQuery | 40262.5 Ops/sec |
Hybrid | 9507.7 Ops/sec |
I'll break down the benchmark and explain what's being tested, compared, and pros/cons of each approach.
Benchmark Overview
The benchmark measures the performance of three approaches to hide elements in an HTML list: Plain JavaScript (JS), jQuery, and Hybrid.
Plain JavaScript (JS)
var elements = document.querySelectorAll('li:not(.active)'); for(var i = 0; i < elements.length; i++) { elements[i].style.display = 'none'; }
querySelectorAll
method to select all <li>
elements that don't have a class of active
. It then loops through each element and sets its display
style property to 'none'
.jQuery
$('#navbar li:not(.active)').hide();
hide()
method to select all <li>
elements in the #navbar
element that don't have a class of active
and hide them.Hybrid (JavaScript + jQuery)
(document.querySelectorAll('li:not(.active)')).hide();
querySelectorAll
method and jQuery's hide()
method to select all <li>
elements that don't have a class of active
and hide them.Comparison
The three approaches are compared in terms of performance, measured by the number of executions per second. The results show that:
Pros and Cons
Inference
Based on the results, it appears that jQuery is the most performant option, likely due to its optimized implementation and widespread adoption. However, the Hybrid approach shows promise by combining the benefits of both Plain JavaScript and jQuery. Ultimately, the choice between these approaches depends on specific use cases, performance requirements, and developer preferences.
As for the device platform (Chrome 50), operating system (Linux), and other factors influencing the benchmark results, they are not directly relevant to the comparison of these three approaches.