• Как работает серверный рендеринг React.js с объектами браузера в компонентах?

    AMar4enko
    @AMar4enko
    https://facebook.github.io/react/docs/component-sp...

    Хук componentDidMount выполняется только на клиенте.
    Соответственно, если вы используете тот же ref, чтобы выполнить какие-то действия с DOM, то имеет смысл это делать в этом хуке.

    localStorage использовать в компонентах мне кажется неправильным. Вы же в нем состояние (или его часть) храните, а для управления состоянием у вас должен быть отдельный слой. В этом слое как раз можно сделать моки, которые описал Максим
    Ответ написан
    8 комментариев
  • Как работает серверный рендеринг React.js с объектами браузера в компонентах?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Могу быть не прав, но я так понял, что все объекты браузера мокаются (как будто в тестах, то есть делается например "ложный localStorage", ведь это по сути объект у котрого есть getter и setter. Для тестов я использовал - mock-local-storage). "Мокнуть" можно и самому, для этого писать нужно в global, так как в node окружении глобальный объект не "window". Подробнее можно посмотреть в коде библиотеки.

    Опять таки, давайте продолжим про localStorage, так как удобнее на конкретном примере. Почему мок нормально подойдет, как мне кажется? Потому что это будет как будто к вам на сайт зашел пользователь, у которого ничего в LS по вашему сайту не сохранено. Главное чтобы сработало: localStorage.setItem / getItem, и так как вы эти функции написали и объявили глобально - все получится (естественно, в коде у вас должно быть localStorage без window, либо нужно будет делать мок не просто в global, а в global.window - иными словами мы создаем в глобальом объекте объект window).

    P.S. на практике я не делал серьезного SS рендеринга, поэтому буду рад услышать, мнение тех, кто уже разобрался. В зарубежных источниках есть информация (например), и даже неплохо разобраны вещи с асинхронными запросами, но тем не менее, хотелось бы увидеть еще.
    Ответ написан
    2 комментария
  • GitHub: Как поддерживать актуальное состояние fork проекта?

    mgyk
    @mgyk
    git remote add upstream ...
    И каждый раз для обновления
    git fetch upstream
    git rebase upstream/master
    Ответ написан
    Комментировать
  • Синхронный и асинхронный код, почему так называется?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    А сам код синхронным не называется, это его по ошибке или для упрощения так называют. Синхронным и асинхронным называется только API ввода-вывода, т.е. операции, прерывающие исполнение кода и требующие от системы обратиться к внешнему устройству, работающему не синхронно с центральным процессором. Операции ввода-выдвода, каковые есть: работа с дисками, портами, контроллерами, периферийными устройствами, как клава, мыша, тачскрин, разные датчики, вебкамера, сетевые карты, блютузы и другие радиомодули, принтеры, видеокарты и прочее. Все они получают задание от программы, и исполняют его отдельно, своими мощностями. Потом внешние устройства присылают программе сигнал о статусе исполнения и, возможно, полученные данные. Программа все это время может ждать (если у нее синхронное API, т.е. блокирующее) или что-то делать (если асинхронное, т.е. не блокирующее). Если программа ждет, не переходит к выполнению следующего действия, то это синхронный ввод-вывод, потому, что осуществляется процесс синхронизации программы с внешним устройством. Внешне устройство посылает прерывание, которое обрабатывает операционная система и через несколько слоев драйверов оно попадает в программу, обычно в виде колбека или события. Если программа ждала, то вызов API не завершался, она все время слушала, когда придет событие о завершении операции ввода вывода, а получив его API отдает ответ и управление переходит к следующей команде, что и называется, синхронизацией с периферийным устройством. Если программа не ждала, то вызов API сразу завершается и не блокирует поток выполнения программ, это называется асинхронным API, потому, что процесс синхронизации не происходит явно, а ответы возвращаются через события.
    Ответ написан
    3 комментария
  • Как вы относитесь к короткоживущим процессам в NodeJS?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Расскажу, какая ситуация с этим у меня в Impress и что меня в этом устраивает и не устраивает.

    Сейчас процессы для обработки запросов порождаются при старте, и повторно порождаются при падении. Утечки памяти или падения процессов - считаю ненормальным поведением, но в реальности не все используемые библиотеки пушу я и даже не весь код приложений пишу я, поэтому нужно как-то с утечками и падениями бороться. Конечно падения минимизированны, т.к. весь прикладной код выполняется в sandbox`ах, и при утечках можно просто создать новый sandbox в том же процессе, восстановить в нем все нужные структуры данных, потом заменить ссылку со старого (утекшего или испорченного при исключении sandbox`а) на новый и убить старый. Это быстрее, чем порождать новый процесс.

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

    Как я хочу сделать. Кроме процессов обработки запросов иметь еще некоторый пул подготовленных запущенных процессов, которые уже и соединение к БД установили и развернули все что нужно в памяти. С родительским процессом они связаны TCP-сокетом, через который налажен RPC (полноценный вызов удаленных процедур с поддержкой колбэков, событий, асинхронного вызова нескольких запросов и т.д.) И когда возникает необходимость ответвить обработку или выполнить задание по расписанию, то вместо порождения процесса будет браться первый свободный процесс из пула и ему по RPC приходит заказ. Когда он все выполнил, то он по RPC возвращает колбэк или событие.

    Вот все у меня уже вроде готово для этого и сам RPC написан и отлажен, скоро реализую. А дальше по тому же RPC (но с транспортом через вебсокеты) собираюсь связать и клиентские приложения, чтобы они становились единым целым с серверными процессами и воркерами.
    Ответ написан
    2 комментария
  • В чем разница между node и nodejs?

    sim3x
    @sim3x
    Снести оба
    Поставить офф пакет

    Читаем https://deb.nodesource.com/setup чтоб узнать каким образом к нам на пк добавятся доп репозитории. Вся ответственность за проблемы только на тебе

    По дефолту ставится 0.10.x

    curl -sL https://deb.nodesource.com/setup | sudo bash -
    вставить для установки репозиториев

    sudo apt-get update && sudo apt-get install -y nodejs
    установить ноду

    если нужно свежее, то меняем
    sudo vim /etc/apt/sources.list.d/nodesource.list

    deb https://deb.nodesource.com/node_0.10 ....
    deb-src https://deb.nodesource.com/node_0.10 ...

    на
    deb https://deb.nodesource.com/node_0.12 ....
    deb-src https://deb.nodesource.com/node_0.12 ...


    sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install -y nodejs


    //узнать про твои пакеты ты можешь так which node; man node
    Ответ написан
    Комментировать
  • Как вычистить шлак из npm пакетов?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    find . -name "*.txt" -type f -delete
    и так со всеми расширениями, если без ключа
    -delete
    то сначала посмотрите списком, что оно есть и перепроверите, нужно ли грохать.
    Ответ написан
    Комментировать
  • Писать самому или брать готовое?

    nalomenko
    @nalomenko
    Руководитель отдела разработок в студии «Lava»
    Если Вам нужно что-то очень кастомное, то, конечно, пишите руками. Также можете писать плагины самостоятельно, если хотите попрактиковаться и повысить уровень познаний JavaScript.

    В противном случае, если есть плагин, который удовлетворяет все Ваши потребности, в этом попросту нет смысла.
    Ответ написан
    1 комментарий
  • В чём разница обёрток кода jQuery?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Вторая функция выполняется, когда объектная модель (DOM) готова к использованию, мол когдадокумент загружен и готов- делаем. Первая - в том же случае, т.к. The ready() method может быть применен только к одному данному документу, поэтому селектор не обязателен.

    Третья - то же самое в принципе, т.к. $ - это функция, если не передать в нее параметры (селекторы), то она вернет объект готового документа.

    Что при этом будет быстрее - хз.
    Вообще я с javascript и Jquery не очень дружу, поэтому могу ошибаться. Думаю, надо гуглить в сторону функции $
    Ответ написан
    Комментировать
  • В чём разница обёрток кода jQuery?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Первый — запуск кода после события DOMContentLoaded. Это значит, что DOM построен и можно безопасно начинать траверс.

    Второй код — IIFE, просто запуск код без попадания переменных в глобальный контекст.

    (function () {
    	var test = 7;
    })();
    console.log(window.test); //undefined


    Использование IIFE прекрасно подходит для паттерна «Модуль»

    var myObject = function () {
    	var test = 7; // Приватная переменная
    
    	return {
    		test: function (a) {
    			console.log(a * test);
    		}
    	};
    }();
    
    myObject.test(5); // 35
    Ответ написан
    Комментировать
  • В чём разница обёрток кода jQuery?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    выходит как-то так.
    (function($){
        $(function(){
            //code here
        });
    })(jQuery);


    1-ый вариант - когда нужно что бы код выполнялся только тогда, когда у нас готово DOM дерево. То есть документ сам догрузился и браузер завершил разбор дерева элементов. Так мы можем быть уверены что по нашему селектору нам вернут реально все доступные элементы и нету такого что что-то еще не догрузилось. Собственно $(function() {}) это полный аналог $(document).ready.

    2-ой вариант является хорошей практикой для ограничения области видимости. То есть ваш код работает только с теми объектами, которые передали в замыкания. Профит в том, что можно безболезненно подменять переменные. Скажем передавать jQuery другой версии или что-то в этом духе и при этом у нас нету необходимости менять хоть что-то внутри замыкания. Собственно об этом уже много раз спрашивалось и отвечалось
    Ответ написан
    1 комментарий
  • Чем отличаются директивы root и alias в nginx "на пальцах"?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Не совсем.
    Делают они одно и то же только для location /.

    Если у вас, например, location /img, то при
    root /var/www ссылка /img/1,jpg будет вести в файл /var/www/img/1.jpg

    а при alias /var/www та же ссылка будет вести в /var/www/1.jpg.
    Ответ написан
    2 комментария
  • Как запустить KPHP?

    miraage
    @miraage
    Старый прогер
    Он Вам не нужен, если Вы не знаете, как его собрать.
    Ответ написан
    2 комментария