На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
Страницы: (11) « Первая ... 8 9 [10] 11  все  ( Перейти к последнему сообщению )  
> функциональное наследование , по мотивам Дугласа Крокфорда
    Цитата Serafim @
    но как же виртуальный дом и всякие другие хипстерские шняги? :(

    Я вот для себя еще не решил хорош этот виртуальный дом, или нет. Куски разметки в js пока выглядят диковато, но, судя по популярности, не так страшен ч0рт, как его малюют. Надо будет как-нить попробовать что-нибудь наструячисть на реакте.

    Добавлено
    ЗЫ в ангуляре лично я разочаровался, по крайней мере в первом. Как там во втором не знаю.
      Цитата Астарот @
      Я вот для себя еще не решил хорош этот виртуальный дом, или нет. Куски разметки в js пока выглядят диковато, но, судя по популярности, не так страшен ч0рт, как его малюют. Надо будет как-нить попробовать что-нибудь наструячисть на реакте.

      Назови 10 отличий между реактом и FXML :D

      Цитата Астарот @
      ЗЫ в ангуляре лично я разочаровался, по крайней мере в первом. Как там во втором не знаю.

      Эт чойто? Вроде всё по феншую делали, и сервисы красивенькие, и di, и легковесные обвязки над нодами через ng-X атрибуты :-?
        Цитата Serafim @
        Назови 10 отличий между реактом и FXML :D

        Я не знаю что такое fxml :D

        Цитата Serafim @
        Эт чойто? Вроде всё по феншую делали, и сервисы красивенькие, и di, и легковесные обвязки над нодами через ng-X атрибуты :-?

        У него бойлерплейта много. Вот я знал ангуляр, потом пару лет его не использовал, посмотрел в готовый проект - темный лес :wall: Портянки кода, который нужен только самому ангуляру что б жить, пока до бизнеслогики ради которой все затевалось докопаешься - рехнешься... В остальном-то все довольно хорошо, и di, и деление на сервисы, но вот эта тяжеловесность убила.
          Цитата Астарот @
          Я не знаю что такое fxml

          Ты же джавист, Карл! Почему я знаю шаблонизатор JavaFX, а ты нет?
            Цитата Serafim @
            Ты же джавист, Карл! Почему я знаю шаблонизатор JavaFX, а ты нет?

            Потому что я джавист, который пишет сервера, а не клепает мордочки :) Морда у нас как раз на ангуляре, и именно в нее я заглянул, когда ей исполнилось полтора года отроду :D
              Я тоже сервер-сайд разраб, но на симфони. И как бы, я о чём...

              Ах, да... Тебе не стыдно не знать вообще всё о жабе? У тебя байткод от зубов должен отскакивать! :angry: А ещё должен свободно владеть котлином и скалой, а мысли излагать на греилс. <_<
                Как много всего я оказывается должен :D
                  продолжаю закручивать саморезы! :D

                  вот еще 4 теста, в которых выполняется проверка на объем памяти с разной реализацией гипотетического объекта Person
                  Прикреплённый файлПрикреплённый файлTestCases.zip (3,07 Кбайт, скачиваний: 100)

                  результаты приобрели более контретный вид, а именно:
                  1 тест (возврат объекта литерала с методами): ~11 Mb;
                  2 тест (возврат объекта литерала, но с выносом реализации методов и последующим их вызовом (мой предложеный изначально вариант :D)): ~6 Mb;
                  3 тест (возврат объекта литерала, но с выносом реализации методов и последующей их привязкой): ~5.3 Mb;
                  4 тест (возврат объекта литерала, но с указанием ссылок на локальные функции): ~6 Mb.

                  тесты проверял в Developer Tools Google Chrome 59.0

                  вопросы? :D
                    Цитата Cfon @
                    person.toString = function () {
                    return 'todo todo todo todo todo todo todo todo todo todo todo todo '+
                    'todo todo todo todo todo todo todo todo todo todo todo todo '+
                    'todo todo todo todo todo todo todo todo todo todo todo todo '+
                    'todo todo todo todo todo todo todo todo todo todo todo todo '+
                    'todo todo todo todo todo todo todo todo todo todo todo todo '+
                    ты лентяй :whistle: а оптимизптор вряд ли. :popcorn:
                      Cfon, кто тебя так код писать учил?
                      - Табы + пробелы
                      - Форматирования никакого
                      - Концы строк не обрезаны
                      - Переводы строк в crlf
                      - BOM? Srsly?

                      У меня JSLint сходит с ума, а если это дело ещё в VCS засунуть, то там вообще начнётся дичь...

                      Я к тому, что обычно за такое сразу на костёр и не важно на каком языке пишешь, и какой код в конце получается, никто даже смотреть не будет - отправят вычищать.
                        Цитата Serafim @
                        Cfon, кто тебя так код писать учил?

                        Не мешай ему - он изучает js позавчерашнего дня, и кодит так, как кодили наши предки :D
                        Прикреплённый файлПрикреплённый файлfirst_script_html.gif (10,38 Кбайт, скачиваний: 337)
                          Цитата Астарот @
                          Цитата Serafim @
                          Cfon, кто тебя так код писать учил?

                          Не мешай ему - он изучает js позавчерашнего дня, и кодит так, как кодили наши предки :D
                          Прикреплённый файлПрикреплённый файлfirst_script_html.gif (10,38 Кбайт, скачиваний: 337)

                          Да пофигу на это всё. Может и правильно делает, что с основ начинает (которые в некоторых случаях уже задепрекейчены). Человек говорил, что сишки шарит, а значит хоть какое-то представление о конвенциях должно быть (все упомянутые мною выше относятся вообще любому языку программирования, ну разве только кроме эзотерических). А тут смотришь на код и офигиваешь :-?
                            Цитата K313 @
                            ты лентяй :whistle: а оптимизптор вряд ли. :popcorn:

                            смотри мы рассматриваем случай 1, который приводит к большему расходу памяти так?
                            у меня как раз TestCase1.html показывает 11 Мб, остальные 3, включая и мой вариант ~6 Mb, что меньше на 5Мб, если оптимизатор опмизировал 3 последних случая, тогда почему 1 вариант расходует больше памяти? :)
                            пс. возможно у тебя какие другие цифры? тогда приведи сюда.

                            Добавлено
                            Цитата Serafim @
                            Cfon, кто тебя так код писать учил?
                            - Табы + пробелы
                            - Форматирования никакого
                            - Концы строк не обрезаны
                            - Переводы строк в crlf
                            - BOM? Srsly?

                            У меня JSLint сходит с ума, а если это дело ещё в VCS засунуть, то там вообще начнётся дичь...

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

                            ну ну ну спокойно уважаемый!
                            меня учил так писать Керниган и Ричи, знаешь их? :D
                            так вот при кодировании на JS я юзаю их стиль, щас не будем развивать тему оформления кода ок? :blush:
                            а данный код я набирал в Notepad++ там у меня все отображает нормуль, я хз где ты смотрел и куда

                            Прикреплённый файлПрикреплённый файлpic.png (32,43 Кбайт, скачиваний: 296)

                            по теме есть что сказать? нет? я так и думал :D

                            Добавлено
                            Цитата Астарот @
                            Не мешай ему - он изучает js позавчерашнего дня, и кодит так, как кодили наши предки :D

                            именно изучаю! >:(
                            пока другие не будем указывать пальцем, только балтают языком :D
                            чувачок ты наверное кроме халоворлд не знаешь как написать, а туда же учишь, сначала покажи, что умеешь потом учи ясно?
                            Сообщение отредактировано: Cfon -
                              Цитата Cfon @
                              а данный код я набирал в Notepad++

                              :facepalm:
                                Цитата Cfon @
                                пс. возможно у тебя какие другие цифры? тогда приведи сюда.

                                вообще, когда провожу какие нибудь тесты, то стараюсь их проводить в условиях обычного пользователя. Мне же главное знать, как будут выполняться мои скрипты на компьютере у клиента?! Пойдёт его машина топором на дно или будет летать как бабочка?! Поэтому у меня даже настройки во всех браузерах обычно по умолчанию стоят. Конечно у узеров разные комьютеры, но для сравнения нагрузки от одного кода с другим - это не главное... А вот в разных браузерах, один и тот же код, может вести себя по разному. В одном всё летает, а в другом создаётся заметная нагрузка (слежу в основном в обычном TaskManager)

                                Для нашего же случая, чтоб конкретно по потреблению памяти судить, я отключал у компа виртуальную память и потом опять же в TaskManager смотрел, как память тратится.
                                Конечно, думаю интерпретатору javascript ни кто не помешает, что-то временно скинуть на диск, если память уже впритык, НО во время тестов, я такого не заметил. То есть если память доходила до предела, то скрипт молча вешался :hang:

                                Кроме того, в разных браузерах сборщики мусора работают по разному. Например у меня в Опере память быстро освобождалась, при каждой перегрузке страницы. И потребление показывало практически одинакого при всех повторах одного и того же теста. То есть видно, что память освобождается каждый раз и всё начинается с нуля.

                                А вот в другом (или в FF или в IE, не помню уже), там при перегрузке страницы было только увеличение потребления памяти, и так можно было 3 - 4 раза перегрузить страницу, пока не увидишь, что было произведено освобождение памяти...

                                У Оперы сам голый процесс занимает у меня где-то 60 Мб памяти, её я от каждого результата сразу вычитаю...
                                Далее тестю
                                ExpandedWrap disabled
                                          var all_obj = [];
                                          var all_res = [];
                                          var obj = null;
                                          
                                          var mtime = Date.now();
                                          for ( var j = 0; j < 1000000; j++ )
                                          {
                                              // TEST x
                                          }
                                          alert('Created '+j+' objects!\n\nall_obj[ '+(--j)+' ] = "'+all_obj[ j ]+'"\n\nall_result[ '+j+' ] = "'+all_res[ j ]+'"\n\nmtime = '+(Date.now()-mtime) );

                                TEST 1
                                ExpandedWrap disabled
                                  all_obj.push( 0 ); // массив размером в -> 10 Mln = 35 Mb.,  mtime = 900 msec
                                то есть массив с 10-ю миллионами результатов в виде простых чисел занимает 35 Мб (60 Мб уже вычтены), то есть это память затрачиваемая на 10 млн ключей этого массива. Ну и плюс память на сами значения этих ключей, то есть на (int)0. Там разницы вроде не было между 0 и null, оба значения простые и храняться наверняка прямо в <STRUCTUR> описания значения ключа (без всяких там ссылок на память со значением)...

                                TEST 2
                                ExpandedWrap disabled
                                  all_obj.push( { } ); // пустые объекты -> 10 Mln = 310 Mb.,  mtime = 7.500 ... 9.000 msec
                                теперь вижу, что на каждый пустой объект тратится ( 310 - 35 ) / 10'000'000 = где-то 27 байт. То есть теперь в <STRUCTUR> каждого ключа указана ссылка на память, где лежит уже другая <STRUCTUR> другого type (это её размер где-то 27 байт), которая и описывает свой объект { }.

                                TEST 3
                                ExpandedWrap disabled
                                  all_obj.push( { name: 'ooo_'+j, age: j, friends: [] } ); // объекты со свойствами  -> 4 Mln = 350 Mb.,  mtime = 7.000 msec
                                  all_res.push( 123 * Math.random( ) ); // с добавкой массива для результатов -> 4 Mln = 405 Mb.,  mtime = 9.000 ... 10.000 msec
                                вторая строка это для сравнения со следующим тестом. Это массив, где будут храниться результаты вызова метода. И так, подсчитываем, 405 / 4'000'000 - 35 / 10'000'000 = примерно 100 байт. Ну и минус 27 байт и того, где-то 70 байт ушло на три свойства в объекте. И времени на создание таких объектов ушло в два с половиной раза больше (вторую строку закомментировать, и иттераций у нас же теперь в 2.5 раза меньше по сравнению со вторым тестом, а время такое же 7.000 милмсекунд).

                                Потом значит, использовал прогу HxD, делал снимок памяти и находил там все созданные объекты от "ooo_0" до "ooo_3999999". Все были там, ни кто ни куда не пропал.

                                TEST 4
                                ExpandedWrap disabled
                                  all_obj.push( { name: 'ooo_'+j, age: j, friends: [], foo : function( param ){return param * Math.random();} } );
                                  all_res.push( all_obj[ j ].foo( 123 ) ); // с встроенным методом и его выполнением -> 1 Mln = 260 Mb.,  mtime = 30.000 msec
                                добавили ещё одно свойство (метод), считаем, 260 / 1'000'000 = 260 байт ( 35 / 10'000'000 уже не вычитаю, там разница уже всего в пару байт, уже не важны ). Вычитаю 100 байт предидущего теста, получаю 160 байт на объявление функции прямо в объекте.

                                TEST 5
                                ExpandedWrap disabled
                                  all_obj.push( { name: 'ooo_'+j, age: j, friends: [] } );// с пристроенным (не знаю, как называется) методом и его выполнением -> 1 Mln = 145 Mb.,  mtime = 5.000 msec
                                  all_obj[ j ].foo = function( param ){return param * Math.random();};
                                  all_res.push( all_obj[ j ].foo( 123 ) );
                                и здесь я удивился... :scratch: Получилось, что если метод объявлять не прямо в объекте, а прикручивать к объекту позже, то потребление памяти уменьшается аж в ( 145 / 1'000'000 - 100 = 45 байт на прикрученую функцию ) в 3 раза и кроме того ещё и быстрее выполняется аж в 6 раз!

                                То есть первое подозрение было, что при объявлении функции прямо в объекте, в памяти создаётся новый блок с телом функции для каждого нового объекта. Хотя по моему мнению, тело функции должно было быть одно на все объекты, а у каждого объекта в структуре foo : <STRUCTUR> должна была бы лежать ссылка на память, где это тело. В тесте 5 похоже так и есть, функция одна, а в foo : <STRUCTUR> каждого объекта лежит ссылка на неё...

                                Потом повторил тест 4 но без выполнения метода foo, думал может выполнение столько тратит. Но результат не сильно изменился.
                                ExpandedWrap disabled
                                  // повторение 4-го теста БЕЗ выполнения встроенного метода foo  -> 1 Mln = 235 Mb.,  mtime = 22.000 msec
                                в общем-то видно, что затяжка из-за объявления встроенного метода, а не из-за его выполнения....

                                Сейчас сижу вот и думаю (тесты месяц назад же писал), может это <STRUCTUR type="function"> такая большая (160 байт, вернее 160 - 45 = 115 байт). Тогда при встроенном методе, у каждого foo : <STRUCTUR> лежит ссылка на свой <STRUCTUR type="function">, то есть эта структура <STRUCTUR type="function"> у каждого объекта своя. А вот у каждой этой структуры <STRUCTUR type="function"> уже лежит ссылка на память, где находится само тело функции, и эта память одна на все эти структуры, то есть тело функции уже в одном экземпляре.

                                А когда функция прикручена, то структура <STRUCTUR type="function"> одна на всех, а у каждого объекта в foo : <STRUCTUR> лежит ссылка на эту единственную для всех <STRUCTUR type="function">. Таким образом и сохраняется правильное поведение javascript при проверке для встроенных методов
                                ExpandedWrap disabled
                                  all_obj[ x.foo ] == all_obj[ y.foo ] // false
                                а для прикрученных
                                ExpandedWrap disabled
                                  all_obj[ x.foo ] == all_obj[ y.foo ] // true



                                Чтоб проверить это надо повторить тест 4, но уже с бооольшим телом функции. Только мне сейчас и влом и времени нету на это. :bad:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (11) « Первая ... 8 9 [10] 11  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1781 ]   [ 22 queries used ]   [ Generated: 19.04.24, 21:36 GMT ]