Задать вопрос
  • Как установить курсор в желаемую позицию при фокусе на input?

    gennadiy403
    @gennadiy403
    Принцип могу предложить такой https://jsfiddle.net/f4dxsxqd/
    А вот как заменять нижние подчеркивания вводимыми цифрами - это уже другой вопрос :)
    Ответ написан
    Комментировать
  • Где можно заказать code review?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Артур, я посмотрел куски кода в твоих последних вопросах. Если ты продолжаешь игнорировать PSR-2 и использовать нестрогое сравнение (if ($this->get('parametr') == 1)), то нечего пока ревьювить, всё плохо.
    Ответ написан
    11 комментариев
  • Как правильно исключить импорты css/less из webpack-сборки серверной части react приложения?

    mr_T
    @mr_T
    Web-разработчик
    Немного поздний ответ, но тем не менее кому-то может быть полезен :)
    Можно использовать null-loader для серверной сборки.
    Вот пример: https://github.com/mrTimofey/vue-ssr-starter/blob/...
    Ответ написан
    Комментировать
  • На серверной или на клиентской стороне лучше делать локализацию?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    ЕМНИП контент срендеренный через js не очень хорошо индексируется. Но это было раньше, как поисковики сейчас смотрят на контент точно сказать не могу. Еще нюанс - тащить каждый раз словарь на клиент не очень хорошая идея. Еще вопрос с урл - для разных языков он должен быть разным, то есть хранить текущий язык в куке или локалстораже - плохая идея.
    UPD: имхо лучший вариант - отдавать с сервера уже локализованный контент.
    Ответ написан
    Комментировать
  • На серверной или на клиентской стороне лучше делать локализацию?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Если это веб-приложение, то особой разницы нет. Можно просто с сервера отдавать файл локализации на выбранный язык в JSON (не тащить все словари, а только на выбранный язык), и в Vue установить какой-нибудь плагин i18n и потом писать в шаблонах
    <p>{{ $t("message.hello") }}</p>
    где message.hello - ключ в словаре, и вызов $t("message.hello") вернет строку приветствия на текущем выбранном языке.
    Ответ написан
    Комментировать
  • Почему могут быть такие медленные показатели nodejs + redis?

    В момент запроса redis спит, и надо, чтобы он проснулся, причём если запросы к редису посылаются редко, то и просыпание будет дольше. Хотя по идее при запросе должно быть прерывание, из-за чего он должен проснуться достаточно быстро.

    А console.log действительно может работать долго, лучше между замерами его не вызывать.

    Конечно же, после редиса должен ещё проснуться node.js-скрипт :)
    Но обычно просыпание должно занимать до 1 мс, а два просыпания — до 2 мс. 6–12 мс — действительно многовато. Вероятно, просыпание выполняется долго из-за того, что большую часть времени скрипт и redis бездействуют. Ну или прерывания не срабатывают вообще или срабатывают, но из-за сильного бездействия система всё-таки решает, что лучше так быстро не будить скрипт.

    Попробуйте потестить под нагрузкой. Если пинг упадёт до 1 мс, то всё норм. Да, 1 мс — это может показаться много, но обычно запросы группируют пачками, и таких пачек вряд ли будет послано больше двух, ну максимум трёх в совсем сложных запросах, что даст суммарно до 3 мс пинга — не так страшно.

    Кто-то может подумать, а чего вообще так долго всё будится. Потому что каждое бужение отнимает процессорное время, и система, допустим, может сделать максимум 50 тыс бужений в секунду, загрузив одно ядро на 100%. Теперь представьте 10 скриптов и 10 редисов, которые что-то делают каждую 1 мс — это уже 20 тыс бужений, что загрузит одно ядро на 40%. И при этом суммарный пинг будет 2 мс. Для пинга 1 мс придётся сделать 40 тыс бужений — это 80% загрузки.

    Лучше всего эту проблему решают прерывания — скрипт будится только тогда, когда ему на сокет пришли данные или он, допустим, слушает клавиатуру, и пользователь нажал клавишу на клавиатуре, и т. д. В итоге получится, что если 10 скриптов ничего не делают и ничего не слушают, то и процессор не будет загружен. А если делают, то 80% загрузки — не так страшно, ведь у нас на сервере не одно ядро.

    PS. Ещё кстати может влиять ваша виртуалка. Я бы посоветовал потестить напрямую, ведь это та особенность, где виртуалка реально может влиять.

    PS. В node.js console.log блокирует скрипт, по крайней мере при выводе в файл. Т. е. считайте, что это примерно как вызвать fs.appendFileSync(). Да и при выводе в консоль тоже вроде медленно работает, хотя лучше проверить. И ещё не факт, что сама функция быстрая, хотя это уже должно слабже влиять.

    Да, действительно, убрал консольный вывод и стало сразу 1-2 мс. Если честно, то ожидал увидеть 0, как заявлено разработчиками 100000 в сек

    100к в секунду redis действительно без проблем выполнит. Но запрос дойдёт до редиса же не сразу, а после выполнения результат дойдёт до скрипта тоже не сразу. Т. е. каждый запрос всё-равно будет занимать порядка 1 мс, но при этом таких запросов можно послать 100 тыс в секунду. Это как в интернете у вас 100 мбит, но когда вы заходите на сайт, всё-равно 10–1000 мс из-за пинга. Но зато вы можете зайти на 10 таких сайтов сразу — тогда получится использовать канал намного эффективнее.
    Ответ написан
    2 комментария
  • Какой оптимальный (время написания тестов/эффективность) вариант тестирования веб-апи?

    lxsmkv
    @lxsmkv
    Test automation engineer
    тестирование регистрации и аутентификации никак с точки зрения теста друг с другом не связаны.
    в тестах регистрации вы хотите убедиться в том что если ввести невалидные данные то система даст отрицательный ответ. и если данные валидные то система ответит положительно.
    при логине вы хотите убедиться в том что если послать системе данные не существующего аккаунта система даст отрицательный ответ. если дать данные заблокированного аккаунта (ну например есть у вас такая категория), система ответит правильным сообщением. и, если пользователь существует и не заблокирован система ответит положительно. Естественно чтобы провести эти тесты, вам понадобится один валидный аккаунт в базе, чтобы система могла ответить положительно, и данные одного не существующего аккаунта, и одного заблокированного аккаунта. Если логин в систему не работает, ваши тесты логина обнаружат баг.
    Чтобы добится независимости от такого возможного бага, вы при тестировании запросов с залогиненым пользователем настраиваете систему перед тестом таким образом чтобы она не учитывала информацию по логину.

    Давайте разберем на примере: представьте вы тестируете инсталляцию системы пожарной безопасности в секретной лаборатории. Доступ в помещение только по электронной карте. Внутри помещения есть кнопка включения сигнализации, при срабатывании которой должны закрыться все окна в помещении и должен быть разблокирован замок двери.
    Вы тестируете замок двери отдельно. А для теста сигнализации и срабатывания оконной механики вы отключаете систему входа по карточке, и делаете его свободным. потому что идентификация при входе в помещение не является предметом теста для системы сигнализации (закрывание окон). В этой точке достигается независимость тестов.
    Но отключив замок двери для теста, вы не сможете убедиться в том что замок открывается при срабатывании сигнализации (второе условие) . Вам придется непосредственно перед проверкой снова включить дверной замок.

    Однако в случае если при тестировании входа выяснится что дверной замок не работает, то включить дверной замок для теста не получится, и второй тест скажет что мол замок двери открылся, все хорошо, однако на самом деле замок был все время открыт, потому что неработал. (т.н. false positive)
    Ответ написан
    6 комментариев
  • Приавильно ли кешировать данные в обычных переменных node.js проекта?

    @agaliullin
    CEO & Founder of Futureinapps, LLC
    Вариант 1. Reddis.
    Преимущества:
    1. Быстрый доступ к объектам
    2. Изолирован от node процессов
    3. Поддерживает сжатие и как следствие кушает мало памяти
    Вариант 2. MongoDB
    Преимущества:
    1. Простое сохранение и загрузка объектов
    2. Изолирован от node процессов
    Вариант 3. Файлы и переменные
    Использование файлов и переменных крайне не рекоменду, как было сказано выше может привести к серьезной утечке памяти или к потере данных, если приложение крашентся.

    Судя по вашей задаче быстрота получения данных не так критична, поэтому советую вам выбрать MongoDB
    Ответ написан
    Комментировать
  • Приавильно ли кешировать данные в обычных переменных node.js проекта?

    Сама суть кешировать данные в переменных нормальна, но не для таких данных или по крайней мере не так, мы не можем контролировать память и объемы данных, т.к задач и пользователей может быть я так понимаю неизвестное число, значит наша память в опасности, база легко справится с запросом и парочкой JOIN в нем
    Ответ написан
    2 комментария
  • Приавильно ли кешировать данные в обычных переменных node.js проекта?

    @kwolfy
    Хранить данные в памяти можно, но вот стоит ли. Основная проблема в том, что при хранении в памяти нет возможности шаринга данных между процессами, что приводит к невозможности масштабирования. Т.е. если один процесс перестанет справляется с нагрузкой, то при добавлении дополнительных процессов кеш будет дублироваться и при изменении данных кеши будут конфликтовать.
    В итоге, вам нужно определиться какую нагрузку ожидаете. Если вы считаете, что один процесс справится с ней - то не вижу проблем хранить всё в памяти
    Ответ написан
    Комментировать
  • Почему NGINX не добавляет заголовки при ответах от nodejs, отличных от 200?

    Lynn
    @Lynn
    nginx, js, css
    В документации по add_header написано, что по умолчанию заголовки добавляются только для кодов ответов 20x и 30x.
    Что бы добавлять заголовки всегда, нужно использовать флаг always.

    add_header 'Access-Control-Allow-Credentials' 'true' always;
    Ответ написан
    1 комментарий
  • Kак правильно передавать параметры в маршруты vue-router?

    @Artem0071
    Безработный mr. Junior
    Скорее всего проблема не во Vue, а в webpack'e
    ссылка1 ссылка2
    Ответ написан
    Комментировать
  • Почему bcrypt в node такой медленный?

    teknik2008
    @teknik2008
    Расскажите про GOLANG. Мне интересно
    А зачем используете синхронно? Используйте асинхронно hash вместо hashSync
    А вообще я юзаю стандартный crypto
    Пример async
    const crypto = require('crypto');
    const util = require('util');
    const cryptoPbkdf2 = util.promisify(crypto.pbkdf2); 
    
    let hashLength = 16;
    let iterations = 10;
    async function createSaltHash(email) {
        let salt = crypto.randomBytes(hashLength).toString('base64');
        let hash = (await cryptoPbkdf2(email, salt, iterations, hashLength, 'sha512')).toString();
        return { salt, hash }
    };
    
    async function checkSaltHash(email, salt, hash) {
        if (!email || !hash || !salt) return false;
        let userHash = (await cryptoPbkdf2(email, salt, iterations, hashLength, 'sha512')).toString();
        let check = userHash == hash;
        return check;
    };

    Ответ написан
    8 комментариев
  • Как правильно понимать бэнчмарки PHP & Python?

    @Fortop
    Tech/Team lead
    Поняли естественно неправильно.

    Приложения на php точно так же висят в памяти и точно так же работают.
    Тесты, которые вы смотрели, показывают лишь то, что как числодробилка php уже превосходит python

    Еще 5-6 лет назад по указанной вами ссылке python обходил php практически по всем тестам.
    Ответ написан
    Комментировать
  • Как правильно настроить локальную среду разработки virtualbox + nodejs?

    copist
    @copist
    Empower people to give
    https://stackoverflow.com/a/13752409/3544196

    Нужно "проковырять дырочку" в firewall
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT -m comment --comment "node.js port"

    Сохранить конфиг
    service iptables save

    Перезапустить iptables
    service iptables restart

    Теперь попробуйте открыть ваш проект в браузере
    Ответ написан
    Комментировать
  • Как не терять временя при изменении формата в DateTime?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Сколько времени на это подобные вопросы убито, а решение простое: хранить даты в БД в bigint (64-bit) поле в формате Unix timestamp. А в приложении приводите к нужному часовому поясу. И никаких проблем, не зависимо от конфигурации сервера БД.
    Ответ написан
    3 комментария
  • Как правильно запустить php-демона из php-скрипта?

    AlexMaxTM
    @AlexMaxTM
    public function run() {
            $set = array(
                'command' => 'work',
            );
            $this->demon = $this->setParam($set);
            chdir($this->demon['dir']);
            if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                /* Система Windows */
                pclose(popen('start /B cmd /C "php '. $this->demon['name'] .' >NUL 2>NUL"', 'r'));
            } else {
                /* Система *nix */
                $command = 'php -f ' . $this->demon['name'] . ' > /dev/null 2>&1 &';
                exec($command);
            }
        }

    Взято отсюда
    Ответ написан
    Комментировать
  • Как правильно понимать бэнчмарки PHP & Python?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    если много букав - то вот тут, хотя про современный PHP 7 ( или какой там) не в курсах, может он Ноду давно асинхронно обогнал

    если коротко - Питон - это Си с человеческим лицом - интерфейс ко всяким uvloop и numpy ям и кучи либ помельче

    а два плюс четыре разделить на корень из трех - хз, может пых и быстрее "из коробки"
    Ответ написан
    Комментировать
  • Как правильно понимать бэнчмарки PHP & Python?

    Stalker_RED
    @Stalker_RED
    Если учесть специфику работы 99.99% веб-проектов, то всем плевать. Серьезно.

    А если вам не плевать, то проводите реальные тесты на реальной нагрузке, с реальным железом. И включайте все кеши и оптимизации какие найдете - вас же производительность интересует, а не сравнение синтетики с синтетикой.

    Если почитать блоги яндекса или гугла, то можно заметить, что они десятки разных языков и платформ используют. И не редко бывает ситуация когда "эта штука написана на perl'е в 2004 году, и когда она начала тормозить нам оказалось дешевле поставить еще три сервера, чем переписать ее на более шустрый язык". Суровая реальность.
    Ответ написан
    Комментировать