Giter Club home page Giter Club logo

Comments (1)

Riim avatar Riim commented on July 19, 2024

Привет!

Когда нет реакций и обработчиков, в _onValueChange из полезного остаётся только строка this._updationId = ++lastUpdationId;.
С этим _updationId тема такая: в пассивном режиме зависимости не содержат ссылки на свои реакции и не могут сообщить им о своём изменении, ну и реакции при чтении вынуждены каждый раз перевычисляться, а то вдруг что-то в зависимостях поменялось. То есть пассивные, вычисляемые ячейки становятся чем-то вроде простых функций, но некоторую мемоизацию всё же удалось добавить и за это как раз отвечает _updationId -- при записи в любую ячейку инкрементим глобальный для всех lastUpdationId, дальше читается пассивная ячейка и проставляет в свой _updationId значение из глобального lastUpdationId. Теперь при повторном чтении этой ячейки можно сравнить _updationId и глобальный lastUpdationId (https://github.com/Riim/cellx/blob/master/src/Cell.ts#L530) и если они равны, то точно изменений нигде не было, а значит можно просто вернуть запомненное значение (если же хоть что-то где-то менялось, то lastUpdationId будет больше). Понятно, что есть куча кейсов в которых такая мемоизация ломается, но при отсутствии ссылок вряд ли тут можно что-то заметно лучше придумать.
Теперь если вернуться к _onValueChange, то внутреннее изменение значения по сути равноценно просто записи в ячейку, оно ведь так же может повлиять на значения реакций, вот и делается подписка на него для обновления lastUpdationId.

from cellx.

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.