Выпуск Драгоценного Камня Thesortabletree 2.0

Привет! Рад сообщить, что на минувших выходных, после долгого затишья, состоялся релиз моей маленькой, но смею надеяться, полезной поделки - гем СортируемоеДерево (рельсы 3, рельсы 4).

TheSortableTree — это драгоценный камень, который помогает организовать рендеринг деревьев вложенных наборов.

Но самое главное, что он позволяет легко и просто управлять деревом вложенных наборов, удобно перетаскивая элементы в нужное место.



Выпуск драгоценного камня TheSortableTree 2.0

В текущей версии гема решена самая главная проблема — скорость рендеринга.

Раньше это было чудовищно медленно.

Теперь (в среднем) можно получить скорость рендеринга 1500-2000 узлов в секунду .

Я считаю эту скорость приемлемой и достаточной для большинства приложений.

Ниже (если интересно) немного истории создания гема, благодарности, планы и рассказ о том, как на open source проекты влияет употребление крепкого черного чая вечером после работы.

P.S: Анонимный , вы можете быть удивлены, но в этом выпуске гема я отвожу вам самую большую роль, хотя я вас практически не знаю и, возможно, вы никогда не программировали на Ruby.



Немного истории
Я заинтересовался вложенным набором и его рендерингом, одновременно познакомился с рубином и рубином на рельсах.

Год был 2008. Если вы помните, на тот момент реализация алгоритма вложенных множеств в Ruby находилась в исходном состоянии.

Мы использовали вложенный набор для формирования дерева комментариев.

Основная проблема работы с вложенными множествами заключалась в том, что достойного и достаточно распространенного решения для рендеринга деревьев практически не существовало.

Мы катались на велосипеде, как могли.

В тот момент я хотел рисовать деревья с помощью простой рекурсии .

Почему? Поскольку этот подход, на мой взгляд, довольно прост в реализации, Легко понять и практически не содержит магии.

В 2009-2010 годах в моих проектах уже работала первая версия кода рисования деревьев.

Код тогда был действительно плохим — классический беспорядок во внешнем виде и логике.

Я не смог найти времени, чтобы расчистить Авгиевы конюшни.

Но! Код сработал .

В конце 2011 года я разобрался с кодом, отделил логику от представления и упаковал первую версию гема.

Были проблемы, но я полагался на коллективный разум github. Во всяком случае, я могу сказать, что в некотором отношении код стал красивым .

Но все равно ужасно медленно.

Я даже не хочу вспоминать эти страшные цифры.

В конце 2012 года случайный разговор с пользователем хабра Анонимный натолкнул меня на мысль, что мой код безбожно медленный, и так быть не должно.

И если до этого я ждал доброго парня с github, который подскажет, что нужно изменить в моем коде, то в этот момент меня охватил дикий интерес: что не так? Странно, но это почему-то было после виртуального разговора с Анонимный в одной из веток вопросов и ответов хаба, сидя дома с чашкой вечернего чая, я прокрутил в голове основные фрагменты своего кода и нашел узкое место.

Решение оказалось настолько простым, что на какое-то время даже сбило меня с толку.

В тот же вечер гем был исправлен и скорость рендеринга резко возросла.

Код стал быстрым.

В январе 2013 года, находясь в отпуске, я разработал новую версию камня и разместил ее в Интернете.

Теперь я вижу, что к моему ремеслу есть интерес и мне это чертовски приятно.



Благодарности
Я очень благодарен всем тем, кто помог мне советами, патчами, консультациями и конструктивной критикой и скептицизмом: в первую очередь это хакеры: ворбиз , ИспользованиеВинтовка И Анонимный .

Спасибо никому мджсарфатти за его сценарий вложенныйСортируемый на основе чего в моем геме работает перетаскивание.

Спасибо Иконце за пару иконок.

Спасибо моей любимой жене за ее безграничную поддержку и за то, что она есть я.

вкусно кормит пока я живу в виртуальном мире.



Планы
Сейчас я вижу несколько основных направлений, над которыми стоит работать: 1. Я вырезал из гема помощника, создающего простой шаблон для дерева комментариев.

По моему мнению, такой функционал надо сразу вынести в отдельный гем на основе моего гема.

Хотя таких решений, наверное, уже предостаточно.

И здесь стоит серьезно задуматься.

2. Есть много других решений для древовидных структур данных — act_as_ordered_tree , происхождение .

Было бы неплохо сделать и для них версию драгоценного камня.

3. Многие люди хотят иметь возможность рисовать основные узлы дерева в больших деревьях, а затем (при необходимости) загружать дочерние элементы.

Эту функциональность, конечно, стоит реализовать.

Наверное, скоро этим займусь.



Немного о граничных условиях
Я обнаружил, что перетаскивание клиента начинает значительно замедляться, если перетаскивается более 1500 узлов (учитывайте технические ресурсы).

Это просто пища для размышлений.

Лично для меня эта проблема пока не актуальна и я не буду придавать ей существенного значения.

Тем не менее, вы можете найти это полезным.

Просто знайте порядок цифр.



Общий
В целом, я доволен тем, как все получилось.

Надеюсь, моя маленькая поделка облегчит кому-нибудь жизнь.

Конечно надеюсь на конструктивную критику, отзывы и вопросы на странице проекта.

Удачи и удачи! Теги: #rails #nested set #render helper #awesome_nested_set #разработка веб-сайтов #программирование #ruby onrails

Вместе с данным постом часто просматривают: