Pull to refresh
  • by relevance
  • by date
  • by rating

«Совершенный Ajax» – новый подход к построению настоящих клиент-серверных web-приложений

Website development *
«Совершенный Ajax» — новый подход к построению web-приложений, при котором web-сервер не генерирует ни строчки HTML-кода и взаимодействует с внешним миром только посредством web-служб; а клиентский интерфейс реализуется только на основе клиентских HTML, CSS, JavaScript.

Статья состоит из двух частей. В первой части — более живой и провокационной я постараюсь заинтересовать проблемой, рассказать о технологии «Совершенный Ajax» и показать ее применение на примере нашего проекта «Система Интерактивного Тестирования Знаний “Синтез”» (который имеет ряд интересных особенностей, таких, как использование серверного JavaScript на платформе Mozilla Rhino, прототипно-ориентированная ORM и поддержка SPARQL — языка запросов к Semantic Web).

Вторая часть – более занудная будет содержать много технических деталей и выйдет в следующий раз.

По доброй традиции, награждаю плюсиками всех участников дискуссии, в том числе и конструктивных критиков, с чьим мнением я не согласен.



Попробуйте угадать: к какой архитектуре относятся web-приложения?

К клиент-серверной говорите? Я ожидал, что Вы так ответите :-)

Что ж, давайте разберемся. В клиент-серверной архитектуре выделяют:
  • Сервер — отвечает за хранение данных и реализацию бизнес-логики приложения.

  • Клиент — отвечает за взаимодействие с пользователем [1].

Реализация бизнес-логики на сервере и взаимодействие с пользователем на клиенте четко разделены.

Преимущества клиент-серверной архитектуры очевидны; мы их все знаем:
  1. Бизнес-логика не смешивается с пользовательским интерфейсом.
  2. Можно реализовать несколько клиентов с разными пользовательскими интерфейсами: интерфейс командной строки, оконный Windows-интерфейс, Flash, web-интерфейс, мобильный интерфейс и т.д.
  3. Клиентский компьютер не требователен к ресурсам;
  4. И т.д.


Но, относятся ли web-приложения к клиент-серверной архитектуре? Web-сервер

Действительно, в web-приложениях есть сервер, отвечающий за бизнес логику приложения.

Но! За реализацию интерфейса отвечает не клиент, а тоже сервер. На сервере происходит обработка клиентской формы. Сервер генерирует HTML-код пользовательского интерфейса.

Браузер Клиент, т.е. браузер лишь визуализирует уже готовый HTML-код интерфейса. Это, фактически, то же самое, что прицепить к серверу монитор и объявить этот монитор клиентом…

Читать дальше →
Total votes 150: ↑115 and ↓35 +80
Views 8.9K
Comments 152

Heroku — Экспериментальная поддержка Node.js

Node.JS *
Translation
Сегодня мы предлагаем экспериментальную поддержку node.js ограниченному множеству пользователей. Мы знаем, что существует большой спрос, и мы будем работать с таким количеством пользователей, которое мы сможем поддержать. Подробности ниже.
Читать дальше →
Total votes 34: ↑28 and ↓6 +22
Views 2.5K
Comments 7

Express — Sinatra для Node

Node.JS *
Translation
require.paths.unshift('path/to/express/lib');
require('express');

get('/', function(){
 this.redirect('/hello/world')
});

get('/hello/world', function(){
 return 'Hello World'
});

get('/bye/world', function(){
 this.render('title.html.haml', {
  layout: false,
  locals: {
   title: 'Bye World'
  }
 });
});

run();

В стремлении сделать серверный JavaScript похожим на Rails или Sinatra мы получили Express. Чистый и простой. Простой и чистый.
Total votes 41: ↑32 and ↓9 +23
Views 2.7K
Comments 70

Bespin переходит на node.js

Node.JS *
Как стало известно, после переработки клиентской стороны своего редактора разработчики проекта Bespin, судя по новому плану развития, перепишут серверную часть с Python/WSGI на Node.js.

Радует, что количество серьёзных проектов, переходящих на Node, неуклонно растёт.

Bespin — редактор исходного кода, чей клиент работает внутри web-обозревателя (подробнее о Bespin на Хабре).
Total votes 31: ↑29 and ↓2 +27
Views 946
Comments 12

Node.NET: Выполнение Node.JS на Windows через .NET

Website development *
Translation
Node планирует со временем поддерживать все операционные системы, совместимые с POSIX (включая Windows c MinGW), но в настоящее время он тестируется только на Linux, MacOS X и Solaris.

На встрече пользователей Node.JS в Пало-Альто кто-то спрашивал о работе Node под Windows, но ответ оказался не оптимистичным, — Вы можете заставить их работать вместе, и это обязательно произойдёт. Но сегодня? Непросто. Хотя это и не кажется громадной проблемой.

Однако, если Вам всё же интересно запускать приложения Node под Windows, и эта идея ваc вдохновляет:
C:\> node.exe server.js

… тогда Вы можете быть благодарны за то, что Дэн Ньюкоум создал Node.net, который дает нам:
  • Ту же идеологию работы, что и у Node.JS (однопоточный событийный фасад, неблокируемый ввод/вывод на заднем плане);
  • Совместимость с Node.JS по предоставляемому API;
  • Написан полностью на JavaScript (JScript.NET);
  • Работает на движке .NET.
Total votes 36: ↑21 and ↓15 +6
Views 2K
Comments 34

Node.JS: Пример HTTP-сервера в режиме prefork с использованием Web Workers

Node.JS *
Translation
Как обещал ранее, я публикую исходный код, демонстрирующий, как построить HTTP-сервер в режиме prefork, используя Web Workers и новый API net.Server.listenFD(). Я надеюсь, что этот код будет хорошим примером того, как легко нагрузить несколько ядер сервера, комбинируя пересылку файловых дескрипторов и Web Workers.

Читать дальше →
Total votes 37: ↑32 and ↓5 +27
Views 8K
Comments 28

Храните ваши клятвы; Отношения с Node

Node.JS *
Translation
Клятвы могут быть прекрасны. Алексис Селлир, сыскавший славу за разработку «LESS» (и «less.js»), начинает становиться звездой Open Source, выпустив в свет Vows, — каркас для разработки на Node.JS, управляемой асинхронным поведением.

image
Читать дальше →
Total votes 36: ↑20 and ↓16 +4
Views 1.1K
Comments 23

Node.js и эра JavaScript

Node.JS *
Translation
Три месяца назад мы решили отказаться от использования Django на нашем сайте и переписать все с нуля на серверном JavaScript под Node.js (уж если бывает в жизни стартапа время, когда можно серьёзно менять инфраструктуру, так это в самом начале пути — когда есть наибольшая свобода маневра).

Что заставило нас принять такое решение? Одна простая мысль — стек LAMP мёртв. За два десятилетия, прошедшие со времени его рождения, произошли фундаментальные изменения в протоколах, контенте, серверах и клиентах, на которых построен Веб. Можно выделить три эры развития паутины:
Читать дальше →
Total votes 132: ↑87 and ↓45 +42
Views 13K
Comments 210

JavaScript и Nginx = nginScript, а HTTP2 в придачу

JavaScript *

Дело было вечером, делать было нечего, но голова рукам покоя не давала и хотелось чего-то для души… А для души захотелось чего-то новенького, эдакого необычного.

Я, как и многие из хабровчан, люблю новинки. Релиз нового софта — это как праздник. Новые фичи, новые возможности… Новые способы забивать гвозди и кататься на велосипедах. Новые велосипеды… В общем можно придумать кучу аллегорий и метафор. А про что это я? Ах да, про Nginx, HTTP2 и JavaScript. Чем они связаны, спросите вы? А тем, что в последней версии Nginx (1.9.5) добавили много интересных плюшек, а именно:

  • добавили протокол HTTP2 и удалили модуль SPDY (нафиг старое барахло)
  • интегрировали прямо в nginx модуль ngx_http_js_module и создали свой диалект JavaScript

Го под кат, расскажу детали.
Читать дальше →
Total votes 52: ↑45 and ↓7 +38
Views 38K
Comments 57

Потоки (Stream) в NodeJS — реки, в которые войдешь дважды

ZeroTech corporate blog JavaScript *Node.JS *
Tutorial
image

Поток — это концепция, которая была сначала реализована в UNIX системах для передачи данных из одной программы в другую в операциях ввода/вывода. Это позволяет каждой программе быть очень специализированной в том, что она делает — быть независимым модулем. Сочетание таких простых программ помогает в создании более сложных систем путем «объединения» их в цепочку вызовов.

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

Распространенная задача — парсинг файла большого объема. Например, в текстовом файле с данными логов нужно найти строку, содержащую определенный текст. Вместо того, чтобы файл полностью загрузить в память, и потом начать разбирать в нем строки в поисках нужной, мы можем его считывать небольшими порциями. Тем самым не занимаем память сверх необходимого, а лишь столько памяти, сколько нужно для буферизации считанных данных. Как только найдем требуемую запись, сразу прекратим дальнейшую работу. Или можем передать найденную запись в другой поток по цепочке, например, для преобразование в другой формат, или сохранения в другой файл.

Модуль stream предоставляет базовый API по работе с потоками в Node.JS. Документации Node.JS вполне достаточно, чтобы разобраться в данном вопросе, но мы попытаемся составить что-то вроде шпаргалки с пояснениями некоторых моментов.
Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Views 46K
Comments 2

Node.js Streams для чайников или как работать с потоками

JavaScript *Node.JS *
Я думаю многие не раз слышали про Node js Streams, но так ни разу и не использовали, либо использовали, не задумываясь как же они работают, запайпили (pipe) стрим и норм. Давайте же разберемся что такое стримы, запайпить (pipe), чанки (chunk — часть данных) и все такое))


Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Views 35K
Comments 10