Similar solutions with very different execution times. What's the reason? Why solution #1 is too slow?
Hint: access to
.lengthproperty and to variables is not an issue.
Based on a real case in CSSTree
| N | Solution #1 | Solution #2 |
|---|
| const csstree = require("css-tree"); | |
| const cssDefinitions = ["color"]; | |
| const ast = csstree.parse(` | |
| .some-selector { | |
| color: black; | |
| border: 1px solid #fff; | |
| } | |
| `, { parseValue: false }); | |
| csstree.walk(ast, { |
| const cssTree = require("[email protected]"); | |
| function getSelectorParent(selector) { | |
| const selectorAst = cssTree.parse(selector, { context: 'selector' }); | |
| // solution #1 | |
| selectorAst.children.prevUntil(selectorAst.children.tail, (node, item, list) => { | |
| list.remove(item); | |
| return node.type === 'Combinator' || node.type === 'WhiteSpace'; | |
| }); |
| const cssTree = require("[email protected]"); | |
| function getSelectorParent(selector) { | |
| const selectorAst = cssTree.parse(selector, { context: 'selector' }); | |
| // solution #1 | |
| // selectorAst.children.prevUntil(selectorAst.children.tail, (node, item, list) => { | |
| // list.remove(item); | |
| // return node.type === 'Combinator' || node.type === 'WhiteSpace'; | |
| // }); | |
| const cssTree = require("[email protected]"); | |
| function getSelectorParent(selector) { | |
| const selectorAst = cssTree.parse(selector, { context: 'selector' }); | |
| // solution #1 | |
| // selectorAst.children.prevUntil(selectorAst.children.tail, (node, item, list) => { | |
| // list.remove(item); | |
| // return node.type === 'Combinator' || node.type === 'WhiteSpace'; | |
| // }); | |
| // UPDATE: you can use ready to use package prop-types-definition | |
| // https://github.com/avito-tech/prop-types-definition | |
| module.exports = function(content) { | |
| return content + ` | |
| (function(ReactPropTypes) { | |
| function unwrapValueItem(value) { | |
| if (value) { | |
| if (typeof value.getTypeDefinition === 'function') { | |
| return value.getTypeDefinition(); |
| const csstree = require('css-tree'); | |
| const ast1 = csstree.parse('.a { color: red }', { | |
| filename: './a.css', | |
| positions: true | |
| }); | |
| const ast2 = csstree.parse('.b { color: red }', { | |
| filename: './b.css', | |
| positions: true | |
| }); |
| const csstree = require('css-tree'); | |
| const data = require('mdn-data/css/properties.json'); | |
| Object.keys(data).forEach(name => { | |
| const prop = data[name]; | |
| if (Array.isArray(prop.initial)) { | |
| return; | |
| } |
| const pngSignature = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]); | |
| const hashKey = 'react-snapshot-hash'; | |
| const crcTable = []; | |
| const initialCrc = 0xffffffff; | |
| for (let n = 0; n < 256; n++) { | |
| let c = n; | |
| for (let k = 0; k < 8; k++) { | |
| if (c & 1) { |
| const EXTENSION_TYPE = { | |
| 0x01: 'PlainText', | |
| 0xF9: 'GraphicControl', | |
| 0xFE: 'Comment', | |
| 0xFF: 'Application' | |
| }; | |
| /** | |
| * Returns total length of data blocks sequence | |
| * |
Similar solutions with very different execution times. What's the reason? Why solution #1 is too slow?
Hint: access to
.lengthproperty and to variables is not an issue.
Based on a real case in CSSTree
| N | Solution #1 | Solution #2 |
|---|