• Как организовать архитектуру SPA приложения на нативном javascript?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Да архитектура не сложная.
    Обработать запрос на сервере - передать роутеру - отдать клиенту данные для рендеринга.
    Или что интересует конкретно? Вопросов может быть очень много, я с этим сталкивался сам. Например, как эмулировать страницы для ПС, для меня оказался наиболее сложным.
    Ответ написан
    4 комментария
  • Как каждый раз выполнять action корневого компонента в react-router-4?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Сделайте так:

    import React, { Component } from 'react';
    import { withRouter } from 'react-router-dom';
    import { someAcion } from '../somePlace';
    
    class App extends Component {
      ...
      componentWillReciveProps(nextProps) {
        if (this.props.location !== nextProps.location) {
           this.props.someAciton();
        }
      }
      ...
    }
    
    const mapDispatchToProps = {
      someAction,
    };
    
    export default withRouter(connect(null, mapDispatchToProps)(App));
    Ответ написан
    Комментировать
  • Почему промисы являются microtasks, а таймеры - просто tasks?

    devellopah
    @devellopah
    не долго гугля наткнулся на это (внутри диаграмма, которая всё объясняет)

    По поводу того почему промисы оформляются как микротаски есть такое пояснение:
    Treating promises as tasks leads to performance problems, as callbacks may be unnecessarily delayed by task-related things such as rendering. It also causes non-determinism due to interaction with other task sources, and can break interactions with other APIs, but more on that later.


    Если коротко, в event loop по очереди выполняются таски, однако сам таск может включать некую очередь из микрозадач, которая, в свою очередь, выполнится в контексте текущего таска. То есть, если взять таски x и y, где y следует за x, то получится, что console.log('promise') выполнится в контексте таска x(в самом его конце, аккурат перед началом выполнения следующего таска), а console.log('timer') - в котексте таска y.
    Ответ написан
    3 комментария
  • Производительность javascript кода?

    RubaXa
    @RubaXa
    FireFox
    — FireBug/Console/Profile

    Chrome
    — DevTools/Profiles/Collect JavaScript CPU Profile/Start
    — DevTools/Timeline
    Ответ написан
    1 комментарий
  • Какой необходимый уровень знаний для junior React.js Разработчика?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    UPDATE: реальные тестовые задания и разборы здесь, ответы на все вопросы из поста в моем блоге об обучении react.

    не включая основы js

    Извините, но стандартная задача, про "напишите функуцию add, которая при вызове add(1)(2) вернет 3" - многих положила на лопатки =) Поэтому будьте готовы..

    React
    0) Какую проблему решает react ?
    1) Мгновенно ли срабатывает setState? Если нет, то как выполнить код, который 100% выполнится после того, как новый state будет установлен?
    2) Зачем многие постоянно пишут в constructor: this.FUNCTION_NAME = this.FUNCTION_NAME.bind(this) и отсюда вопрос вытекает чему равно this в разных местах вашего компонента...
    3) в каких методах жизненого цикла стоит выполнять xhr запросы? В каких стоит "обновлять state на основе props"?
    4) Что будет если вызвать this.setState в render методе компонента?
    5) зачем нужен componenWIllUnmount, приведите пример..
    6) Контролируемые, не контролируемые компоненты
    7) Как организовать роутинг в реакт приложении? (ответ: взять react-router - подходит, но было бы круто, если бы вы рассказали, как он примерно работает)*
    8) Зачем нужны propTypes? Что происходит с ними в production сборке?
    9) Как можно удобно "отлаживать" чужой код приложения, написанного на react (намек в сторону React devtools)
    ...

    Redux
    0) Какую проблему решает redux?
    1) Зачем многие создают типы действий NAME_REQUEST / NAME_SUCCESS ? А заодно, что такое "действие", а что такое "создатель действия"...
    2) Что такое редьюсер? Можете написать простой редьюсер без react/redux?*
    3) Для чего нужен redux-thunk? Как он работает? Напишите (можно псевдокод) асинхронный создатель действия (либо, если надоело говорить "терминами" - асинхронный aciton)
    4) Как компоненты приложения получают "пропсы" из "стора"?*
    5) Можно ли (и считается ли это нормальным) использовать state, если используется Redux?
    6) Почему в reducer'ax мы возвращаем новые объекты? Приведите пример, когда вы возвращаете новый объект, а когда тот же самый.
    6.5) А так же, "как в js вообще это работает?". Например:
    let obj1 { name: 'Test', age: 100 }
    let obj2 = obj1
    obj2.name = 'Test_new'

    Что будет в obj1, почему? В каких случаях объекты могут быть равны?
    7) Что возвращает функция connect (из react-redux)?
    ...

    Общее:
    0) package.json
    1) Webpack, gulp, etc...
    2) node.js
    3) promise

    Что-нибудь практическое:
    1) Как бы вы валидировали форму, если ошибки валидации приходят после submit'a ее на сервер..
    2) Почему не работает следующий код, сделайте чтобы работало
    ...
    На истину не претендую, но такие вопросы имели место быть на собеседованиях. В беседе можно многое разузнать дополнительными вопросами и так далее. Так же, если часть вопросов вам неизвестна - не беда, многие и на половину ответить не могут.

    p.s. возможно дополню...
    p.p.s. звездочкой отметил, на мой взгляд не самые необходимые для junior-собеседования вопросы.
    Ответ написан
    31 комментарий
  • Бывают ли такие вакансии на рынке: Javascript разработчик без умения верстать?

    @snejnoi
    Бывают, но только в хороших конторах, которые делают большие продукты, а не клепают лендиги каждый день.

    Там-то все и будет завязано вокруг javascript. Сейчас очень популярно делать одностраничные приложения и всю его логику ты будешь пилить на javascript, и к верстке будешь иметь минимальное отношение. Посмотри к примеру на gmail, twitter, youtube, meduza.io и т.д. Много ли там работы верстальщику? Нет.

    Но, отсутствие нужды в верстке не отменяет того факта, что нужно уметь в CSS(а лучше LESS/SASS), разбираться в адаптивном и респонсив подходах, иногда нужно знать bootstrap(все это можно освоить за 2-3 недели). Ты же все-таки будешь на стороне фронта и будешь смотреть на эти вещи и лучше тебе их понимать.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы a(1)(2)(3)(4)(5) вернуло число 15?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const a = v1 => {
      const f = v2 => a(v1 + v2);
      f.valueOf = () => v1;
      return f;
    };
    
    
    a(1)(2)(3)(4)(5) * 6  // 90
    10 + a(4)(5)(6)       // 25
    Math.pow(a(8)(1), 3)  // 729
    a(4)(6) - a(3)        // 7
    Ответ написан
    3 комментария
  • Почему перебор массива через for быстрее, чем .map()?

    RubaXa
    @RubaXa
    Хосподи, ну тут вам и написали ахинеи, слов нет.

    Начнём с того, что результат вот этого
    var b = new Array(1000000);
    b.map((_, i) => i * 2); // [empty × 1000000]

    Будет пустой массив из 1КК «дырок», а не `[0, 2, 4, ..., 1999998]`

    Во-вторых, посмотрите, что делает array.map и сравните с вашим `for`.

    В-третьих, v8, такой v8, что до сих пор не могут выкинуть js-реализацию этих методов и запилить нормульную native-имплементацию.

    В-четвертых, создание стрелочной функции не бесплатно.

    В-пятых, мекробенчмарки (без контекста) — зло.

    P.S. Вот FF молодец: https://jsbench.github.io/#d498a7c676aa46e17eb9a8e...
    Ответ написан
    Комментировать
  • Почему перебор массива через for быстрее, чем .map()?

    lazalu68
    @lazalu68
    Salmon
    Во-первых, у вас тест с map неправильный, гляньте в консоль.

    Во-вторых, for это цикл, в котором 1) сначала выполняется initialization, 2) потом перед каждой итерацией проверяется condition, 3) выполняется тело цикла, 4) а после итерации выполняется final-expression, вот и всё. А map включает в себя еще некоторую логику, как минимум сборку нового массива, и неизвестно что еще; map это сложная функция.

    Бтв, вот версия теста чуть корректней: разделены процедуры создания массива и итерирования по нему.
    var b = new Array(1000000);
    for (var i = 0; i < 1000000; i++) {
      b[i] = i;
    };
    
    console.time('simple');
    for (var i = 0; i < 1000000; i++) {
      b[i] *= 2;
    };
    console.timeEnd('simple');
    
    
    var b = new Array(1000000);
    for (var i = 0; i < 1000000; i++) {
      b[i] = i;
    };
    
    console.time('es6');
    b.map((_, i) => i * 2);
    console.timeEnd('es6');
    
    // simple: 5.100830078125ms
    // es6: 161.93994140625ms

    Ответ написан
    Комментировать
  • Почему в Facebook фронтендеров пересаживают на OCaml (Reason)?

    sim3x
    @sim3x
    Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript & OCaml ecosystems.
    Ответ написан
    Комментировать
  • Почему в Facebook фронтендеров пересаживают на OCaml (Reason)?

    Странная байка, не слышал чтобы ФРОНТ ендеров гнали на такой язык.
    Возможно их graphql реализован на окамле вот и гонят
    Ответ написан
    1 комментарий
  • Где найти примеры исходного кода HTML5 CSS3 сеньерского уровня?

    @FullStackAlex
    Веб-разработчик, электрик, кочевник
    Ответ написан
    Комментировать
  • Где найти примеры исходного кода HTML5 CSS3 сеньерского уровня?

    Maksclub
    @Maksclub
    maksfedorov.ru
    www.kaerus.de/ebay
    обратите внимания -- переключение фото товаров без единого символа на js (вообще ничего на странице нет на js)
    переключение размера и цвета -- все на голом HTML, увеличение фото по кклику
    и при этом слайдер адаптивный еще в добавок, чистый html

    также посмотрите на работы Артемия Лебедева -- там с версткой у них вышка
    Ответ написан
  • Где найти примеры исходного кода HTML5 CSS3 сеньерского уровня?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    Ответ написан
    Комментировать
  • Как сделать ленивую загрузку компонент на React, React Router 4, Webpack 3?

    nDiviD
    @nDiviD
    Делать проекты, которыми можно гордиться
    И так, с Webpack 3 все довольно просто, если знать нюансы:
    1) Нужно понимать, что то что мы хотим загрузить должно быть в отдельном файле - чанке.
    2) Для того что бы создался чанк необходимо все импорты этого компонента грузить "лениво". Это очень важно, в свое время именно это мешало мне разбить существующий проект на чанки.
    3) Ну и самое простое: грузим через промис import:
    const loadEditor = () => import(/* webpackChunkName: "my-best-editor-chunk" */ 'react-dart-editor');
      loadEditor().then(m => use it);

    4) Конфиг webpack:
    new webpack.optimize.CommonsChunkPlugin({
      children: true,
      async: true,
      minChunks: 2,
    }),
    new webpack.optimize.CommonsChunkPlugin('manifest'),


    Так же можно импортировать и функции.

    Я использую такой компонент:
    Chunk.jsx
    import React, { Component } from 'react';
    import PropTypes from 'prop-types';
    
    class Chunk extends Component {
      state = { LoadedComponent: null };
    
      componentWillMount() {
        if (this.props.preload) this.load(this.props);
      }
    
      componentWillReceiveProps(nextProps) {
        const { load, component, show } = nextProps;
        if (
          this.props.load !== load ||
          this.props.component !== component ||
          (this.props.show !== show && show)
        ) {
          this.load(nextProps);
        }
      }
    
      load(props) {
        this.setState({ LoadedComponent: null });
        props.load().then((mod) => {
          this.setState({
            LoadedComponent: props.component ? mod[props.component] : mod.default,
          });
        });
      }
    
      renderLoading = () => this.props.showLoading ? (<div>Loading</div>) : null;
    
      render() {
        const { LoadedComponent } = this.state;
        const  { show, ...props } = this.props;
        delete props.load;
        delete props.component;
        if (!show) return null;
        return LoadedComponent ? <LoadedComponent {...props} /> : this.renderLoading();
      }
    }
    
    Chunk.defaultProps = {
      showLoading: false,
      preload    : true,
      show       : true,
    };
    
    Chunk.propTypes = {
      load       : PropTypes.func.isRequired,
      show       : PropTypes.bool,
      preload    : PropTypes.bool,
      component  : PropTypes.string,
      showLoading: PropTypes.bool,
    };
    
    export default Chunk;



    Использовать так:
    <Chunk
      load={loadEditor} // была уже выше
      component="EditorAside" // если нужно что-то, что импортируется не по дефоулту
      show={true/false} // отображать ли компотнент
      preload={true/false} // осуществлять ли предзагрузку чанка
      props1="1"
      props2="2"
    />


    P.S. Об использовании компонентов в роутере написано хорошо в туториале =)
    Ответ написан
    6 комментариев
  • Как лучше организовать тестирование nodejs typecript приложения?

    @pasutavitaliy
    :)
    Привет.
    Структура. В моем текущем проекте мы эксперементировали и с папкой 'test' отдельно для тестов, и с файлами тестов в одной папке с исходниками. И командой пришли к выводу, что для нас второй вариант выглядит лучше. Так как у нас микросеврисная архитектура, то сами приложения маленькие и нет необходимости создавать отдельные папки для одного - двух файлов (например models, controllers etc).

    707938d10dd74cdf85ba6e4a3265d70c.png

    Если у вас монолитное приложение с кучей файлов и папок, то я бы выбрал вариант с папкой `test`.
    Инструменты для тестирования: mocha (фрейморк для тестирования), chai (ассерт либа), sinon (для spies, stubs, mocks), istambul (для code coverage).
    Ответ написан
    3 комментария
  • Пути максимально эффективного денежного заработка программированием?

    drno-reg
    @drno-reg
    см не кратко
    на мой взгляд необходимо сделать результаты вашей деятельности более видимыми не только вашему текущему реководителю, НО и другим и желательно, чтобы у них возник спрос результаты вашей работы - это на мой взгляд один из вариантов развития ситуации к достижению вашей цели в рамках текущей компании. НО если вы чувствуете, что здесь уже нет, то рассмотривайте вариант смены работодателя, т.к. бывает даже такое, что принятый новый человек будет оценен на 10-20 т.р. больше, чем тот который уже имеет достаточно "большой пробег" на той же должности.
    Ответ написан
    Комментировать
  • Пути максимально эффективного денежного заработка программированием?

    @lobbobobby
    Рецепт прост.

    1. Максимальная квалификация - а она хорошо растет, когда работаешь в компании с намного более опытными чем ты коллегами.
    2. Работа в компании, где действительно нужна высокая квалификация.


    Ну и естественно тебе самому должно быть интересно самосовершенстоваться в ИТ, а не тупо ради денег.
    Если только ради денег - то ты никогда не догонишь тех ребят, у которых программирование и работа и хобби.
    Ответ написан
    Комментировать
  • Почему указатель на первый элемент массива имеет адрес, отличный от адреса этого массива?

    0xD34F
    @0xD34F
    В первом случае адреса не равны, почему?

    Потому что arr и ptr - это две разных переменных. Соответственно, они не могут занимать одну и ту же область памяти. &arr[0] "идентичен" arr, а не &arr.
    Ответ написан
    3 комментария