Это копия, сохраненная 17 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Этот тред посвящён главному языку будущего - JavaScript. Благодаря своей гибкости используется в браузере, на серверах, в мобильных приложениях, на десктопе и практически во всех видах программирования. Удобный синтаксис позволяет легко писать на нём, а высокая производительность делает его отличным выбором для решения любых задач - от небольших магазинов до огромных highload проектов. JavaScript по праву является самым популярным в мире языком. На каждом сайте есть браузерный JavaScript, а JavaScript на сервере используется такими крупными корпорациями, как Amazon, Yahoo, HP, Walmart и многие другие.
НЕ КОПИРУЙ КОД ПРЯМО В ТРЕД! Воспользуйтесь https://jsbin.com/ для браузерного кода и https://ideone.com/ для серверного кода.
Краткий FAQ:
1. Что это за язык такой? - Мультипарадигменный язык, изначально создавался для использования в браузерах как язык сценариев для придания интерактивности веб-страницам, однако в процессе своего развития преодолел этот этап и сейчас может использоваться для любых целей ввиду своей неограниченной гибкости и удивительно удобного синтаксиса. Сочетает в себе особенности объектно-ориентированного, функционального, событийно-ориентированного и императивного программирования.
2. Какие возможные направления для разработки существуют? - Фронт-энд (Vanilla, jQuery, Angular, Backbone, React, Meteor), бэк-энд (Node.js, Express, Sails), геймдев (Phaser, Cocos, Pixi), 3D графика (Three.js, Babylon.js), мобильная разработка (NativeScript, Phonegap, Ionic), десктопная разработка (NW.js, WinJS).
3. Можно выучить только jQuery и всё писать на нём? - Не стоит, лучше начать писать на jQuery, когда освоишь ванильный JS, дабы не испортить себе восприятие языка, и в будущем не испытывать трудностей с изучением сложных фреймворков.
4. Существуют ли стайл-гайды для JavaScript? - Да, вот: https://github.com/felixge/node-style-guide
5. Какие новые возможности добавил ES6? - Вот здесь можно почитать на русском: https://learn.javascript.ru/es-modern
6. Есть ли русскоязычные конфы? - Да. Для приера, здесь можно добавится в крупнейшую конфу программача по многим языкам, включая JavaScript. https://invite-me-to-2chpr.herokuapp.com
7. Ну ладно, с чего начать изучение то? - Дальше я приложу список материалов для изучения.
Чистый JS:
Книги: Дэвид Фленеган - "JavaScript: Подробное руководство"
Дуглас Крокфорд "JavaScript: сильные стороны"
Стефанов С. - "JavaScript. Шаблоны"
Джон Резиг - "Секреты JavaScript ниндзя"
Николас Закас - "JavaScript. Оптимизация производительности"
Node.js
М. Кантелон , М. Хартер - "Node.js в действии"
Кирилл Сухов - "Node.js. Путеводитель по технологии"
Дэвид Хэррон - Node.js. Разработка серверных веб-приложений
Front-end
Эдди Османи - "Разработка Backbone.js приложений"
Эрл Каслдайн, Крэйг Шарки - "Изучаем JQuery"
Читать онлайн
Dr. Axel Rauschmayer - "Speaking JavaScript: An In-Depth Guide for Programmers" - Одна из лучших книг по JS. Пока только на английском. http://speakingjs.com/
Marijn Haverbeke - "Eloquent Javascript" - Вводная книга по JavaScript и программирование в целом. Перевод на хабре: http://habrahabr.ru/post/240219/ На английском :http://eloquentjavascript.net/
http://ru.discovermeteor.com/ - Книга по Meteor.js - одному из самых лёгких и функциональных фреймворков. Полностью на русском.
Онлайн сообщества:
http://learn.javascript.ru/ - оно одно, единственное. Начинать учить язык советую отсюда, потом переходить уже к книгам.
http://www.jstherightway.org/ - Огромный гайд составленный буржуями. Есть книги, статьи и всё-всё-всё.
http://nodeguide.ru - Огромное количество переведённых статей по Node.js
http://node-center.ru - собрание информации по Node.js. Особенно интересен раздел со ссылками и книгами.
Бложики и новостные ленты:
http://dailyjs.com/ - DailyJS
http://weblog.bocoup.com/ - Bocoup Weblog
http://perfectionkills.com/ - Perfection Kills
http://www.reddit.com/r/javascript - subreddit на reddit.com
http://toddmotto.com/ - Todd Motto, Lead front-end @appsbroker. Developer Expert @google.
Онлайн курсы:
Как же можно учить язык, только читая книжки? Нужна практика, и только так изучаемое усваивается, не иначе.
CodeSchool - http://codeschool.com/ Отличный ресурс для изучения языка, очень много курсов по всем передовым технологиям.
CodeAcademy - http://www.codecademy.com/ Уже не такой сильный, но все еще интересный проект, так же маст хев для набивания скилла.
Udacity - https://www.udacity.com/course/ud015 Дает хорошее представление о замыканиях.
Выучил основы, написал свою пузырьковую сортировку и змейку? Не знаешь как двигаться дальше?
Почитай теперь это - https://shamansir.github.io/JavaScript-Garden/
А потом? Я и так уже гений!!!
Выбери себе направление. Может, ты хочешь игори делать? Тогда вперед на гитхаб, и ищи Phaser, Pixi и другое, выбор не маленький. Хочешь на сервер сайд? Копай в сторону Node.js, Express, Socket.io. Хочешь писать MVC логику? Angular, Backbone, React, да множество их. Нельзя забывать про NW.js и WinJS, позволяющие создавать десктопные приложения.
Есть вот такая функция:
function createPlay() {
\tvar text = '#EXTM3U';
var durationInSeconds;
\tvar mp3s = document.querySelectorAll('input[value*=".mp3"]');
\tfor (var i = 0; i < mp3s.length; i++) {
\t\tvar mp3 = mp3s;
\t\tvar title = mp3.parentNode.parentNode.getElementsByClassName('title_wrap')[0].textContent;
\t\ttext += '\n' + '#EXTINF:durationInSeconds,' + vkCleanFileName(title) + '\n' + mp3.value;
\t}
\tofferFile('vkPlaylistCurrent.txt', text);
}
Выдаёт она вот такой результат:
#EXTINF:durationInSeconds,Displaced Paranormals - Inception_Λudio Podcast 012
https://psv4.vk.me/c611219/u1881108/audios/f2f26b2f3824.mp3?extra=SOMEHASHHERE132sdfsx,2985
Мне нужно проставлять длительность в секундах вместо durationInSeconds(это пока что просто placeholder такой).
Инфа о длительности в секундах содержится в конце mp3.value, после запятой идёт. Надо только выдрать как-то.
Cобственно, есть и регулярка — ,\d{1,4}
Она выдирает ,2985
У меня вопрос — как мне сделать присвоение переменной durationInSeconds значения соответствующего регулярке но без запятой?
Попробал переделать, не работает. Тупо печатает текст регулярки.
http://pastebin.com/GyR5j139
Я просто нуб в JS.
https://jsbin.com/pakonaseho/1/edit?js,console
задача на ООП
13 по счету, про гамбургеры
https://gist.github.com/codedokode/ce30e7a036f18f416ae0
12
Анончик, хелпани, плиз...что-то ничего не выходит
Есть один экстеншн для хрома. Он методом https://developer.chrome.com/extensions/tabCapture получает объект MediaStream с аудио и видео. Так вот...нужно этот стрим записать и сохранить в формате webm. Я копал в интернете и нашел поделки некого пакистанца: https://www.webrtc-experiment.com/RecordRTC/
но проблема в том, что когда ставишь настройки для видео (ширину, высоту, фпс) в его поделке RecordRTC, например. Получаешь два блоба - аудио и видео и мерджишь их с помощью https://www.webrtc-experiment.com/ffmpeg/merging-wav-and-webm-into-mp4.html, то оно тормозит. И видео глючное и аудио. Оно то смерджило два блоба в один...но глючит. Если задать ширину и высоту 320*240, то оно не глючит, но видос маленький получается. Может, кто делал такое. Хелпаните, плиз...или хоть посоветуйте, в какую сторону копать можно.
Есть рабочий пример https://chrome.google.com/webstore/detail/screencastify-screen-vide/mmeijimgabbpbgpdklnllpncmdofkcpn?hl=en
Я смотрел его код. Но там все минифицировано и с трудом понятно по ключевым методам что там происходит и как они добились такого результата.
так же как и у любого объекта. написано же епт
function Animal (name) {
__this.name = name; // property
__this.sayHello = function () { // method
____console.log(this.name + ' says: hello');
__}
}
var rabbit = new Animal ('Rabbit');
rabbit.sayHello();
Вашет у тя конструктор. Методы для функций пишутся в прототим функции.
Function.prototype.getHui = function() {
return 'hui';
}
Это вообще другое совсем
>>631150
Бамп вопроса. Надо просто из mp3.value вида
>https://psv4.vk.me/c611219/u1881108/audios/f1231a12d1.mp3?extra=SOMEHASHHERE132sdfsx,2985 выдрать это 2985 и записать в переменную
фишка метода у функции реализуется при создание класса, через прототип
function f(name){
this.name = name;
}
f.prototype.suk = function(){
return this.name;
}
var a = new f("vasia");
console.log(a.suk());
Регулярка есть уже... ,\d{1,4}
Надо только как-то присваивание сделать того, что она находит в mp3.value
охуенно
>какой уровень скила нужен
Авераж мид.
На ванильке это не писали, инфа соточка.
Это продукт кодогенерации.
почему еще используют эту хуиту? так-же труднее читать, нет?
вместо: <div id/class="x"
document.ready(...find element add onclick handler.
server.listen(3000) - запускает сервер на 'localhost:3000', а как запускать, например, на 'example:3000'?
Фор екзампл:
server.listen(8000,'127.0.0.1',function(){
server.close(function(){
server.listen(8001,'192.168.0.202')
})
})
Ты спеки-то читаешь вообще?
>>631706
почему нет? это же вроде статический метод? https://learn.javascript.ru/static-properties-and-methods#статические-методы
Есть комментарии на сайте, требуется с помощью AngularJS выводить часть комментария, а при нажатии на кнопку/ссылку, разворачивать до полного. Написал директиву, сам текст комментария получить могу, но как можно реализовать нажатие?
>ng-click
Думал о нем, только никак не могу понять, где писать обработчик? Мне нужно его написать в том же файле, где я описал директиву.
Быстрее так, не?
IndexedDB
С чего начать изучение? Если из опыта только паскаль в школе.
Скачал видеоуроки Гавриленко, говорят годно, стоит начинать? Что еще можно прочесть/посмотреть для полного нуба?
Это мое личное мнение, но, если есть представления об ООП, то, как мне кажется, лучше сразу начать с решения проблем (которых предостаточно на CodeWars, например) и попутно пилить что-нибудь более практически ценное для себя (например на знание DOM - тудушку или, как анон-РАБотодатель из прошлого треда, игрульку на канвасе, если больше функциональная часть и бэкенд интересует, то что-нибудь на ноде. Возьми и напиши, к примеру, качалку для SoundCloud).
А читать лучше спеки на Dev Mozilla и драфты ECMA.
DOM хуйня, это осваивается быстро.
Энджой ёр скриптинг.
Я нихуя не понимат. Например, я запускаю сервер на ноде и ввожу localhost:port в браузере. Для этого я в написал в servers.js server.listen(port, '127.0.0.1').
Теперь я хочу все тоже самое, но в браузере писать не localhost:port, а 192.168.0.1:port или вообще myawesomesite:port. Такое вообще возможно? Если я хуйню написал, не обсыкайте.
Фронтендопитухи повалили на сервера и соснули. Как это мило.
Нужно или запускать на 80 порту и перенаправлять через host, или поднять nginx
Нихуя не эквивалентво.
>Нихуя не эквивалентво.
Ясен хуй, в первом варианте расширяется Built-in прототип 'Function'.
>let someShit => param => kek(param);
зачем питушня так делает? для неанонимных функций, не биндящихся к this? они што, ебанутые?
во 1С франч-конторах обычно МНОГОЗАДАЧНОСТЬ
>джаваскрипт
живенькое такое говнецо, с почти неограниченной областью применения, развивающееся, и имеющее приятную надстройку в виде тайпскрипта.
>кофе
беспомощное унылое говно без задач. бесполезный высер as is.
в рот те ссал, пидор
> имеющее приятную надстройку в виде тайпскрипта.
> кофе беспомощное унылое говно без задач. бесполезный высер as is.
Ты вкурсе, что кофе в жс компилируется, дегегерат? Это такая же надстройка
Как же бесят дауны, который хейтят что-то, а сами даже офф сайт этой хуйни не посетили
>кофе в жс компилируется
а как бы в курсе, даже кой че дорабатывал на этой параше. просто в жс появились классы, декораторы, деструктурирующее присваивание, модули, async/await, и опциональная аннотация типов в виде typescript (который не подменяет собой js), а любители твоего дегенеративного сахарка сосут хуйцы с этими нововведениями.
Разработка кофескрипта прекращена
Ну, тогда продолжай сидеть на дваче. Хули еще делать, если выучил функции именно. Ты не виноват, ты сделал все что мог - функции выучил. Пошло оно все нахуй, это теперь не твои проблемы. Ты не договаривался, что там return будет. Ты свое дело сделал - выучил функции. Теперь либо пусть разжевывают в программаче, либо сосут хуй. Что еще за return, вообще ахуели.
Зк всё больше походит на б. Написал больше трех слов, значит бомбануло.
http://scala-lang.org/
http://www.scala-js.org/
https://lihaoyi.github.io/scalatags/
100% строгая статическая типизация + тонна скала-библиотек + скаловская система сборки (sbt) + трейты, макросы, имплициты, паттерн-матчинг и прочие фишки скалы
import japgolly.scalajs.react.vdom.prefix_<^._
[code]
<.ol(
^.id := "my-list",
^.lang := "en",
^.margin := "8px",
<.li("Item 1"),
<.li("Item 2"))
[/code]
Ебать мой хуй!
[code lang="javascript"]"use strict";
var HelloMessage = React.createClass({
displayName: "HelloMessage",
render: function render() {
return React.createElement(
"div",
null,
"Hello ",
this.props.name
);
}
});
ReactDOM.render(React.createElement(HelloMessage, { name: "John" }), mountNode);[/code]
Зачем тебе реакт?
Прост. Пишу на нем всякое хитрозаверченное, типа редактора диаграмм. react + redux решает. Надо попробовать твою дурь со скалкой. В ней же должны быть (встроенные) иммутабельные мапы, массивы?
> react + redux решает
Попробуй https://lihaoyi.github.io/scalatags/ + https://github.com/lihaoyi/scala.rx
>В ней же должны быть (встроенные) иммутабельные мапы, массивы?
Даже такое есть, азаза https://github.com/milessabin/shapeless https://github.com/japgolly/scalaz
Вот ещё фиддл, даже с автодополнением: http://www.scala-js-fiddle.com/
Все, я понял: Array.prototype.lastIndexOf
>https://lihaoyi.github.io/scalatags/ + https://github.com/lihaoyi/scala.rx
всеж пока на риэктовском виртуалдоме останусь.
нашел вот это вот - http://ochrons.github.io/diode/
выглядит оче неплохо для организации хранения стейта приложения
вот так, анон, js привел меня через react redux es6 typescript от динамического слаботипизированного императивного петушения к божественному функциональному подходу со строгой статической типизацией.
>стейт приложения
Тупо состояние. Даннае, и вообще, все то, что определяет, как выглядит UI. На него может воздействовать пользователь (через ввод), backend, если мы подписаны на серверные события, какие-то недетерминированные вещи (таймер с рандомом).
Зачем нужен? Для генерации UI. Мы отображаем стейт в VirtualDOM, а реакт-жс по из VirtualDOM создает обычный dom, который видит пользователь. Либо приводит dom в соответствие с VirtualDOM. Стейт, измененный действиями пользователя мы можем загнать сново на backend.
Зачем так сложно? Это подход избавляет от необходимости вручную описывать, как привести dom в соответствие с новым состоянием. Один раз написали функцию рендеринга, которая возвращает VirtualDOM всего интерфейса, и все, этого достаточно, дальше магия все делает за нас.
>реакт-жс по из VirtualDOM создает обычный dom
реакт-жс из VirtualDOM создает обычный dom
фикс
А ангуляре немного сложнее, там scope это observable, части UI подписаны на изменение его свойств, по этим событиям они и обновляются. Тут - просто объект, например, {name: "Вася"}, dataflow прост как веник. State поменялся (обычно внутри state'а ничего не меняем, а тупо возвращаем новый стейт), отрендерили заново VirtualDOM. Таким образом, действие пользователя - чистая функция: старый state -> новый state. Рендеринг - чистая функция: state -> VirtualDOM.
Код http://pastebin.com/EaPkAPS4
>меняется только то изображение на которое я кликнул последним
Что логично, ведь
>дело в глобальной переменной,
которая за время таймаута может быть перезаписана.
Передавай в hideAnswer() в качестве параметра ID элемента, будет все гут.
Вот до меня не доходит как предать, если так делать http://pastebin.com/Skv665sZ то все ломается
Какой правильный синтаксис должен быть?
спасибо, ты умница
интересно, а почему он без обертывания в анонимную функцию не передавал параметр
Делай рекурсивное копирование а-ля
http://barbitoff.blogspot.ru/2012/01/javascript.html
А так у тебя копируются ссылки, хули ты хочешь то блядь?
>Потому, что азаза
В ES6 метод Object.assign() завезли:
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
>никак не очевидно
>в языке сразу сказано что объекты - ссылки
Почитай стандарт еще раз. Там прямо об этом и сказано.
Оказывается еще можно было так передать аргумент, а в русском справочнике ни слова
setTimeout(reblur, 2000, image);
где image - аргумент
Я прост тренируюсь с jquery-запросами. Код весь на пикче, в консоли.
На других сайтах кстати, всё работает. Тута какая-то своя версия скрипта что ли?
Даже копировать напрямую из кода страницы. Просто не ищет нихуя
я вродб евереж мид, гейдев, на пикси социалочки хуярю, но в вебгл дупля не режу
ойбожечки, а bind для кого придумали?
this.size = Hamburger.prototype.designationSize(size);
можно сразу юзать
this.size = this.designationSize(size);
ну кароч тут можно было просто через точку
this.settingsHamburger["size"]
остальное писать влом, скажу что неплохо для начала
Сори за слэнг геймдева.
Игори для социальных сетей, фермы там, брильянтики для бабушек и прочья хунта.
>получаю свою кнопочку как объект
>настоящий блять, а не дом-хуету
Что ты несёшь твою мать? Давай ты опишешь проблему более детально, окей?
>решить отрисовать ли эту кнопку на основании даты из апи или нет
<div ng-if="yoba.dataIzApi">
// отрисовали кнопку здесь
</div>
Блять, о простейшем решении я как-то не подумал. Спасибо.
>Что ты несёшь твою мать?
Ты Объект от хтмл-разметки не отличаешь? Стандартные джсы-хуесы и прочие жиквери возвращают сраную разметку, а жи есть красавчик ангуляр может вернуть ссылку на объект элемента страницы, тчобы ты применил к нему методы всякие разные.
>Стандартные джсы-хуесы и прочие жиквери возвращают сраную разметку
Джсы-хуесы возвращают HtmlDomElement, jQuery возвращает массив-обёртку над таким же объектом.
>может вернуть ссылку на объект элемента страницы
Какой ещё объект элемента страницы, поехавший? Ты хочешь получить JS-объект, который лежит в скоупе какого-то хтмл-элемента или что?
Ты просто открыл мне глаза. Я никогда раньше ничего подобного не слышал. Расскажи подробнее пожалуйста.
>место для ангулярщика
>$4 в час
Охуительный, наверное, проект. Четыре доллара в час-то! Удачи вам, ребята.
>Джсы-хуесы возвращают HtmlDomElement, jQuery возвращает массив-обёртку над таким же объектом.
Ну, теперь ты мне открыл глаза! Не знаю как теперь жить.
>Ты хочешь получить JS-объект, который лежит в скоупе какого-то хтмл-элемента
Я хотел и получил объект страницы на котором происходит ивент, как джс-объект, может не так выразился.
>Я хотел и получил объект страницы на котором происходит ивент
Существует такое понятие как "объект страницы" в джсе?
А хотя:
>объект страницы на котором происходит ивент
>страницы
>на котором
Всё понятно ;D
Все понятно с тобой, еблан.
Ты же кукарекал, что тебе не нравится моя форулировка, я тебе и написал объект страницы(дома блять, быдло ты тупое). Если ты кликаешь на элементе, то событие КЛИК происходит и объектом этого события становится эелемент(прув ми ронг, хуйло), и можно получить ссылку на этот объект. А теперь иди нахуй, агрессивное быдло(не забудь это цитировать в следующем своем посте, чтобы выставить таковым меня, в твоем манямирке, естественно), видно жизнь у тебя хуевая, если ты срешься на ровном месте, вместо конструктивной критики или пояснений.
>объект страницы(дома блять, быдло ты тупое)
Ну вот, написал бы, что имеешь в виду DOM-объект. А то объект страницы какой-то лол.
>событие КЛИК происходит и объектом этого события становится эелемент
Нет, в обработчик события передаётся объект, который содержит ссылку на target DOM-элемент. Там ещё много всяких объектов есть, например srcElement, toElement и т.д.
>видно жизнь у тебя хуевая, если ты срешься на ровном месте, вместо конструктивной критики или пояснений.
Ну, да. Ты прав. Извини. ;(
Кек. 4 бакса в час это баксов 600-700 в месяц. За такую з/п не каждый джун захочет корячиться.
Лучше работать за бесплатно, но на тем, что тебе интересно, чем за гроши формошлепать
>рыдают, что не берут никуда
>плюются от работы для подскока, так сказать.
А ты думаешь это разные люди?
Нет, я думаю это одни и те же неудачники с завышенным уровнем притязаний - способностей нет, а требования есть, а потом весь мир у них плохой. Обожаю таких петушков, смешные.
>>633152
>баксов 600-700 в месяц. За такую з/п не каждый джун захочет корячиться
Я надеюсь это был просто толстый тролинг.
>>633153
Да, желательно при этом еду и жилье самому оплачивать, а не стрелять деньги у мамки. Иначе потом только на програмаче рыдать в соответствующих тредах, лол.
спасибо
Тем китайцем штоле, который весь фильм в коме лежал?
EventEmitter.init.call(this);
}
EventEmitter.init = function() {/ код /}
Для чего так делают? Почему сразу не пишут в EventEmitter, а создают отдельно EventEmitter.init и вызывают внутри EventEmitter?
>Разрабы ноды
Возможно оно так нужно для реализации наследования, и еще какой фигни. Короче, конвенция такая у них.
Вот небольшая выдержка из одного блога, которая описывает проблему, и заодно достаточно точно описывает то, чем я сейчас занимаюсь (15 кодеров и 3 версталы у нас, у всех всегда есть работа, версталам платят как минимум в два раза меньше самого плохооплачиваемого кодера (это к вопросу про окупаемость, естественно выгодней иметь отдельного версталу)
>"Объясню на пальцах: мы делаем магазин и сделали рубрику товаров (первый компонент). Если мы теперь добавим форму фильтрации, очевидно, что содержимое рубрики должно меняться в зависимости от того, что там введено. Но верно и обратное: содержимое рубрики влияет на поведение формы. Если у нас в рубрике всего 10 товаров, нужно фильтр скрывать. Если все товары синие, можно убрать параметр «цвет» из фильтра. Потом мы добавляем возможность залогиниться (третий компонент) и выясняется, что залогиненному пользователю надо рисовать в каталоге звездочки для отмеченной одежды, а также применить скидки и пересортировать по цене. Пагинатору надо учиться помнить свое положение при манипуляциях с формой поиска. И так далее.
>Каждый новый компонент влияет на предыдущие, и предыдущие нетривиально связываются с новым. Для неинтерактивного приложения это еще как-то можно учесть — как минимум, условия игры фиксированы на момент рендеринга страницы. Но у нас же приложение! Новые товары могут прилететь на страницу по аяксу. Пользователь может накликать «никогда не показывать мне это, это и это». Через 5 минут страница ничего общего не будет иметь с тем, как она выглядела на момент загрузки. И все это надо адекватно отрисовывать.
>Получается, что каждый компонент это не просто поле ввода и ячейка в модели. Его внешний вид определяется предысторией (как, где и сколько в него тыкали) и окружением (как вообще выглядит приложение, какой контекст вокруг)."
Вот небольшая выдержка из одного блога, которая описывает проблему, и заодно достаточно точно описывает то, чем я сейчас занимаюсь (15 кодеров и 3 версталы у нас, у всех всегда есть работа, версталам платят как минимум в два раза меньше самого плохооплачиваемого кодера (это к вопросу про окупаемость, естественно выгодней иметь отдельного версталу)
>"Объясню на пальцах: мы делаем магазин и сделали рубрику товаров (первый компонент). Если мы теперь добавим форму фильтрации, очевидно, что содержимое рубрики должно меняться в зависимости от того, что там введено. Но верно и обратное: содержимое рубрики влияет на поведение формы. Если у нас в рубрике всего 10 товаров, нужно фильтр скрывать. Если все товары синие, можно убрать параметр «цвет» из фильтра. Потом мы добавляем возможность залогиниться (третий компонент) и выясняется, что залогиненному пользователю надо рисовать в каталоге звездочки для отмеченной одежды, а также применить скидки и пересортировать по цене. Пагинатору надо учиться помнить свое положение при манипуляциях с формой поиска. И так далее.
>Каждый новый компонент влияет на предыдущие, и предыдущие нетривиально связываются с новым. Для неинтерактивного приложения это еще как-то можно учесть — как минимум, условия игры фиксированы на момент рендеринга страницы. Но у нас же приложение! Новые товары могут прилететь на страницу по аяксу. Пользователь может накликать «никогда не показывать мне это, это и это». Через 5 минут страница ничего общего не будет иметь с тем, как она выглядела на момент загрузки. И все это надо адекватно отрисовывать.
>Получается, что каждый компонент это не просто поле ввода и ячейка в модели. Его внешний вид определяется предысторией (как, где и сколько в него тыкали) и окружением (как вообще выглядит приложение, какой контекст вокруг)."
Алсо, почти никто из фронта не умеет в современную верстку, т.е. флексы, хуексы, методологии и т.д., естественно все знаю какие-то базовые штуки, блочную модель и т.д., но верстка в хуй не сдалась, когда есть верстала. Если какие-то проблемы, просто отсылаешь задачу ему, всё.
Да, я про это и говорю.
Просто было парочка долбоёбов, которые считали, что такого не существует (отдельных верстал и фронтендеров не знающих верстку). Такое повсеместно и везде, в любой более менее солидной компании, где не разбазаривают бабло, будет такое разделение (возможное исключение - стартапы)
Ага, я вот недавно в фирму одну устраивался фронтендом(могу в джс, ангуляр), а они меня "а верстать кроссбразерно умеешь, а в хтмл5 как бог можешь" - ну, говорю верстать умею, чутка за кроссбразерность слышал, в хтмл 5 разбираюсь - читал документацию, ненмого ковырялся, но ближе мне как бы не этим заниматься, это для верстальщиков - те в ответ скисли и "мы вам перезвоним", я пожал плечами и попрощался. Хотя они мне таки перезвонили - сказали, что выбрали более достойного кандидата, а мне похуй, я уже в хорошем проекте участвовал к тому времени, где все задачи по верстке я сваливаю на верстальщика. И у меня голова от этого говна не болит. Ненавижу верстку, блять.
Велика вероятность, что там написан свой mvс/whatever, а дальше так же, как и везде
Есть вот это http://ilyabirman.ru/projects/emerge/, но оно платное и слишком много на себя берет. Всякие прелоадеры это гониво, ибо просто ждут загрузки всех элементов, а не управляют ей.
Хотелось бы следующий функционал. Добавляем к элементам доп.класс "load_1", "load_2" и т.д. и очередь загрузки идет по порядковым номерам, ну и плюс возможность анимацию прикрутить и кастомно дописать т.е. загрузился "load_1", вылетел слева, загрузился "load_2" вылетел справа, а не все загрузилось, а потом начало вылетать.
Вот ссылка на подборку статей http://usabili.ru/news/2014/06/03/javascript-load-and-execution-order.html (судя по поняше, кто-то местный автор). Я там немного почитал, но ничего не прояснилось. В основном речь идет о загрузки скриптов, использовании всяких упаковщиков и т.п. Меня же интересует загрузка контента. Вот еще http://web-standards.ru/articles/front-end-performance/.
Допустим, страница у нас простая, загрузили jq.js и css-ы просто в head. Затем грузится dom и картинки.
Вот задача грузить так:
1. <div class="load_2"><img src="anon.jpg" class="load_1"/></div>
2. <div class="load_4"><img src="anon.jpg" class="load_3"/></div>
А не:
1. <div class="load_1"><img src="anon.jpg" class="load_4"/></div>
2. <div class="load_2"><img src="anon.jpg" class="load_3"/></div>
Ну или хотя бы сначала див, потом картинку в нем, и только потом следующий див и его картинку. А не сначала весь dom, а потом картинки к нему. Ну или как вариант хотя бы картинки последовательно вот здесь так грузятся http://portfolio.cpeople.ru/portfolio/all.
Вот есть легкий код:
<!-- html -->
<img src="main.png" id="mainImg">
<img src="" data-src="notmain1.png" class="notmain">
<img src="" data-src="notmain2.png" class="notmain">
<img src="" data-src="notmain3.png" class="notmain">
/ javascript /
$("#mainImg").load(function() {
$(".notmain").attr('src', function() {
return $(this).attr("data-src");
});
});
Но это гон какой-то, если таким образом описывать пример выше с cpeople. Вообще, все, что удалось найти - это, либо просто последовательное появление (при условии, что все уже загрузилось), либо какие-то тонны js (вот на том же cpeople script.js за все это отвечает же?), где приходится полностью описывать логику загрузки страницы, а не просто классы проставить, например, при условии, что контент на разных страницах будет разный, это гемор дикий, и отдельный скрипт для каждой страницы.
Есть вот это http://ilyabirman.ru/projects/emerge/, но оно платное и слишком много на себя берет. Всякие прелоадеры это гониво, ибо просто ждут загрузки всех элементов, а не управляют ей.
Хотелось бы следующий функционал. Добавляем к элементам доп.класс "load_1", "load_2" и т.д. и очередь загрузки идет по порядковым номерам, ну и плюс возможность анимацию прикрутить и кастомно дописать т.е. загрузился "load_1", вылетел слева, загрузился "load_2" вылетел справа, а не все загрузилось, а потом начало вылетать.
Вот ссылка на подборку статей http://usabili.ru/news/2014/06/03/javascript-load-and-execution-order.html (судя по поняше, кто-то местный автор). Я там немного почитал, но ничего не прояснилось. В основном речь идет о загрузки скриптов, использовании всяких упаковщиков и т.п. Меня же интересует загрузка контента. Вот еще http://web-standards.ru/articles/front-end-performance/.
Допустим, страница у нас простая, загрузили jq.js и css-ы просто в head. Затем грузится dom и картинки.
Вот задача грузить так:
1. <div class="load_2"><img src="anon.jpg" class="load_1"/></div>
2. <div class="load_4"><img src="anon.jpg" class="load_3"/></div>
А не:
1. <div class="load_1"><img src="anon.jpg" class="load_4"/></div>
2. <div class="load_2"><img src="anon.jpg" class="load_3"/></div>
Ну или хотя бы сначала див, потом картинку в нем, и только потом следующий див и его картинку. А не сначала весь dom, а потом картинки к нему. Ну или как вариант хотя бы картинки последовательно вот здесь так грузятся http://portfolio.cpeople.ru/portfolio/all.
Вот есть легкий код:
<!-- html -->
<img src="main.png" id="mainImg">
<img src="" data-src="notmain1.png" class="notmain">
<img src="" data-src="notmain2.png" class="notmain">
<img src="" data-src="notmain3.png" class="notmain">
/ javascript /
$("#mainImg").load(function() {
$(".notmain").attr('src', function() {
return $(this).attr("data-src");
});
});
Но это гон какой-то, если таким образом описывать пример выше с cpeople. Вообще, все, что удалось найти - это, либо просто последовательное появление (при условии, что все уже загрузилось), либо какие-то тонны js (вот на том же cpeople script.js за все это отвечает же?), где приходится полностью описывать логику загрузки страницы, а не просто классы проставить, например, при условии, что контент на разных страницах будет разный, это гемор дикий, и отдельный скрипт для каждой страницы.
У них как бы так и сделано, просто проходятся по всем картинкам и потом через таймаут берут из дата ссылку и вставляют в src.
Выглядит супер уёбищно, браузер бы эту всю хуиту в 8 потоков за доли секунды загрузил, а тут приходится ждать пока он по одной картинке в пол секунды почти грузит. Говно.
Именно приведенный код ведь грузит во все потоки (после загрузки main.png) или последовательно по порядку, как описаны?
Последовательно, но т.к. исполняется очень быстро, то как будто во все потоки, тебе надо добавить паузу, чтобы это было на глаз заметно, как у того сайта, что ты привел. Но опять же, это очень костыльно. Правильнее и проще всё грузить сразу, а потом просто анимацию появления сделать, если уж хочется, чтобы не сразу показывалось.
А чего там знать, на бутстрапе за пять минут слепил и норм
>Хотелось бы следующий функционал
>очередь загрузки идет по порядковым номерам
Тащемта, странно, почему ты упомянул именно какой-то подзалупный Emerge. Годных control-flow либ дохуя.
Но я бы рекомендовал использовать промисы, как истинный JS-async way.
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise
Например: https://mdn.github.io/promises-test/
Накодишь годно - будет свой собственный ЭМЁРЖ без Джейквери и прочего поноса в зависимостях.
Я давеча сериал смотрел один, про заключенных-лесбиянок, так вот, там одна девушка занималась низкоквалифицированным трудом (слесарь-электрик).
Она жаловалась на то, что час ее работы стоит $10.
В сериале персонажи, конечно же, грустно вздохнули и отнеслись к этому с сочувствием.
У нее fluent english, а у тебя - нет.
> низкоквалифицированным трудом (слесарь-электрик)
Тут квалификация повыше, чем у жс-макаки требуется. Не говоря уже об опасности и ответственности.
>Тут квалификация повыше, чем у жс-макаки требуется. Не говоря уже об опасности и ответственности.
Что несешь, блядь? Я пару лет отпахал на сто и дружил с нашим электриком - сидит копается в стартерах, иногда залазит под капот с тестером. Я когда смотрел на его работу и зп думал какого хуя я в механики-мотористы попиздил, вместо электрики. Алсо, знания необходимы за 7-й класс физики. Для жс-макаки требования повыше будут.
Бочку делал, firefox лизал (https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/), но нихуя не понимаю, там море левых переменных и параши вида
() {
hp_nls();
setTimeout("hp_nlsl()", 10)
}
JS-анон тебе там дел на 2 минуты, выручи анона.
Спасибо, хоть ясно стало, что гуглить, вот ниче так, вроде, https://github.com/caolan/async
Но я хотел бы готовое решение для использования на гс, чтоб в жс не лазить вообще (я к вам из /de зашел). В промисах написано, что ие (да и не только) не может в них.
Деобфускатором/бьютифайером пройдись.
Дамп переменных можно выполнить через console.debug(var);
>>634566
Первая функция - пакер.
Дальше сам все поймешь.
https://jsbin.com/qiloyi/edit?js,console,output
>там элементарно все
а если нужно прилепить авторизацию на основе айпи, ролей и погоды за окном?
Там изоморфное приложение. Сервер на ноде, клиент на реакте. На сервере вместо шаблонизатора тоже реакт. То, то ты написал про авторизацию - ортогонально либе для UI, тут надо смотреть решения для ноды.
Хотя пизжу. Нет там никакой изоморфности. Нода только для сборки проекта и запуска dev-сервера с ливапдейтами, так то.
Исходя из вышеописанной задачи составил себе такой гайд:
Инструменты разработчика
git
grunt ✓
gulp ✓
HTML/CSS
Адаптивная верстка ✓
БЭМ ✓
Препроцессоры ✓
JavaScript
...
Чем дополнить список? Какие книги или статьи почитать/доклады посмотреть?
Спасибо, это полезно. Хотя там будут, скорее всего, именно чистые тесты - это не собеседование, а тестирование на курсы.
А как так получилось что ты никогда с фронт-ендом не стыкался? Это же ведь все части одного целого.
На удаленке работаешь/фрилансишь?
В дополнение для удобства можешь пакетные менеджеры глянуть npm/bover.
>На удаленке работаешь
This.
>А как так получилось что ты никогда с фронт-ендом не стыкался?
Хз. Пилю HTML/CSS по макету, могу подключить плагин типа Flexslider, затем в архиве пересылаю верстку. Недавно начал использовать gulp (для препроцессоров, сборки спрайтов и конкатенации файлов) и git (локально). Иногда могу зайти по FTP и что-то править в .ctp-файлах (CakePHP, я так понял). Больше нихуя не знаю.
Пытаюсь сейчас искать что-нибудь по теме, но проблема в том, что для усвоения найденной инфы нужен определенный багаж знаний или непонятен контекст, невидно общей картины.
Что то не вижу там заданий на джаваскрипт
Топ кек, нахуя вы читаете, учите что-то? Охуеть, всё ж интуитивно понятно
Мимо-нихуя-не-учил-каждый-месяц-свой-новый-проект
БАМП
Сейчас код внутри объекта вида:
function makeShit(){
return data
};
this.doThings = function(){
var dataq= makeShit();
}
Однако при вызове doThings у меня получается undefined вместо data. ЧЯДНТ?
function makeShit(){
if (typeof makeShit.val == 'undefined'){
\t\tmakeShit.val = 0;
}
makeShit.val++;
return makeShit.val;
};
выборка где-то на 10к позиций
Помогите набросать регулярку, я в них пытался разбираться, но каждый раз безуспешно.
Требуется вводить номера домов, причем могут быть значения: "50-" — все дома с номером меньше 50, "50+" — соответственно все больше 50, "30-50" — дома с 30 по 50 номер, ну и просто отдельные номера. Причем у номера дома может быть буква.
Например может быть такая строка: "20-,34а-36,56а,60+", или такая: "23а,50-65".
Выручайте.
Надо выбрать из списка домов, только те, которые укажут в строке.
Проблема в том, что неизвестно сколько запятых будет.
Ну, а номер дома это только 50 или 56а тоже дом? А что делать с 65+? Ты же нихуя не написал.
БАМП
Любая буква рядом с цифрой — это тоже номер дома, буква просто откидывается потом.
Ну вот смотри, есть список домов: 1,2,3,4,5,6,7,8,9.
У каждого дома есть например количество жильцов.
Пользователь хочет узнать, сколько человек живет в 1,3,4,5 и 8 домах.
Он пишет строку: "1,3-5,8а", и ему выводятся нужные ему дома.
Следовательно мне нужно проверять эту строку, может он криво введет, проверка на дурака.
>Последовательно
Нет, все class="notmain" будут параллельно грузится после загрузки id="mainImg".
Все еще не нашел библиотеку в коробке, с реализацией руками под конкретную страницу разобрался, вот четкий пример http://ida-freewares.ru/poetapnaya-asinkhronnaya-zagruzka-dannykh-v-jquery-ajax.html
(по ссылке небольшой баг - после загрузки по кропперу кликнуть надо, чтобы он на место встал)
Жабаскриптаны, такой вопрос возник, не могу разобраться:
Делаю тестовое задание - загрузка фотки, выбор пропорций для обрезки, сепия.
Вроде всё сделал, но на последнем шаге проблема - когда надо по рамке обрезать картинку и сохранить на сервере обработанный вариант, у меня не получается правильно собрать канвас из картинки и дива, который я использую как кроппер.
В ебаной функции context.drawImage (http://www.html5canvastutorials.com/tutorials/html5-canvas-image-crop/) 8 координат, к тому же дело осложняется тем, что я работаю с изображением не в оригинальных размерах - т.е. еще 1 коэффициент добавляется.
Ебался-ебался - так и не разобрался. Подскажите что-нибудь полезного.
Ну и кому не лень - ткните носом в говно, пояснив где надо было сделать по-другому.
А мне чот понравилось задание, интересно даже стало - сделаю, или нет.
Сроки всё равно уже просрал - так что теперь просто из интереса пытаюсь доделать.
Бамп
Выбирай промежутками
pure html
БАМП
Просто берешь и без задней мысли устраиваешься на подходящую вакансию с хедхантера/авито.
Просто берешь и без задней мысли устраиваешься на подходящую вакансию с удаленкой с хедхантера/авито.
cakephp
Как раз его реинкарнация в ES2015 (тот же ES6) как раз таки торт. всякие тайпскрипты и котлины проприетарная хуита. Ну ок, мб котлин норм, но он пока что не юзабелен так как жабоскрипт
ангуляр без гаманства не выгребает столько за раз. От слова совсем. если ты хочешь только эти 10к только отобразить чере one-time binding то ещё ок. Но в остально запомни в какангуляре потолок вотчеров в 3к (в твоём случае ng-repeat как раз таки пытается создать 10к вотчеров на каждый айтем, от того и рыгает как на вписке)
1) забудь что есть пыхпых.С опытом поймешь
2) Выучить норм язык и алгоритмы и рубить бабло.
3) Если всё же хочется веба ну прям оч-оч то учит глубже JS а лучше его новую версию ES2015
4) Бери node.js и ебаш фулстек на одном зоопарке и имей профит и счастье с этого
5) нынче класные фреймворки это reactjs, angular2, ExtJS
Двачую. Зашквар такое спрашивать в 2016, все знают что jQuery достаточно для всего, на jQuery пишут даже операционные системы и кластерные вычисления с петабайтами данных.
ну если для тя ОС на JS это кнопку прихуярить и видок рабочего стола сделать аля винь хр тогда бро не лезь в програмирование не разобравшись снчала в терминологии. Хотя бы.
[code]
//Конструктор
var Chart = function(data) {
this.prototype = Object.prototype;
this.data = data;
this.X = Y;
//...
//Метод прорисовки - прорисовывает нормально
this.prototype.repaint = function(args) {
//Видит this.data;
}
//Реакция на движения (события получаются от canvas)
this.prototype.onMouseMove = function(event) {
//Type error(line 128 col 16) this.data is undefined;
}
};
[/code]
Полный код:
https://ideone.com/io4hp9
1) классы - зло, забудь про них и никогда больше не используй.
2) не пиши на ес5
3) внутри функции this смотрит на функцию, а не на объект
Книжку learn-js прочел, начал проходить интерактивные курсы но тупо лень по 150 раз пилить всякие детские циклы и присваивать переменные.
Сам синтаксис языка и принципы понял, теперь надо научиться пользоваться фреймворками.
Спасибо.
К тебе это тоже относится, кстати)
Если функция
Object.prototype.func = function() {
}
является методом объекта, как внутри функции получить доступ к свойствам объекта?
Если можешь в ангельский, вот охуительный курс
https://www.codeschool.com/courses/shaping-up-with-angular-js
через this?
Не, хуйню я спорол, должен видеть this. в том виде, как ты написал, но мне кажется, что всё равно в этом ошибка, только просто в другом каком-то месте ты теряешь контекст. По коду который ты скинул всё должно быть окей.
Два чая, я с него начал знакомство с ангуляром. Хороший курс.
В любой непонятной ситуации с контекстом используй apply(и еще ее функция-сестра, у них разница лишь в передаче параметров), там ты сможешь указать явно, что должно быть контекстом.
Нашёл свою ошибку.
Объект var chart = new Chart(chartData);
создается внутри функции которая запускается по завершению ajax-запроса. И <canvas onmousemove="chart.onMouseMove(event)"> не может получить доступ к тому, что находится внутри функции request.onreadystatechange = function() {...new Chart...}.
Возможно, все из-за того, что когда вызывается инлайновый обработчик события onmousemove="chart.onMouseMove(event)", this равен DOM элементу, т.е. canvas. Попробуй вывести в консоль this внутри обработчика и посмотри, что происходит.
>this.prototype = Object.prototype;
Для чего ты так делаешь?
Решение: объявить var chart в глобальном контексте, а потом уже внутри функционального контекста присваивать chart = new Chart(chartData);
Потому что впоследствии если я пытаюсь в конструкторе объявить методы конструируемому объекту через this.prototype.repaint = function() {...} мне пишет что prototype is undefined. То есть насколько я понимаю, я должен унаследовать от Object "место, куда я могу записывать объявленные методы", и только после этого могу объявлять методы класса. Хотя, в таком случае не записываю ли я их по ссылке в сам Object вместо этого?.. я еще не разобрался.
>через this.prototype.repaint = function() {...} мне пишет что prototype is undefined
Ну, естественно.
Методы своему классу создавай так:
Chart.prototype.methodName = function(){};
this - ссылка на объект, который создаст функция конструктор с вызовом через new. И у этого объекта нет свойства prototype, потому и undefined. Объявление функций ClassName.prototype.methodName будут доступны у создаваемого этим конструктором объекта через __proto__.
А сейчас у каждого созданного тобой объекта, будет доступен метод repaint.
var o = {};
console.log(o.repaint);
Заебись?
Понятно. Спасибо.
Можно, но не в моем случае.
Суть в том, что пользователь вводит номера домов, которые он хочет купить.
Но в базе хранятся только те дома, которые уже выставлены на продажу.
Он может ввести 40+, и ждать когда дома с такими номерами выставят на продажу.
Ему уведомление придет, когда такой дом выставят.
Если они не будут отрисованы сразу, то как он выберет дома, которых ещё нет в продаже? Вот таком случае ему точно придется сидеть и мониторить, когда его наконец выставят.
Cделай тогда выбор номера с radio-кнопками
Сначала дом выбираешь, потом букву, потом результаты
Текстовое поле - это пиздец
Что-то ты начал за здравие
>Сделай нормальный интерфейс. Какая строка, блять? 2016 год
закончил за упокой
>Cделай тогда выбор номера с radio-кнопками
>Сначала дом выбираешь, потом букву, потом результаты
Совсем никто совсем ничего не подскажет по корректным значениям параметров для drawImage??
Кто ж знал, что ты так по-ебанутому всё делаешь? Обычно за проверку дома на существование бэкенд отвечает, а у тебя пользователь
>(по ссылке небольшой баг - после загрузки по кропперу кликнуть надо, чтобы он на место встал)
Это не баг, это фича последствия отсутствия строгой типизации, лол:
//top: "-" + h
top: parseInt(h)*-1
подкинь шаманств плиз
RegExp тебе в помощь
а тут можешь тустировать регексы http://www.regexpal.com
регулярка в твоём случае будеч то то типа такого /\,?(.+)/ig
Не, чувак такое говно даже стыдно подсказывать.
А врочем ладно подскажу, пуская гонят меня и издеваются надо мною
.image-canvas {
border: 2px solid #163cbc;
position:absolute;
left:0;
top:0;
}
Как бы стили правильные не забывай указывать
Но я спрашиваю, какие значения использовать при вызове context.drawImage() из тех, что у меня хранятся в options, няш. Стили кроппера-то тут причем?
было 16 фреймворков, стало 17.jpg
Ангуляр 2, как мне кажется, идеален для всего, что нам нужно в 2016 году. Гугловцы знают что делают.
form.addEventListener("submit", function(event){
if(!(login.value&&password.value)){
event.preventDefault();
console.log("Не введены данные");
popup.classList.remove("modal_error");
popup.classList.add("modal_error");
}
else {localStorage.setItem("login", login.value);}
});
это тупо проверка на вводе данных в форму, смысл в том, чтоб трясти форму когда что-то не введено. modal_error тупо добавляет классу анимацию. Первый раз все норм работает, на второе нажатие не реагирует анимация, а после закрытия формы и открытия анимация проигрывается сама по себе. ЧЗНХ?
>НЕ КОПИРУЙ КОД ПРЯМО В ТРЕД! Воспользуйтесь https://jsbin.com/ для браузерного кода и https://ideone.com/ для серверного кода.
бля, кароч как-то так https://jsbin.com/hobefativo/edit?html,css,js,output
Не могу понять почему повторное нажатие, которое по идее должно запускать заново submit не проигрывает анимацию
Вечер в хату, https://jsfiddle.net/e5cbuoxf/6/
вот тут я наговнокодил, че то стыдно такой код показывать, подкиньте идей как сократить ?
if(document.body.querySelector(".start")&&(!document.body.querySelector(".stop")) {
принято, а colorizeBetween насколько неочевидна ? Именования там прозрачны ?
```var create = (function(){
var Temp = function(){};
return function(parentPrototype){
Temp.prototype = parentPrototype;
var result = new Temp();
Temp.prototype = null;
return result;
}
})();
```
почему нельзя просто написать
```var create = function(parent) {
var Temp = function() {};
Temp.prototype = parent;
var result = new Temp();
return result;
}
```
зачем Temp находится в кложурсе? Он же память будет просто так занимать всегда
Ну в первом случае темп будет создаваться только один раз, при выполнении когда кода с полифилом, а во втором каждый раз когда вызываешь create. Возможно это какая-то оптимизация. Все жалуются что обжект.креайт медленный.
ну хуй знает, выбирая между es6 и ts я выбрал бы es6 т.к. незнаю почему, но я на coffee уже обжегся, выучил его, а через две недели вышел es6 и он сдох
Очевидно, что проблема в удалении класса/присвоении класса.
Такой 'ugly hack' для демонстрации решает проблему:
setTimeout(function() {popup.classList.remove("modal_error");}, 50)
setTimeout(function() {popup.classList.add("modal_error");}, 100)
спасибо
Ну ебаный в рот, не вешай обработчик на каждый элемент в цикле. Используй делегирование!
Комментируешь в коде всем очевидные вещи - как работает инструкция if: // если есть элемент с классом start, но не комментируешь, для чего нужны твои функции, какие аргументы принимают и вообще для чего нужен твой код. Сделай чтобы функция colorizeBetween принимала только 2 аргумента colorizeBetween(startIndex, stopIndex) и уже внутри нее определяй в какую сторону закрашивать, передавать 3 параметром строку "left" или "right" - хуевая идея - легко допустить очепятку и твоя IDE ничем подсказать тебе не сможет.
>var sta = startIndex;
>var sto = stopIndex;
>var startIndex = sto;
>var stopIndex = sta;
Что вообще здесь творится?
ок, но если закрыть и открыть форму то анимация один хуй проигрывается, да и это решение с графическим лагом, че-то тут не так. если поставить задержки 500 и 1, то получится проигрывание обеих анимаций...лол, но выглядит уже лучше. Так с какого хуя обе проигрываются?!
>но если закрыть и открыть форму то анимация один хуй проигрывается
Ебааать... Ясен хуй.
//JS
close_popup.addEventListener("click", function(event){popup.classList.remove("modal_show");});
//CSS
.modal_show{
display: block;
animation: bounce 0.8s;
}
Чувствуешь, тут что-то не так?
>>636159
>//JS
>close_popup.addEventListener("click", function(event){popup.classList.remove("modal_show");});
Бля, то есть:
enter.addEventListener("click", function(event){event.preventDefault();popup.classList.add("modal_show");
Сплю уже.
Кароч, при входе вешается класс с анимацией.
Следовательно, все у тебя по коду логично.
ну типа если мышка в левую сторону пошла, нужно поменять индекс начала и конца местами а то получится array.split(8,2) например а js так не умеет
логично-то логично, только обе анимации по отдельности прекрасно работают, а вместе нихуя. Подвоха не понял. Ну то есть как не понял, понял, что у класса modal_show всегда висит анимация, и при вызове еще одной анимации с этим блоком первая тож проигрывается. Это не то поведение, которого я ждал от keyframes
Бамп
Ээ блет, так чем ты вообще заниматься собираешься? Я могу тебе с десяток технологий написать, но нахуя тебе это?
console.log(event) выдает одинаковые результаты в обоих случаях.
>Допустим есть окно чата и нужно обрабатывать каждое новое сообщение
Вешаешь ивент лиснер @ прикручиваешь обработчик.
Обзор ивентов:
https://developer.mozilla.org/en-US/docs/Web/Events
Можешь запилить кастомный ивент:
https://developer.mozilla.org/ru/docs/Web/Guide/Events/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9
Спасибо, я так понял вот эта штука https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver как раз то, что мне нужно.
нужно организовать поиск по большим json файлам с помощью js , в файлах выгрузка даных порядка 100к позиций, необходимо выводить данные на сайт
с помощью чего это можно реализовать
Спасибо, во всей видимости это то что мне нужно.
Где загибается? Ты хочешь сказать, что он не способен подгрузить объекты из джейсона?($scope.huetaName = angular.fromJSON(response.data);) и гуляй-рука-писюн, то есть клепай себе через нг-репит.
просто оно фиксит твою проблему. Стили играют роль в позиционировании вот этих твоих жвух поебней
а ты по кусочкам попробуй, первую тыщенку отрисуй, setInterval(500, отрисоватьТыщенку);
Чем не варик?
var parser = new JSON.Parser();
parser.update(data); // updates the state of the parser with more data
var result = parser.result();
>>636888
http://stackoverflow.com/questions/17348058/how-to-improve-performance-of-ngrepeat-over-a-huge-dataset-angular-js
не вариант по скролу еще подгружать ?
Но так плохо делать, на самом деле. Если ты не юзерскрипт пишешь и чат твой - можно сделать куда правильнее.
Потому что не пытайся делать хуйню(загружать несколько тысяч сразу), тут тебе люди говорят делай через интервал(где там ебаться-то? одну строку кода добавить?), по событию(скролл, аддБаттон, ватевар). Что угодно наебнется, если его заставить 100к сразу подгрузить.
Через интревал\событие фильтруй\делай что угодно и кешируй в объекте контроллера - отдавай из объекта. Все просто.
Где прочитать за эту хуйню?
Спасибо, ананс прям по первой ссылке такой охуенный маятник!
> >анхулар тхреад
> >Пиздец ты мудак. Такие вещи на бэкенде делаются
Это жс-тред, мудила, и на жс можно запилить бэкенд
Как вообще мысль может прийти о сортировке данных на клиенте, это же пиздец
Какую библиотеку, поехавший? Знаешь что такое бекенд?
У тебя должна быть база данных, в которой эти данные, вся сортировка, поиск, агрегация выполняется на бекенде, через базу данных
А клиент должен их таскать запросами
/get-data?PAGE=1&SEARCH=vagina
бампану пожалуй
Передай контекст.
Плохой способ:
var self = this;
return self.userData;
Хороший способ привязать к вызываемой функции контекст через .bind(this)
>>637448
А, блядь, не всматривался в твой высер, у тебя промисы в Sails.
Тогда что не работает?
Здесь такой же код и так же используется возврат внутри .then
http://maangalabs.com/blog/2014/08/23/promises-in-sails-js-remove-callback-hell/
Возвращай из сервиса Promise. В контроллере через then прописывай результат в response.
Охота поразбираться.
>А то вместо колбек-хелла промис-хелл получается
Суть в том, что в промисах значения можно (и нужно) резолвить.
Адаптированный вариант Мозилловского примера:
https://jsbin.com/miwelu/edit?js,console
Так резолв это же просто обработка значений, которые вернулись. А как из промиса вернуть значение во внешнюю переменную, например?
Думай о резолве как об успешном адресате параметра (это может быть как промис, так и любое произвольное значение) в следующую (thennable) функцию:
.then(
// Промис передал нам значение
function(val) {
console.log('Значение знаешь? ' + val);
})
Еще раз посмотри пример выше на жсбин, он довольно нагляден для понимания промисов.
Все правильно работает.
У тебя вызов console.log(kok) происходит ДО того, как значение переменной kok будет перезаписано (в промисе для примера используется таймаут), посему результат не такой, как ты ожидал.
Вот демонстрация твоего примера с верной последовательностью вызова функций (переменная kok принимает значение, переданное резолвом).
https://jsbin.com/raworav/2/edit?js,console
Очевидно зачейнить очередь из промисов, где последнее звено будет функцией с обработкой ВСЕХ полученных в предыдущих шагах значений. Then гарантирует, что промис выполнился.
Попробуй теперь Бабель с async/await, вообщи кайфуищь
> Зачем sails в ангуляре подключаются?
Для работы с сокетами.
> Рендеринг на серверной стороне?
Полностью на клиенте, на сервере только данные
Если тебе дали удобную ложку, это не означает что гавно стало вкуснее.
Поработай подольше с базой данных через промисы, потом подумай, а зачем ты это делаешь? А делаешь ты это только потому, что в ноде всего один поток.
> а зачем ты это делаешь?
Что делаю? Через промисы работаю?
> А делаешь ты это только потому, что в ноде всего один поток
Какое ещё поток? Event-loop?
Есть event-loop, из-за которого нода такая охуенно быстрая. На этом же event-loop'e основан nginx, например, который тоже пиздец быстрый.
И чем тебе event-loop не нравится? Тем, что нужно писать ассинхронно? Так никто не заставляет, можешь синхронно писать, жертвую скоростью работы приложения
>Поработай подольше с базой данных через промисы, потом подумай, а зачем ты это делаешь? А делаешь ты это только потому, что в ноде всего один поток.
Где связь?
Если бы в ноде можно было бы запускать потоки, то все бы использовали синхронный АПИ работы с базой.
https://www.youtube.com/watch?v=bzkRVzciAZg
Event-loop это хорошо, когда ты можешь передавать тяжёлые задачи в другие потоки. Например, так работают все нативные GUI-тулкиты: event-loop в основном потоке для быстрых ответов, а рассчёт и рисование UI в отдельных потоках. В отдельных потоках можно писать синхронный код, а потом результат возвращать в основной поток через event. Latency при этом не страдает, т.к. основной поток занят только обработкой ивентов и ничем больше, throughput тоже выше, т.к. используется больше ядер процессора.
А в ноде, из-за того что есть только один поток, даже цепочки операций с базой данных приходится делать асинхронно. С промисами, конечно, немного проще чем с коллбеками, но гораздо сложнее чем синхронно.
> В отдельных потоках можно писать синхронный код, а потом результат возвращать в основной поток через event.
Нахуя? Это, по сути, такой же промис, только через анус
Я тут раскрою маленьких секрет, но async/await решает проблему с асинхронным кодом от слова полностью. У обезьянки остается только одна задача - не блокировать надолго event-loop внутри своего кода.
Синхронный код короче, быстрее пишется и гораздо легче читается.
Вот адаптированный пример из кода текущего проекта. Считай что Group и Item это условные Sails модели, а Service - это условный сервис.
https://codetidy.com/7828
Как тебе поможет async/await в ситуации, когда ты работаешь с API на промисах?
И да, ты думал о том, что в жизни бывают вычислительно интенсивные задачи?
>API на промисах
Из промиса ES6 можно делать await, собственно, async - такой сахар над промисами. Хреново, если либа городит свои костыли, но их постепенно переписывают.
>вычислительно интенсивные задачи
Пул тредов-воркеров, и координация через асинхронный API, иначе никак. Это нормально.
Однохуйственно. Если так хочется, чтобы было как на нижнем примере можно наплодить куча мельких функций на каждый then промиса и отличаются два примера будут только наличием then-aми. Собственно для этого и есть промисы.
then-ов*
Дело не только в then-ах, обрати внимание, какой там выкрутас делается чтобы собрать вместе результаты от нескольких асинхронных запросов Service.getItems.
Для этого, кстати планируется такая штука:
var vals = await* [promiseObject1, promiseObject2, ..];
> Синхронный код короче, быстрее пишется и гораздо легче читается.
Но в несколько раз медленнее работает
А как с обработкой ошибок в этом выражении будет?
Promise.all падает когда хотя-бы один промис внутри падает. Поэтому в примере по ссылке делается .then(res=>res, err=>[]), чтобы в случае ошибки успшеные результаты обработались.
Он не медленнее работает, он просто заставляет поток простаивать некоторое время. Но операционная система для того и существует, чтобы отдать на это время процессор другому потоку. Обычно в многопоточных приложениях потоков больше чем ядер чтобы процессор не простаивал.
Из reject промиса ошибка вылетает вверх по стеку, прям как в синхронном коде. Никаких коллбеков, классические try - catch
В твоем случае, делается map async function , и await по каждому промису, обернутый в try - catch, где catch возвращает нужный тебе пустой результат.
да вообще пиздец
Ну так если я выберу хуевый редактор и там не будет удобных штук типа автодополнения и скрытия блоков кода то я сосну ж.
У меня раньше был ноутпад++, но я решил перейти на юбунту и тут он не идет, приходится вот искать новый.
тут так просто не скажешь, погугли учебники по редакторам, benchmarkи там всякие, может стоит курс по webstorm прослушать, тогда только за кодинг садись...
да бля любой известный имеет все что нужно, все что не нужно доустанавливается, sublime-text смотри, условно бесплатный, будет иногда заебывать с просьбой купить его ( в большинстве своем все юзают его ) думаю никто его ни разу не купил, я на webstorm сижу со времен pycharm атом тоже, короче похуй любой популярный бери и все
А емакс выучить не надо перед тем как хеллоуворлд садиться писать?
Бог тебе дал пакеты, а ты компилируешь
На самом деле нода не лишена некоторых детских болезней, которые скорее являются проблемами V8, нежели модели event-loop в целом.
Взять тот же JSON, речь о работе с которым велась выше. Если JSON достаточно громоздок по объему, то сериализация данных может занять значительное время. Все это, конечно, относительно, но тем не менее, произойдет блокирование единственного потока.
С другой стороны, есть замечательная возможность запускать несколько костылей инстансов самой ноды:
https://nodejs.org/docs/latest/api/cluster.html
по сути, делегируя выполнения задач на несколько потоков.
Это становится охуенной киллер-фичей, если мыслить в контексте гибридных задач, где требуется совместить плюсы а- и синхронного подхода. Например, скада.
Обработку сигналов с оборудования реализовываем строго синхронно и в отдельном инстансе, UI и взаимодействие с пользователем - в асинхронном. Что скажете, джейсоны?
Другого решения и нет, анон, если мы делаем что-то отличное от модели cgi. Как делать риалтайм без event-loop модели? Да никак, наверняка в твоей скаде гуи обновляется через вебсокет. Проблемы c JSON решаемы написанием асинхронного драйвера, как с БД. Форкаемся, выполняем работу, шлем ивент с результатом, завершаемся.
Что делать, если я хочу иметь возможность переключаться между стилями? Можно понасоздавать stylish скриптов, между ними переключаться. А можно как-то выпадающий список организовать, чтобы один раз нажал и всё заработало?
Интересует вопрос изменения стилей на лету средствами именно GreasyMonkey.
Ну давай, расскажи мне про разницу.
Лучше подождем, когда в ноду завезут АПИ вебворкеров, и библиотеки начнут им пользоваться. В вебворкерах и тредпулы есть, все как у белых людей.
Есть большая разница между вычислительными задачами (сериализация/десериализация) и I/O задачами типа общения с базой, где нужно просто дождаться ответа.
Ну делай сериализацию/десериализацию в отдельном треде/процессе и жди ответа, я ж написал.
шалом неверстальщикиафронтендеры, появилась затея замутить что то типа search any where, ставишь плагин, захлдишь в вк пишешь имя фамилию человека, в результатах получаешь так же ссылки на найденных в ok.ru facebook и еще каких нить социалочек, как думаешь взлетит ?
Да
Присваиваешь созданному ноду какой-нибудь идентификатор, потом по ниму в нужный момент node.disabled=true|false.
Дело в том, что d3 это низкоуровневый инструмент для создания не типичных вещей. Если тебе нужно что-то стандартное, то лучше брать либу с готовыми графиками. Ебаться с d3 - та ещё радость, у них там свой датабайндинг ( этакий недореакт), своя либа для анимации. Scails и layouts там действительно полезные, но они заточены именно на использование в их поехавшем "fluent" интерфейсе.
>javascript thread
>кодить на Java
А я еще постоянно разражаюсь когда в каждой новой книге по джс рассказывают, что это не джава, а названия похожи, потому что маркетологи долбоебы. ЛОЛ
> fluent интерфейсе
Шарпоняша не палится, обычная яваскриптовая недомонадка.
> Scails
scales же
>>639199
Посмотри производные графические либы на d3 - dc.js, c3.js, nvd3.js reactd3 и т.п. Тот Шарпоняш все верно сказал, сама d3 для элитки вроде data-artist'ов, обыкновенным людям напрямую ее использовать незачем.
Не то, плохо объяснил.
Допустим, есть код:
obj.foo();
obj.bar();
Из него можно сделать вот так:
.foo();
.bar();
Где-то вверху указываем, что эти методы вызываются у obj.
Суть сводиться к тому, что в определённой области видимости все методы, вызванные без объекта (с точкой в начале) будут вызываться у определённого объекта, имя которого пишем только один раз.
Спасибо, оно. Я совсем чуть-чуть, очень читабельность повысит. Хотя и дело не в читабельности, судя по статье: https://habrahabr.ru/post/120364/
Читабельность повышает, когда у тебя объект спроектирован так, чтобы можно было
obj
.yoba()
.boba()
.allou()
.pshpshshsh()
С with же добра не жди.
Ну бля, ананасы, помогайте. Добавляю строки в БД (только ключ) и потом пытаюсь их достать (по тому же ключу, он в БД точно есть), но какое-то ебучее AbortError появляется. Что ему надо? 10 раз уже каждую строчку передрочил, всего-то и надо проверить есть в БД такая запись или нет.
Ну не знаю, у меня на "флюент интерфейсы" детектор сработал.
>Как вообще мысль может прийти о сортировке данных на клиенте
А если нужна сортировка по клику на название столбца таблицы? :)
modulus.io
Расширение, которое обращается к яндекс.пипл?
Кун-задавший-этот-вопрос-в-треде
Мне .apply помог, только у меня сложность была в том, что я передавал не в обычную функцию, а в метод класса, и там контекст надо было не this передавать, а сам этот класс
loh.ban.apply(loh, arguments)
По хорошему еще надо сделать дженерализацию функции calculate и отдавать туда название параметра.
Главное, что тебе стоит вынести из этого кода - обращение к свойству объекта это O(1), т.е. очень быстрый алгоритм. Это одно из главных преимуществ объектов перед массивами, их не обязательно итерировать.
Мне вот больше интересно, когда можно будет делать screen share через webRTC средствами chrome.
Потому что мало задач.
Мат. формулы сложнее работы с webGL.
_.clone()
Для большей дженерализации, не знаю, зачем еще.
Потому что тогда браузер берет на себя заботу о потоках.
Вариант split(",") вполне корректный, проверяешь потом отдельно каждое значение функцией, выясняешь, ошибка это, диапазон вниз, диапазон вверх, диапазон от и до или число. В чем загвоздка-то?
django
Спасибо, охуеено
Фаерволл не пропускает ничего, кроме nginx.
А если пользователь решает, как ему сортировать? Каждый раз перегружать страницу и гонять те же самые данные? Теперь понимаешь смысл front-end приложения?
> А если пользователь решает, как ему сортировать?
Пользователь отправляет ажаксом поле сортировки и направление, сервер берет данные из базы, сортирует данные по полю и делает аск/деск по направлению пользователя, отправляет. В чем проблема?
> Каждый раз перегружать страницу и гонять те же самые данные?
Ты всю базу клиенту выгружать собрался, сумасшедший?
> Теперь понимаешь смысл front-end приложения?
Я понимаю, а ты нет
>сервер ... сортирует данные по полю и делает аск/деск по направлению пользователя
Джейчую. Тем более, когда, как анон говорит, у него данных на сотни тысяч позиций. Это ж пиздец.
>>640055
СМудари, предоставьте-ка пример UI, в котором отображаются на одной странице (без пагинации) сотни тысяч позиций, это первое.
>В чем проблема?
В том, что это избыточный запрос, лишний траффик, лишнее время ожидания, данные уже есть на клиенте, все, что нужно, это отсортировать и перерисовать DOM.
>Я понимаю, а ты нет
Видимо, понимание через жопу это твой путь.
> СМудари, предоставьте-ка пример UI, в котором отображаются на одной странице (без пагинации) сотни тысяч позиций, это первое.
Так никто не делает, поехавший блять. Ну, кроме таких как ты.
Действительно, не упоминал.
Еще раз - пагинацию делают на сервере. Внутреннюю сортировку делают на клиенте.
Последовательность такая:
1. Первый заход на страницу - получение отрендеренного html в нужном порядке, затем сразу загрузка данных в виде json.
2. При клике на название столбца сортировка идет на клиенте.
3. При дальнейших переходах по страницам тоже грузятся только данные.
Суммарный проигрыш по траффику только при первом запросе, что окупается уже через один-два перехода.
В случае последовательности:
1. Загрузил отрендеренный html.
2. Клик на название столбца - ajax-запрос, получение отсортированного json (ты ведь не html предлагал получать?), рендер.
3. То же, что и в первом варианте.
Проигрыш наступает, если клик по названию столбца больше, чем 1 раз.
Итог: сортировать данные в формате json лучше на клиенте.
Ты понимаешь, что чтоб сортировать на клиенте тебе нужно выгрузить ему всю базу? На каждого клиента. Всю базу.
А если база изменится, снова выгрузить.
Мало того, что это небезопасно, клиенту базу отдавать, так это ещё и десятки мегабайт трафика, если не сотни и тысячи на каждого клиента, в зависимости от размера базы.
>чтоб сортировать на клиенте тебе нужно выгрузить ему всю базу?
Зачем это? Клиент получает только то, что необходимо.
Для перехода по страницам надо делать запрос.
Для сортировки по значению столбца не надо.
Для поиска по значению - надо.
> Зачем это? Клиент получает только то, что необходимо.
Ты говоришь про сортировку 20 элементов, которые получил клиент, а я про сортировку по всей базе.
Вот, например, у тебя в таблице 100 учеников из 1000. Если ты будешь сортировать по какому-то полю только на клиенте, у тебя сортировка будет только среди этих 100 учеников, остальные 900 в сортировку не попадут. В этом случае правильнее сортировать в базе, а не выгружать 1000 учеников на клиент.
>Ты говоришь про сортировку 20 элементов, которые получил клиент, а я про сортировку по всей базе.
В этом и был мисандерстендинг.
А не, не с сортировки даже, просто с вывода
Идиотина, блеать, ну какая сортировка на клиенте, если у тебя ПАГИНАЦИЯ? Ну отсортируешь ты текущую страницу, и дальше что? Когда пользователь жмакает на сортировку, он желает увидеть первой строкой минимум/максимум среди всех данных, сортировка только среди пагинированного набора записей нахуй не упала.
Мне кажется, что не кажется.
Нельзя делать инфинити скролл там, где важен порядок элементов, и нужна удобная навигация
Это как не нумеровать страницы документации, например.
>Нельзя делать инфинити скролл там, где важен порядок элементов
Можно (ре)рендерить таблицу с данными после подгрузки элементов.
Ничего криминального в этом нет.
Инфинит скролл порядок сохраняет, в произвольное место можно спозициорироваться скролбаром, но это нахуй не надо, т.к. обычно есть быстрый поиск вводом с клавиатуры. Что тебе еще нужно, болезный?
Не могу понять как добавлять в коллекцию данные, которые определены в модели на более глубоком уровне.
https://jsfiddle.net/L4w7udw7/
Так нельзя делать, епта. У тебя для этого поля должна быть отдельная коллекция, вложенных данных быть не должно. Уровень вложенности = коллекция.
А почему этот СИНЬОР так делает?
https://github.com/sahat/hackathon-starter/blob/master/models/User.js
То есть нужно делать не так
loh: {
\tdaun: {
\t debil1: { type: String, default: 'net'},
debil2: { type: String, default: 'net'},
debil3: { type: String, default: 'net'},
debil4: { type: String, default: 'net'},
debil5: { type: String, default: 'net'}
}
}
а так?
lohdaundebil1: { type: String, default: 'net'},
lohdaundebil2: { type: String, default: 'net'},
lohdaundebil3: { type: String, default: 'net'},
lohdaundebil4: { type: String, default: 'net'},
lohdaundebil5: { type: String, default: 'net'}
Чет совсем фуфлыжно выглядит
Не, так:
loh: {type: Mongoose.Schema.Types.ObjectId, ref: 'Loh'}
И под поле loh у тебя отдельная коллекция, в которой будут храниться нужные данные. То есть тебе нужно описать модель для коллекции Loh, модель User может ничего о ней не знать, у неё просто ссылка на другую коллекцию.
есть массив с ссылками на картинки
нужно сделать так, чтобы каждая ссылка была завернута в <img src=""/> (которые в свою очередь находятся в каком-то контейнере, разумеется)
делаю так
var container = $('#container')
arr.forEach( function(element, index) {
_container.innerHtml += '<img id="'+index+'"/>;
_var target= $('#'+index);
_target.attr('src','element); // да, я еблан, можно сразу в src засунуть, но в этой строке функция из одной либы нет не jquery , типо упростил дохуя
}
проблем в том, что на выходе отображается только последняя картинка (у всех аттрибут src пустой, кроме последнего)
Я подумал, что тип это причуды ебучего html и решил дать время на отрисовку и засунул последнюю строку в setTimeout, но нихуя
help'ируй, анон
А если по быдлячьи сделать:
lohdaundebil1: { type: String, default: 'net'},
lohdaundebil2: { type: String, default: 'net'},
lohdaundebil3: { type: String, default: 'net'},
lohdaundebil4: { type: String, default: 'net'},
lohdaundebil5: { type: String, default: 'net'}
То какие подводные камни будут?
Зачем? Это противоречит принципам монги
Можно и весь код, например, в одном файле писать, но зачем?
>Зачем?
Чтобы работало же и не пришлось еще день тратить на попытки реализации с помощью ссылок на коллекцию.
Оно ведь таким макаром не намного сильнее будет тормозить, по сравнению с монгофилософским вариантом?
> Чтобы работало же и не пришлось еще день тратить на попытки реализации с помощью ссылок на коллекцию.
День?
http://mongoosejs.com/docs/populate.html
> Оно ведь таким макаром не намного сильнее будет тормозить, по сравнению с монгофилософским вариантом?
Так дело в удобстве, а не в скорости
в общем, в этом коде перед вставкой ссылки картинка кэшируется и тут же вставляется ссылка на локальную копию
в чем может быть проблема?
>День?
С этой логикой все более-менее понятно. Другое дело, что в контроллере есть уже функции, которые работают с базой в нессылочном виде. И их придется модифицировать(а я не знаю как, кек), если делать все правильно.
Спасибо за ответы.
> Другое дело, что в контроллере есть уже функции, которые работают с базой в нессылочном виде
Я с монгусом мало работал, но по-моему там прозрачная линковка.
То есть, нет никакой разницы, работаешь ты напрямую с данными в коллекции, или это ссылка на другую коллекцию - всё работает одинаково, пока в модель не посмотришь - не отличишь
И где src пустой?
Это копия, сохраненная 17 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.