Александр Мельник

Александр Мельник

С нами с 02 сентября 2016; Место в рейтинге пользователей: #52
07 июня 2020, 17:16
+1
Не буду делать выводов или куда-то склонять. Расскажу опыт одного нашего магазина.
В нем около 30000 товаров сейчас, около 500 стандартных опций товаров.
Работает на выделенном сервере с 16 гигами оперативной памяти, процессоре coreI7 последнего поколения. И разрабатывал его не я, а умные ребята…
Компонент для импорта экспорта товаров задыхается настолько, что менеджерам приходится готовить excel файлы с 5 товарами. То есть если товаров 1000 то они делают 200 файлов, иначе сайт падает при импорте. Компонент seoFilter сразу после установки «убил» сайт наповал, потому что он как-то генерирует сразу очень очень много своих страниц, компонент mFilter2 справляется со своими задачами, однако количество товаров растет, количество опций растет и он уже тоже задыхается — страницы открываются по 4-7 секунд.
Мой вам совет, выбирайте правильные инструменты для решения задач. MODX прекрасен, но я лично не видел ни одного реально большого магазина на нем. Все только бьют себя в грудь, но по факту, пока не видел.
04 июня 2020, 15:11
0
Еще глупый вопрос задам. У в modx есть возможность работы с удаленными базами данных?
Какое наиболее грамотное решение, если сайт продолжает работать со своей базой, но часть информации должен отправлять в базу данных на другом сервере?
31 мая 2020, 13:24
0
В целом я с вами согласен. То что я пишу сейчас — это не кому-то на заказ, а просто для саморазвития, поэтому творю что хочу)
Я когда начинаю что то разрабатывать совсем с нуля, иду от простого к сложного, сначала делаю наброски, пишу так как легче мне и проверяю саму идею. Если уже заработало и идея жизнеспособна, начинаю как-то код улучшать. Поэтому наброски как правило (если код использует js ) делаю на jquery.
А на днях посмотрел, ну реально же всего 4 места где используется jquery (а тут еще месяцок назад на этом сайте под одним постом была долгая дискуссия, мол что js сейчас сам по себе идеален для работы c DOM) и стало интересно смогу или нет избавиться от него, просто для прокачки навыков скорее всего.
31 мая 2020, 13:00
0
Артем, а подскажите, откуда вы брали информацию о методах у target? Да и на сколько я понимаю, это применимо к любому dom-элементу.
matches
classList
closest
Просто это очень похоже на методы jquery а вот у ванильного js я нигде не находил их описания.
максимум
learn.javascript.ru/dom-navigation
но там эти методы не перечислены.
31 мая 2020, 10:14
0
ну а по поводу того, чтобы делать все что вы описали на modx, все же подумайте еще раз и взвесьте. Тут либо вы гений, либо сильно обожжетесь и все равно будете кого-то нанимать, на тот же laravel.
На мой взгляд, такого масштаба проекты не делаются на cms.
31 мая 2020, 10:08
0
я к тому, что очень давно не видел сайтов, которые представляют из себя ленту приколов, утыканную рекламой. Прямо аж глаз резануло. Вспомнилось как в 98 году, купив в ларьке карточку для подключения к интернету на 1 час, ночью через телефонную линию подключался и смотрел нечто подобное)
а на данный момент я посещаю максимум 10-15 сайтов, поэтому и не знал, что подобные «явления» все еще живы.
31 мая 2020, 09:13
+2
решил посмотреть что это вообще такое за fishki.net.
Как будто назад в 1998 попал, думал такого уже и нет в современном интернете)
31 мая 2020, 08:53
0
Хорошая практика — вешать обработчик на document, а затем разруливать его таргет через обычный if.
ну да, я вначале так и пробовал,
Приходит в голову мысль, что раз у нас есть объект event то через него можно проверять кто инициатор, кто target и уже по условию проверять наш ли это пациент.
но для меня проблемой стало то, что таргет как ему и положено всегда указывает на инициатора события, тоесть на input например, если мы изменили текст в нем. Но как определить, что этот инпут именно из той формы, за которой мы хотим следить?
К примеру форма имеет атрибут id = «filter», но на странице есть еще 20 форм, формы заказа обратного звонка, калькулятора какого-то, еще что то.
если наш листенер повешен на весь объект документ, то он будет следить за всеми элементами всех форм и единственный способ решить задачу, который я вижу, это всем input задавать определенный класс и проверять на его наличие.
Пока сделал так
let form = document.getElementById('formtest');
        form.addEventListener('change', function (event) {}
по крайней мере под мою задачу так оказалось удобнее. теперь событие возникает только если изменена конкретная форма и что важно для меня — target тоже всегда сама форма, а нее ее отдельный инпут.
Насчет FormData нужно будет присмотреться. Я использовал ее несколько раз, но когда нужно было подготовить данные для отправки ajax-ом (хотя это можно сделать и вручную если заранее знаешь какие в форме input и их названия), я чаще пользовался formData чтобы передать через ajax файл. Но наверное вы и Сергей правы — собирать данные из формы эта штука должна уметь.
31 мая 2020, 08:07
+3
ну а я пессимист по натуре, поэтому отвечу — нет, мне кажется не справится.
Это конечно субъективный опыт, но при подходе — просто накупить компонентов и думать что все они друг с другом будут работать хорошо и быстро — дает ужасный результат. Даже если вы и заставите все эти компоненты работать совместно, то уже при 500 посетителей в сутки все будет тормозить.
На modx можно сделать все что вы описали, если взять чистой modx, pdoTools а все остальное продумать и разработать самому, аккуратно оптимизируя все запросы, кеширование и так далее.
30 мая 2020, 21:45
0
надо же, это примерно то, что придумал и я в своем методе.
спасибо за подсказки.
30 мая 2020, 21:35
0
а насчет fetch, да штука классная. Но это уже обработка запросов.
А у меня другое. Я наверное запутал всех, акцентируя внимание на слове — форма.
Это некий фильтр и в момент изменения любого его поля нужно собрать все текущие данные в виде массива объектов. Теоретически это может быть и вовсе не форма, а какие-то дивы. Ведь форма никогда и не отправляется по сути. Отслеживается событие change, все данные (выбранные чекбоксы например) собираются и далее уже пошла логика работы с этими данными. Форма здесь скорее дань традициям.
30 мая 2020, 21:14
+1
Спасибо, но formdata он вроде для отправки форм. я смотрел на него, не подходит (или я не умею его готовить)
Очень удобным для меня открытием оказались коллекции данных js — form
learn.javascript.ru/form-elements
сделал пока некий метод на них, но не уверен что смог учесть все нюансы. В форме могут содержаться элементы разных типов. Так например у инпутов нужно получать value, у textarea получать innerHtml, checkbox нужно проверять на наличие атрибута checked и так далее и это чтобы получить то, что мне давала даже не одна строка, а одно слово в jquery — serializeArray()
30 мая 2020, 19:31
0
что-то переделка всего 4 строк с jquery на синтаксис javascript дается тяжко)
А что нет никакого метода для получения данных из формы?
.serializeArray();
давал мне массив объектов в виде name — value
0: Object { name: "price", value: "22000" }
1: Object { name: "price", value: "150000" }
2: Object { name: "brand", value: "Maugli" }
length: 3
а javascript не подскажите, имеет метод получения сразу всех заполненных полей формы?
Я вот для себя открыл, что оказывается существует некая коллекция форм
learn.javascript.ru/form-elements
которая содержит в себе все формы, все элементы всех форм и так далее
Могу делать цикл, сам создавать сам объекты и наполнить ими какой-то массив. Но тогда нужно еще и проверять какой элемент выбран (например если есть input type radio), ну тоесть я то нагорожу 30 строчек кода). Но может я просто не нашел удобного метода в языке js для работы с данными с формы?
30 мая 2020, 18:23
0
а я дурак. наверное же вместо document addEventListener можно назначить на заранее полученный элемент.
29 мая 2020, 16:23
+3
Честь и хвала этим людям.
27 мая 2020, 21:50
+1
пришлите им пол банки сгущенки)
27 мая 2020, 21:44
0
Я к сожалению пишу не для того, чтобы помочь. Просто в очередной раз хочу выразить недоумение.
Мне кажется что я один использую компонент tickets исключительно как способ оставлять комментарии о товаре.
И каждый раз с ужасом читаю — «сделал сайт на tickets» или «создаю ticket»… Сколь многогранен и непознан мной этот компонент.
25 мая 2020, 16:49
+1
Интересная тема. Пусть у вас получится.
Поскольку база теперь — это файл, лежащий в корне сайта, то среди выгод вижу например — сильно облегченный деплой сайта и плюс контроль версий, который включает и базу.
23 мая 2020, 21:39
0
Сайт выглядит как одностраничный лендинг, откуда вы там 180 000 страниц набрали. И в карте сайта у вас одна страница.
Ну это конечно не мое дело, просто удивлен.

А по поводу «тормозит», тут ничего умного не скажу. Проекты которые планируются как большие и нагруженные, нужно изначально правильно планировать — не использовать TB, создавать свои таблицы для данных, подбирать сервер с учетом этих нагрузок и пятое десятое. Не обрадую вас, скорее всего у вас вряд ли получится существенно улучшить работу сайта.
22 мая 2020, 20:05
0
Сформулируйте четко что вы хотите.
передать в чанк url текущей страницы вместе с GET
как можно достать только GET параметр
хочу брать GET оформленного заказа minishop2
Я так понимаю, что вы говорите о странице, которую видит покупатель после оформленного заказа.
Хотите забирать из url номер заказа?
Он и так доступен на этой странице и обратиться к нему можно через {$order.num}