Jump to content
  • Sign Up
s0rr0w

Решение JS-задачи про таблицу

Recommended Posts

Не ужели идеальное решение и ни у кого не найдется ни комментариев ни критики?

s0rr0w, неужели и тебе нечего добавить?

Share this post


Link to post
Share on other sites

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

Я вот пробовал получать ячейку таблицы без первоначального обхода таблицы, а по запросу. Например если в запрашиваемой строке нету связанных ячеек по вертикали, то можно делать обход только текущей строки, а не всей таблицы, и вот эти промежуточные значения кешировать в матрицу. А вот если есть связь ячеек по вертикали, то тут вот я запнулся, реализовать, то можно, но у меня появились сомнения об оправданности такого подхода. Если есть связь по вертикали, то нужно подниматься построчно вверх, до того момента, пока не попадется строка у которой число (tr[n].cells.length + ?(colspan - 1)) == (tr[0].cells.length + ?(colspan - 1)), где n - номер строки, ? - сумма (мало ли вдруг у кого-то символ не отобразится), либо пока не дойдем до tr[0]. Далее уже из полученного массива строк строить карту ячеек и кешировать. Вроде бы тоже возможны ситуации когда обхода всей таблицы не будет, но не всегда, зависит от структуры таблицы и от того, что на момент запроса уже есть в кеше.

В общем, что-то крутил мутил)

Share this post


Link to post
Share on other sites

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

Имхо, а я медведя поддерживаю. Лучше изначально собрать один объект со всеми данными и потом не париться, чем собирать их по ходу пьессы и постоянно. Короче я всегда был ЗА такой же подход, как у Медведя.

Share this post


Link to post
Share on other sites

А я не сказал, что подход плохой. Просто я попробовал найти лучше:)

Просто если есть возможность уйти от полного обхода, списков, массивов, не важно чего, то нужно уходить. Это так же как с сортировкой данных, если бы было безразлично, то все бы сортировали пузырьком, и не парились изобретением всяких хитроумных алгоритмов, для уменьшения блужданий по элементам, а следовательно и общего кол-ва итераций.

чем собирать их по ходу пьессы и постоянно

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

Share this post


Link to post
Share on other sites

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

Я думал об этом. Но решил проверить время построения матрицы.

Я делал табличку 100х100, правда без ровспанов и колспанов и проверял время работы метода createGrid.

Результаты:

ФФ 16.0.1 = 15-17 мс

IE8 не более 100мс

В ие8 конечно долговато, но и табличек таких на сайтах не будет.

Поэтому так вот и решил оставить.

Если есть связь по вертикали ...

Как ты связь эту вычислишь? И как ее вычислишь к конкретной ячейке?

Share this post


Link to post
Share on other sites

Результаты:

ФФ 16.0.1 = 15-17 мс

IE8 не более 100мс

В ие8 конечно долговато, но и табличек таких на сайтах не будет.

Поэтому так вот и решил оставить.

ну да, согласен. Тогда затраты на хитроумный поиск, в скопе займут больше времени, чем сразу построить матрицу

Как ты связь эту вычислишь? И как ее вычислишь к конкретной ячейке?

А я вводил понятие физического кол-ва ячеек в строке и виртуального, то есть с учетом colspan. Я изначально получал вирт. кол-во для первой строки и сохранял, назовем ее tLen, это в свою очередь служит отправной точкой.

А дальше сравнивал:

Если (вирт. кол-во текущей строки == tLen), то значит там нет завязок с rowspan со строками выше, а ниже нас не интересуют.

А если (вирт. кол-во текущей строки < tLen), то значит строки находящиеся над текущей связаны по rowspan с текущей.

Ну, а дальше там уже поиск тогда

Share this post


Link to post
Share on other sites

А я не сказал, что подход плохой. Просто я попробовал найти лучше:)

Да нее, это я так, понты кинул по старой памяти) Куда мне ко взрослым лезть-то :D А ваще интересно, что Сорыч по этому поводу скажет :)

Share this post


Link to post
Share on other sites

Куда мне ко взрослым лезть-то

не понял о чем ты?

у s0rr0w там по-любому наверное есть какое-то крутецкое решение, на которое мне мозгов не хватило :)

Share this post


Link to post
Share on other sites

Куда мне ко взрослым лезть-то

не понял о чем ты?

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

у s0rr0w там по-любому наверное есть какое-то крутецкое решение, на которое мне мозгов не хватило :)

Нее, мне не столько решение интересно, как сам подход узнать правильный :)

Share this post


Link to post
Share on other sites

а ваще право не имел, потому что лошара)

А, что уж мне тогда говорить вообще :facepalmxd:

Нее, вы все молодцы, трудолюбивые) Но тем не менее всё, давай эту тему закроем, ибо уже флудом попахивает))

Share this post


Link to post
Share on other sites

Да хватит тебе самокритиковаться. Я сам немножко только из танка вылез. Так... люк приоткрыл.

Share this post


Link to post
Share on other sites

А вот мой индусский код http://jsfiddle.net/4whnq/2/ тоже обход всей таблицы и создание матрицы.

Побольше бы таких заданий, где не приходиться шаблонить, а красота кода и мозги придут ко мне со временем :rolleyes:

Спасибо.

Share this post


Link to post
Share on other sites

А вот мой индусский код http://jsfiddle.net/4whnq/2/ тоже обход всей таблицы и создание матрицы.

Побольше бы таких заданий, где не приходиться шаблонить, а красота кода и мозги придут ко мне со временем :rolleyes:

Спасибо.

Вот такие вот штуки не люблю в коде var i4 = i2; (

Share this post


Link to post
Share on other sites

А вот мой индусский код http://jsfiddle.net/4whnq/2/ тоже обход всей таблицы и создание матрицы.

Побольше бы таких заданий, где не приходиться шаблонить, а красота кода и мозги придут ко мне со временем :rolleyes:

Спасибо.

Код, конечно, тяжело читать :D

http://learn.javascript.ru/coding-style

Но работает!

Share this post


Link to post
Share on other sites
Вот такие вот штуки не люблю в коде var i4 = i2; (

Назвав код индусским я предупредил, что код довольно ужасен :) i4=i2 было сделано для того, чтобы инкрементировать переменную внутри рекурсивной функции, не трогая при этом i2. that = this - передача ссылки на объект в функцию. Да и по логике там функция не правильно размещена: она внутри цикла, т.е инициализируется несколько раз, что вроде как плохо.

Edited by moron

Share this post


Link to post
Share on other sites

http://jsfiddle.net/tGu2Q/

Буду рад критике.

Мне немного не понятно, зачем нужно было городить огород с конструктором TableGrid. Профита от такого решения нет никакого, а усложнение кода налицо

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

Да нее, это я так, понты кинул по старой памяти) Куда мне ко взрослым лезть-то :D А ваще интересно, что Сорыч по этому поводу скажет :)

Каждый подход имеет право на жизнь. В каких-то случаях нужно делать вспомогательный массив, в каких-то его лучше генерировать постоянно, на лету.

Share this post


Link to post
Share on other sites

вот еще одно решение: http://forum.htmlbook.ru/index.php?showtopic=40101&view=findpost&p=280031

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

Share this post


Link to post
Share on other sites

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

Зачем именно конструктор? Почему не синглтон?

По поводу второго решения.

У меня оно не работает почему-то.

Но я посмотрел код, и, честно говоря, не понял, зачем нужна функция check()

Share this post


Link to post
Share on other sites

чем тебе не нравится конструктор?

Что будешь делать с несколькими таблицами и синглтоном, причем юзать не один метод getCell, а несколько разных методов?

Share this post


Link to post
Share on other sites

чем тебе не нравится конструктор?

Что будешь делать с несколькими таблицами и синглтоном, причем юзать не один метод getCell, а несколько разных методов?

Мне не конструктор не нравится, а преждевременное усложнение кода, особено в теле конструктора. У тебя только половина кода выполняет полезные действия, остальная - обслуживающая. Я не говорю, что это плохо, но это может стать причиной чрезмерного усложнения в будущем.

Синглтон будет содержать только методы работы, но не данные. Данные пусть таблица и содержит, они ведь к ней относятся.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Member Statistics

    46,837
    Total Members
    159
    Most Online
    Мишкин
    Newest Member
    Мишкин
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Спрашивают сейчас

  • Пишут сейчас

    • Как облачные технологии помогают малому и среднему бизнесу экономить   Любой инструмент создают, когда какой-то процесс нужно сделать удобнее, эффективнее, выгоднее. Облака — такой же инструмент. С ними бизнес трансформируется, обретает новую форму и развивается быстрее.   Облака обеспечивают высокую производительность за адекватные деньги. Бизнес, который выбрал облака для решения задач, платит только за то, что использует. В отличие от тех, кто еще работает по старинке.   Давайте разберёмся по порядку.   Бизнес без облачных технологий   Это классическая схема. Так работают многие компании, которые ещё не решились использовать облака.   Представьте небольшой бизнес: 10 сотрудников, каждый из которых работает на своём компьютере и выполняет задачи. Все компьютеры соединены сетевым кабелем в мини-сеть и могут обмениваться между собой информацией.       Ещё где-то на стене висит маршрутизатор, который отвечает за то, чтобы у каждого сотрудника был интернет.   Каждому компьютеру в такой системе требуется:                                  Лицензионные операционные системы и приложения.                                 Периодический ремонт и обслуживание.                                Модернизация при необходимости.   Так каждый компьютер превращается в объект, который регулярно требует вложения денег.   Ещё нужен человек, который постоянно будет в офисе компании на случай, если что-то пойдёт не так. Его функция — быстро прийти на помощь и исправить косяки и поломки, которые возникают в рабочем процессе. Как правило, это штатный ИТ-специалист, которому нужно платить зарплату.     С ростом компании появляются новые рабочие места, оборудование, серверные комнаты. Общий бюджет на содержание и обслуживание оборудования растёт.   Штат ИТ-специалистов тоже растёт. Так появляется новый отдел, сотрудникам которого тоже нужно платить зарплату.     Для малого и среднего бизнеса это нецелесообразно. И этого можно избежать, если начать использовать облака. Чем раньше бизнес понимает это и переносит работу в облака, тем больше получается сэкономить в итоге.   При переходе в облако малый и средний бизнес экономит, а сэкономленные ресурсы направляет на развитие бизнеса.   Бизнес с облачными технологиями   При облачной организации ИТ-инфраструктуры вся информация хранится на виртуальном сервере в облаке, а уже к нему подключены все компьютеры.     Когда бизнес переходит в облако, появляются новые возможности:                                  Использовать старенькие системные блоки в качестве терминалов доступа к облаку.                                Перестать покупать дорогие рабочие станции и новое серверное оборудование.                                 При выходе старых системников из строя покупать недорогие тонкие клиенты.                                 Вычеркнуть из бюджета расходы на содержание и модернизацию оборудования.                                 Перестать тратить деньги на специализированные помещения, электроэнергию.                                 Использовать ресурс ИТ-специалистов для решения задач развития компании.                                 Увеличивать и уменьшать ИТ-инфраструктуру в нужный момент.                                 Организовать мобильную работу сотрудников, сэкономив на офисе.   Некоторые компании боятся переходить облака, только потому, что для них это что-то новое и неизвестное. Но в Украине, как и во всем мире, это уже норма. Как и сопутствующие переходу преимущества.   1.                             Бизнес в облаке платит только за то, что использует. Если требуется увеличить мощность, скорость, производительность или другие характеристики, нужно только сказать об этом провайдеру. Он всё сделает. 2.                             Обновлять или добавлять мощности рабочим станциям не потребуется, потому что теперь вся мощность берётся с сервера. При необходимости её можно добавить или убрать без покупки дополнительного оборудования. 3.                             Если у компании ещё нет ИТ-специалиста, можно доверить администрирование ИТ-инфраструктуры в облаке провайдеру. Это выгоднее, чем нанимать для этих задач отдельного специалиста. Если специалисты в штате уже есть, им можно поручить более серьезные задачи, чем чистить кулеры от пыли и восстанавливать с разной степенью успешности случайно удаленные кем-то из сотрудников данные. 4.                             Облака универсальны. Их легко адаптировать под любые проекты со своим набором характеристик и программ. 5.                             Есть возможность резервного копирования информации и восстановления при необходимости. 6.                             При использовании облаков появляется возможность планировать расходы и избежать спонтанных трат, которые возникают в связи с внезапными неисправностями оборудования в офисе. 7.                             Компании, которые отказываются от облаков и покупают свои серверы в офис, оборудуют серверные комнаты, через 3-5 лет вынуждены обновлять, дополнять или вовсе менять серверы на новые. Это всегда дорого. С облаками этого делать не нужно. При необходимости можно добавить мощности за небольшую плату, но покупать сервер нет необходимости. 8.                             Часто при размещении своего сервера в офисе есть риск, что информация о вашем бизнесе окажется под угрозой. Физические серверы могут изъять или украсть и получить доступ к данным. С облачной инфраструктурой, особенно если облако расположено в зарубежных дата-центрах, этот риск сведён к минимуму. Даже если кто-то получит физический доступ к компьютерам в офисе, не зная реквизитов доступа к облаку, доступ к информации получить не получится. На компьютере её просто не будет. Всё останется на сервере.   У облачных технологий много преимуществ. Для каждого бизнеса есть свои плюсы. Поэтому компании всё чаще отказываются от классической модели инфраструктуры в компании и переходят в облака. Как легко перейти в облако   Чтобы компании убедились в выгодах и почувствовали преимущества использования облаков, мы предоставляет тестовый бесплатный период на 7 дней.   Это хорошая возможность попробовать все функции и примерить решение на свой бизнес.   При этом совсем не обязательно сразу переводить в облако всю компанию. Можно попробовать на филиале, отделе или нескольких сотрудниках.   Закажите тестовую среду или, если у вас есть дополнительные вопросы, задавайте их нашей службе поддержки. Мы работаем для вас 24х7.
    • Воспользуйтесь поиском Google
  • Popular Contributors

×
×
  • Create New...