Created
April 22, 2020 18:12
-
-
Save chuckadams/c378beae67b824d893acc8f435ca01cf to your computer and use it in GitHub Desktop.
JavaScript V8 inline cache behavior differences
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
main() | |
function main() { | |
monomorphic() | |
polymorphic() | |
megamorphic() | |
} | |
function bench(label, people) { | |
const ITERATIONS = 1000 * 1000 * 1000; | |
console.time(label) | |
for (var i = 0; i < ITERATIONS; i++) { | |
people[i & 7].lastname | |
} | |
console.timeEnd(label); | |
} | |
function monomorphic() { | |
// monomorphic | |
const han = {firstname: "Han", lastname: "Solo"} | |
const luke = {firstname: "Luke", lastname: "Skywalker"} | |
const leia = {firstname: "Leia", lastname: "Organa"} | |
const obi = {firstname: "Obi", lastname: "Wan"} | |
const yoda = {firstname: "", lastname: "Yoda"} | |
const people = [han, luke, leia, obi, yoda, luke, leia, obi] | |
bench("monomorphic", people) | |
} | |
function polymorphic() { | |
const han = {firstname: "Han", lastname: "Solo", gender: "male"} | |
const luke = {firstname: "Luke", lastname: "Skywalker", job: "Jedi"} | |
const leia = {firstname: "Leia", lastname: "Organa", gender: "female"} | |
const obi = {firstname: "Obi", lastname: "Wan"} | |
const yoda = {lastname: "Yoda"} | |
const people = [han, luke, leia, obi, yoda, luke, leia, obi] | |
bench("polymorphic", people) | |
} | |
function megamorphic() { | |
const han = {firstname: "Han", lastname: "Solo", spacecraft: "Falcon"} | |
const luke = {firstname: "Luke", lastname: "Skywalker", job: "Jedi"} | |
const leia = {firstname: "Leia", lastname: "Organa", gender: "female"} | |
const obi = {firstname: "Obi", lastname: "Wan", retired: true} | |
const yoda = {lastname: "Yoda"} | |
const people = [han, luke, leia, obi, yoda, luke, leia, obi] | |
bench("megamorphic", people) | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment