Giter Site home page Giter Site logo

Push html to `this._str` about bem-xjst HOT 13 CLOSED

bem avatar bem commented on May 27, 2024
Push html to `this._str`

from bem-xjst.

Comments (13)

veged avatar veged commented on May 27, 2024

we use it for flushing/streaming content

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

@veged: I know, but this is now what I meant. Current 2.x implementation does this stuff in a following way:

block('b1').def()(function() {
  return '<div>' + applyNext() + '</div>';
});

Strictly speaking, this is much more clear than (old i-bem):

block('b1').def()(function() {
  this._str += '<div>';
  applyNext();
  this._str += '</div>';
});

I would prefer first style, and it is not that big pain to switch over to it. So the question is can we afford this?

from bem-xjst.

veged avatar veged commented on May 27, 2024

but what we gonna do with apply* cals? not all of .def() templates returning value, some redefines just call applyNext

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

Why not require them to return a value now?

from bem-xjst.

veged avatar veged commented on May 27, 2024

we need to do like that:

block('b1').def()(function() {
  return applyNext({ '_bla': 1 });
});

but right now we do just:

block('b1').def()(function() {
  applyNext({ '_bla': 1 });
});

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

Yes, exactly. Can we change this, and/or ask people to change it? Seriously, the internal implementation will be much simpler this way (and probably faster).

from bem-xjst.

veged avatar veged commented on May 27, 2024

ok — let's suppose we can do this in v2

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

great! :)

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

THIS IS REQUIRED FOR FLUSHING/STREAMING

Could be possibly skipped in case where we don't need to flush/stream things. So templates should use return with applyCtx() anyway.

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

Proposed implementation is here: 51dee47 . No performance regression without _flush, and with it.

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

Looks like it isn't done:

block(‘b1’).def()(function() { return # + applyNext(); })

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

Test case fixed in 678e33e. However a bigger question remains.

Particularly, block page overrides def() mode, making this _flush feature useless.

Second question is speed: current implementation of _flush slows things by 2-5% with disabled flush. If there won't be resolution for the block page - we should consider removing this feature on initial release.

from bem-xjst.

indutny avatar indutny commented on May 27, 2024

And this is done in:

fccd9d4

compile:basic:next x 1,919 ops/sec ±1.09% (558 runs sampled)
compile:basic:prev x 1,937 ops/sec ±1.19% (562 runs sampled)
render:basic:next x 770,381 ops/sec ±0.23% (592 runs sampled)
render:basic:prev x 820,049 ops/sec ±0.20% (592 runs sampled)
flush:basic:next x 703,103 ops/sec ±0.24% (591 runs sampled)
flush:basic:prev x 832,992 ops/sec ±0.17% (593 runs sampled)
compile:islands:next x 608 ops/sec ±0.95% (558 runs sampled)
compile:islands:prev x 617 ops/sec ±0.90% (556 runs sampled)
render:islands:next x 1,415 ops/sec ±0.26% (588 runs sampled)
render:islands:prev x 1,462 ops/sec ±0.16% (588 runs sampled)
flush:islands:next x 1,445 ops/sec ±0.23% (588 runs sampled)
flush:islands:prev x 1,448 ops/sec ±0.20% (586 runs sampled)
compile:showcase:next x 587 ops/sec ±0.96% (558 runs sampled)
compile:showcase:prev x 596 ops/sec ±0.93% (556 runs sampled)
render:showcase:next x 2,633 ops/sec ±0.29% (586 runs sampled)
render:showcase:prev x 2,592 ops/sec ±0.29% (587 runs sampled)
flush:showcase:next x 2,305 ops/sec ±0.57% (579 runs sampled)
flush:showcase:prev x 2,469 ops/sec ±0.27% (589 runs sampled)

Doesn't look like significant regression in _flush. I guess it should be fine to release 2.x with this feature ;)

from bem-xjst.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.