Надевание асбеста лонгджонс ...
Вчера мой заголовок с Packt Publications, Реактивное программирование с JavaScript . На самом деле это не Node.js-ориентированный заголовок; ранние главы предназначены для охвата теории, а последующие главы, насыщенные кодами, охватывают практику. Потому что я действительно не думаю , что было бы целесообразно , чтобы не дать читателям веб - сервер, Node.js , казалось , безусловно , очевидным выбором. Дело было закрыто еще до открытия.
Я мог бы дать очень радужный взгляд на мой опыт работы с Node.js. Вместо этого я был честен в отношении хороших и плохих моментов, с которыми столкнулся.
Позвольте мне включить несколько цитат, которые имеют отношение здесь:
Предупреждение: Node.js и его экосистема горячие - достаточно, чтобы сильно сжечь вас!
Когда я был помощником учителя по математике, мне сказали, что одно из неочевидных предложений - не говорить ученику, что что-то «легко». Причина была несколько очевидна в ретроспективе: если вы говорите людям, что что-то легко, тот, кто не видит решения, может в конечном итоге почувствовать себя (даже более) глупым, потому что он не только понимает, как решить проблему, но и проблему они слишком глупы, чтобы понять это легко!
Есть ошибки, которые не просто раздражают людей, пришедших из Python / Django, которые сразу же перезагружают исходный код, если вы что-то меняете. С Node.js поведение по умолчанию таково, что если вы сделаете одно изменение, старая версия будет оставаться активной до конца времени или до тех пор, пока вы не остановите и не перезапустите сервер вручную. Это неуместное поведение не только раздражает Pythonistas; это также раздражает нативных пользователей Node.js, которые предоставляют различные обходные пути. На вопрос StackOverflow «Автоматическая перезагрузка файлов в Node.js» на момент написания этой статьи было более 200 ответов и 19 ответов; редактирование направляет пользователя к сценарию няни, нод-супервизору, с домашней страницей по адресу http://tinyurl.com/reactjs-node-supervisor, Эта проблема дает новым пользователям прекрасную возможность почувствовать себя глупо, потому что они думали, что решили проблему, но старое, глючное поведение полностью не изменилось. И легко забыть сбросить сервер; Я сделал это несколько раз. И сообщение, которое я хотел бы дать: «Нет, вы не глупы, потому что такое поведение Node.js кусает вас в ответ; просто дизайнеры Node.js не видели причин для обеспечения соответствующего поведения здесь. Попытайтесь справиться с этим, возможно, воспользовавшись небольшой помощью от администратора узлов или другого решения, но, пожалуйста, не уходите, чувствуя, что вы глупы. Вы не тот, у кого проблема; проблема в поведении Node.js по умолчанию ».
Этот раздел после некоторой дискуссии был оставлен именно потому, что я не хочу создавать впечатление «это легко». Я неоднократно порезал себе руки, когда заставлял вещи работать, и я не хочу сгладить трудности и заставить вас поверить, что заставить Node.js и его экосистему нормально функционировать - дело простое, и если это не так просто для вас тоже Вы не знаете, что делаете. Если вы не столкнетесь с неприятными трудностями при использовании Node.js, это замечательно. Если вы это сделаете, я надеюсь, что вы не уйдете, чувствуя: «Я глупый - со мной должно быть что-то не так». Вы не глупы, если испытываете неприятные сюрпризы, связанные с Node.js. Это не ты! Это Node.js и его экосистема!
Приложение, которое мне не очень хотелось после растущего крещендо в последних главах и заключения, рассказывает о том, что я смог найти в экосистеме, и предоставляет обходной путь для дебильного буквализма:
Еще одна база данных, которая казалась идеально подходящей и, тем не менее, пригодной для погашения, представляет собой реализацию хранилища значений ключей HTML5 на стороне сервера. Этот подход имеет кардинальное преимущество API, который достаточно хорошо понимают большинство хороших разработчиков. В этом отношении это также API, который большинство не очень хороших разработчиков интерфейса понимают достаточно хорошо. Но с пакетом node-localstorage, хотя доступ к словарному синтаксису не предоставляется (вы хотите использовать localStorage.setItem (ключ, значение) или localStorage.getItem (ключ), а не localStorage [ключ]), реализована полная семантика localStorage. включая квоту по умолчанию 5 МБ - ПОЧЕМУ?Должны ли разработчики JavaScript на стороне сервера быть защищены от самих себя?
Для возможностей базы данных на стороне клиента квота в 5 МБ на веб-сайт - это действительно щедрое и полезное пространство, позволяющее разработчикам работать с ним. Вы можете установить гораздо более низкую квоту и при этом предложить разработчикам неизмеримое улучшение по сравнению с хромотой и управлением файлами cookie. Ограничение в 5 МБ не очень подходит для обработки больших данных на стороне клиента, но есть действительно довольно щедрое преимущество, которое изобретательные разработчики могут использовать для многих целей. Но с другой стороны, 5 МБ - это не особенно большая часть большинства дисков, приобретенных в последнее время, а это означает, что если вы и веб-сайт не согласны с разумным использованием дискового пространства, или какой-то сайт просто фальшивый, это не стоит больших затрат. Вы много, и вы не рискуете заболоченный жесткий диск, если ваш жесткий диск уже был переполнен.
Тем не менее, можно осторожно отметить, что когда вы пишете код для своего сервера, вам не требуется дополнительная защита от создания базы данных размером более 5 МБ. Большинству разработчиков не нужны и не нужны инструменты, которые действуют как няни и защищают их от хранения более 5 МБ данных на стороне сервера. А 5-мегабайтная квота, которая является золотым балансом на стороне клиента, довольно глупа на сервере Node.js. (И для базы данных для нескольких пользователей, как описано в этом Приложении, можно несколько болезненно отметить, что это не 5 МБ на учетную запись пользователя, если вы не создадите отдельную базу данных на диске для каждой учетной записи пользователя; это 5 МБ, совместно используемых между все учетные записи пользователей вместе. Это может получить больноесли вы идете вирусно!) В документации говорится, что квота настраивается, но неделю назад разработчик отправил электронное письмо с просьбой изменить квоту, как и вопрос StackOverflow, задающий то же самое. Единственный ответ, который мне удалось найти, находится в исходном коде Github CoffeeScript, где он указан в качестве необязательного второго целочисленного аргумента для конструктора. Это достаточно просто, и вы можете указать квоту, равную размеру диска или раздела. Но помимо переноса функции, которая не имеет смысла, автору инструмента не удалось полностью следовать очень стандартному соглашению интерпретации 0 как значения «неограниченного» для переменной или функции, где целое число должно указывать максимальный предел для некоторого использования ресурса. Лучшее, что можно сделать с этой ошибкой, - это указать бесконечность:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
Меняем местами два комментария по порядку:
Люди без нужды постоянно стреляли себе в ногу, используя JavaScript в целом, и частью JavaScript, сделавшимся респектабельным языком, был Дуглас Крокфорд, по сути говоря, «JavaScript как язык имеет некоторые действительно хорошие и некоторые действительно плохие части. Вот хорошие части. Просто забудь, что там есть что-то еще. Возможно, горячая экосистема Node.js вырастит своего собственного «Дугласа Крокфорда», который скажет: «Экосистема Node.js - это кодирующий Дикий Запад, но есть некоторые настоящие жемчужины. Вот дорожная карта. Вот области, которых следует избегать практически любой ценой. Вот районы с самой богатой зарплатой на ЛЮБОМ языке или в любой среде ».
Возможно, кто-то еще может принять эти слова как вызов и последовать примеру Крокфорда и написать «хорошие части» и / или «лучшие части» для Node.js и его экосистемы. Я бы купил копию!
А учитывая степень энтузиазма и просто рабочее время для всех проектов, может потребоваться год, два или три, чтобы резко умерить любые замечания о незрелой экосистеме, сделанные во время написания этой статьи. Через пять лет действительно имеет смысл сказать: «В экосистеме Node.js 2015 года было несколько минных полей. В экосистеме Node.js 2020 года есть несколько райдов ».