Донжинг азбестових лонгйонів ...
Вчора моя назва з публікаціями Packt, Реактивне програмування з JavaScript . Це насправді не Node.js-орієнтована назва; ранні глави призначені для висвітлення теорії, а пізніші кодові важкі глави охоплюють практику. Тому що я дійсно не думаю , що було б доцільно , щоб не дати читачам веб - сервер, Node.js , здавалося , безумовно , очевидним вибором. Справа була закрита ще до того, як її навіть відкрили.
Я міг би дати дуже рожевий погляд на свій досвід роботи з Node.js. Натомість я чесно ставився до хороших та поганих моментів, з якими стикався.
Дозвольте мені включити кілька цитат, які тут є актуальними:
Попередження: Node.js та його екосистема гарячі - достатньо, щоб погано спалити вас!
Коли я був асистентом вчителя з математики, одна з неочевидних пропозицій, яку мені сказали, - не казати студенту, що щось було «легко». Причина була дещо очевидною в ретроспективі: якщо ти кажеш людям щось легко, хтось, хто не бачить рішення, може виявитися (навіть більше) дурним, тому що не тільки вони не отримують як вирішити проблему, але і проблему. вони занадто дурні, щоб зрозуміти, що це легко!
Є єчі, які не просто дратують людей, які приїжджають з Python / Django, які негайно перезавантажують джерело, якщо ви щось зміните. У Node.js поведінка за замовчуванням полягає в тому, що якщо ви внесете одну зміну, стара версія продовжує бути активною до кінця часу або поки ви вручну не зупините і не перезапустите сервер. Така невідповідна поведінка не просто дратує піфоністів; це також дратує рідних користувачів 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 МБ не дуже швидко піддається обробці на стороні Big Data, але є дуже велика допомога, яку винахідливі розробники можуть зробити багато. Але з іншого боку, 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 має декілька парадизів ».