Skip to content

Instantly share code, notes, and snippets.

@arestov
arestov / Тезисы
Last active April 27, 2017 06:32
Декларативность. Лаконичный и оптимизируемый код
Декларативность. Лаконичный и оптимизируемый код
Разделение кода сложных состояний на 3 части позволяет сильно уменьшить сложность
и объем кода (за счёт автоматизации кода, актуализирующего эти состояния,
при изменении других состояний), а также реализовывать оптимизации на системном уровне.
1) Декларативное описание того как используется результат (зачем вы что-то делаете, целеполагание)
2) Декларативное описание от каких состояний зависит результат (что нужно чтобы выполнить задачу)
3) Способ вычисления результата (как распорядится ингридиентами, чтобы получить необходимое)
// SNAPSHOT 1
{ //root of big structure
nest: [
bignestedPart1 : { //Big nested part 1
prop: bignestedPart2 //Big nested part 2,
//other props
},
bignestedPart3: {}
]
var getComplexCalculations = function(some_data)
//Эта функция вызывается очень часто, соотствестенно каждый push({}) создаёт объект для сборщика мусора (который остановит выполнение всего приложения)
var result_array = [];
for (var i = 0; i < some_data.length; i++) {
result_array.push({
state_name: getStateName(some_data[i]), //всегда строка
state_value: getStateValue(some_data[i]) //любой тип (null, object, number, string...)
});
@arestov
arestov / gist:6663352
Last active April 27, 2017 06:34
Provodajs

Provodajs - MVC фреймворк для простого обслуживания множества взаимосвязанных состояний моделей и связей между ними (иерархичных и фракталякционных) в асинхронном режиме, управления сетевыми запросами, из очереди которых первым должен быть отправлен тот, который обеспечивает данными ту часть приложения в которой заинтересован пользователь. Фреймворк для перспективного использования в условиях реальной изолированности моделей от их представлений.

Фреймворк обеспечивающий атомарные реакции в DOM дереве на изменения состояний (вместо переделывания больших участков DOM дерева), где не нужна сложность используя простые и эффективные шаблоны на основе html разметки аля angularjs и сложные views, где простыми не обойтись.

Фреймворк обеспечивающий огромную скорость отображения данных за счёт

  • минимизации чтений DOM во время записи изменений состояний (чтение во время изменения множества частей дерева крайне негативно сказывается на производительно
<div class="complex-page" pv-view-wrap='flow_order: {{$$level_num}}'>
<div class="complex-page-scroll_con">
<div class="complex-page_material">
<div pv-view="tag_page"></div>
</div>
</div>
</div>
<div pv-sample="button_area">
<span pv-text="{{name:}} fff"></span>
</div>
<div
pv-clone-of='button_area'
pv-clone-states="button_title: {{}}">
<div class="preview" pv-anchor=""></div>
<div pv-attrs="style.width: {{play_progress}} title: {{full_name}} style.background-image: {{album_cover_url}}">
</div>
just more line breaks:
<div
pv-attrs="
style.width: {{play_progress}}
title: {{full_name}}
style.background-image: {{album_cover_url}}"
@arestov
arestov / gist:3736506
Created September 17, 2012 09:55
iterateObjectDeeply, no recurstion
var iterateObjectDeeply = function(obj, fn) {
var full_tree_array = [obj];
while (full_tree_array.length) {
var cur = full_tree_array.shift();
for (var a in cur){
fn(cur, a);
if (cur[a] && typeof cur[a] == 'object'){
full_tree_array.push(obj[prop_name])
}
}
<div class="serpi-inject-results-wrap many-results scrollable-images">
<a href="javascript:void(0);" class="hp-b prev-serpi">←</a>
<a href="javascript:void(0);" class="hp-b next-serpi">→</a>
<script type="text/javascript">
var onImageLoad = function(img, cb) {
var done,
loaded = function() {
if (!done){
done = true;
var getAllParents = function(el, include_itself, excl){
var ps = [];
if (include_itself){
ps.push({
node: el,
exception: include_itself.exception
});
}
while (el && ((el = el.parentNode) && ((!excl && el != el.ownerDocument)|| (el != excl )))) {
ps.push({