за и против серверной стороны реализация JavaScript?

Mozilla имеет более строгую политику для позволенных действий/событий JS - у меня были подобные проблемы с щелчком () событие также. Это отключено на некоторых элементах для предотвращения XSS.

Что не так с перенаправлением браузера? Это должно работать везде.

16
задан RameshVel 24 November 2013 в 19:13
поделиться

3 ответа

I am the developer for Myna (www.mynajs.org), an Open Source server-side JS platform based on Rhino and Java. I'll address the issues as they relate to Myna, but many of these points apply to server-side JS in general:

By using server side JS, can we implement the whole web application without using any server side languages (like C#,java etc). Or server side JS sits in between the web server and other langauge stack.

In Myna it is possible to write your entire app in JS. Myna already includes API's for Database access, Object Relational Mapping, crytogrophy, OpenID, etc.

Is it really a better approach than c#/Java?

With a Rhino based server it is trivial to drop down to Java whenever needed. You can easily install open-source/commercial/hand-coded Java libraries and then script them from JS. This means you get the rapid development of JS but maintain the advantages of the Java platform

what are the advantages and disadvantages?

pros:

  • Rapid development: In Myna you just create files in the webroot with an .sjs extension. This means you can create an edit-save-refresh browser cycle with is very fast for debugging/tweaking code.

  • Easy JSON: Having JS support server-side means moving complex structures is very easy

  • Shared code: If you need to perform the the same function on both the server and the browser, you can use the same code

  • Dynamic ORM: Statically typed compiled languages make it hard to alter objects at runtime. This usually means that ORM has to be defined in advance. In Myna building ORM is as simple as

    var manager =new Myna.DataManager("DataSource name").getManager("table name");
    

    You get an object that can do all basic CRUD operations without ever explicitly defining the DB tables. As another example you can insert a row with all the matching values from a form post:

    manager.create($req.data);
    
  • Functional Programing: If you have started playing with advanced JavaScript features then you will appreciate how helpful they are server-side. Because of the consistent server-side environment it is safe to use advanced features such as Array Extras, generators and iterators, destructuring assignments, and E4X

cons:

  • Tools: Statically typed languages like C# and Java have excellent IDE and developer tools. Dynamic languages like JS just don't have the tool support yet. Personally I find that the large reduction in boilerplate code and fussy type casting makes up for this, but this is still a big disadvantage if you have been doing a lot of development in IDEs. If you are currently using an IDE, consider using jedit for dynamic languages

  • Maturity/Standardization: Serverside JS is still a new paradigm, and there are many players and no clear winners. ECMA does not have any standards for serverside JS. As mentioned in Brandon's answer, the CommonJS group is attempting to form a serverside JS standard and Myna has experimental CommonJS support via Narwhal

how this works well in terms of performance?

In raw computational speed, few dynamic languages can match statically typed compiled languages like C# and Java. Having said that, it really doesn't matter. Any part of your application that is computationally intensive should probably be written in Java, or use an existing Java library. I wouldn't suggest that anyone write a Database in JS for instance. For real world web applications/SOA services, the primary cause of slowdowns isn't raw computational speed, it is inefficient code, especially database access. Myna helps with this by doing things like:

  • internally caching compiled JS scripts
  • Internally using cached prepared statements for database transactions
  • Query and output fragment caching
  • Database connection pooling
  • Automatic ETag hash support
  • Profiling tools
  • Lazy loading of metadata

how well we can implement & maintain db transactions? can we do that in serverside JS..?

If you mean transaction as in "a set of SQL statements that can be reversed or committed", then Myna does not yet support transactions. I am open to implementing this if there is enough interest.

If you mean "what kind of database support does server-side JS have?" then the answer is platform dependent. The Myna platform provides the following database features:

  • A web-based administration application where you can define "datasources", i.e database connection information. You can then query these datasources by name. Myna includes JDBC drivers for H2, MySQL, Microsoft SQL Server, and Postgresql, but any JDBC or ODBC datasource can be used
  • Myna.Database and Myna.Table provide database-neutral metdata access as well as table creation and modification.
  • Myna's Query object supports maxRows, paging, SQL parameters,custom row handlers, query-of-query, caching and more
  • Myna's DataManager object supports runtime ORM object creation

is it possible to develop RESTFul and SOAP services in serverside JS..??

REST and SOAP support are platform specific features. Myna's WebService object supports the following protocols:

  • SOAP
  • XML-RPC
  • JSON-RPC
  • Ext Direct
  • JSON-MYNA (a simple protocol that uses normal form posts and returns JSON. Easy to use from the browser)

Myna also understands the PUT and DELETE request methods and presents access to request body content in both text and binary form, so that it is possible to handle these RESTful methods in an application specific way.

Debugging

Traditional breakpoint debugging is a real challenge serverside. Although Rhino supports debugger hooks, using these from a stateless web app would be pretty involved. Personally I don't even use breakpoint debuggers even when they are available (e.g. firebug). Instead I prefer logging.

In Myna,

 Myna.log(type,label,detail)

will spawn a low priority thread to write an HTML log message to Myna's logging database. These logs can then be searched through the Myna Administrator. Logs also record timestamps and elapsed milliseconds for profiling purposes. Myna.dump(obj) can also be used to present an HTML table representation of any object. Myna also logs all un-handled exceptions with stack traces, source code context, and request details. Between dump(), log(), and the default error handler I haven't much difficulty debugging Myna code

19
ответ дан 30 November 2019 в 16:42
поделиться

Используя JS на стороне сервера, можем ли мы реализовать все веб-приложение без использования каких-либо языков на стороне сервера (например, C #, java и т. Д.).

Нет необходимости писать код на любые другие языки, хотя многие серверные JavaScript-фреймворки используют движок Rhino, который позволяет вызывать любой Java-код.

Действительно ли это лучший подход ??

Я не думаю, что JavaScript (как язык) действительно лучше или хуже, чем традиционные серверные языки. У него есть преимущества (наряду с другими динамическими языками, такими как Ruby и Python), такие как гибкость, быстрое прототипирование (без каламбура), гибкость и т. Д. С другой стороны, у него нет поддержки библиотек, которые есть в Java и C #, или статической типизации. (Я не буду вдаваться в споры о том, что здесь лучше; мне нравятся оба варианта по разным причинам).

Если вы хотите получить лучшее из обоих, вы можете использовать JavaScript в качестве языка сценариев, встроенного в ваше приложение. Rhino для Java и JScript.NET упрощают управление «собственными» объектами в JavaScript. Вы могли бы, например, написать свои классы предметной области на Java или C # и написать их скрипт с помощью JavaScript там, где вам нужна большая гибкость. Если вы достаточно знакомы с JavaScript, писать на одном языке может быть проще.

Я никогда не писал «настоящих» серверных приложений с использованием JavaScript, поэтому я не могу судить, лучше ли оно или хуже, чем .NET (я также никогда не использовал JScript.NET). Я поигрался с несколькими фреймворками для развлечения, и сейчас я переписываю свой личный сайт с помощью Helma NG. Пока что это был хороший опыт (намного лучше, чем PHP, который я мне никогда особо не нравился).

каковы преимущества и недостатки?

Преимущества:

  • Только один язык, необходимый для программирования на стороне сервера и на стороне клиента.
  • Возможность совместного кода для таких вещей, как форма Проверка. Jaxer позволяет запускать сценарии на клиенте, сервере или на обоих.
  • Вы можете программировать на JavaScript (если вам нравится этот язык).

Недостатки:

  • Многие фреймворки являются экспериментальными / не очень развитыми.
  • Вы должны программировать на JavaScript (при условии, что вам не нравится этот язык).

как это работает с точки зрения производительности?

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

есть ли реальный время реализации (общедоступные веб-сайты) только с использованием JS на стороне сервера (без других языков)?

Я не знаю ни одного крупного веб-сайта, использующего JavaScript, но могут быть некоторые.

какие альтернативы доступны по сравнению с Aptana jaxer (с открытым исходным кодом) ??

В Википедии есть большой список параметров , но там не так много полезной информации. Существует множество вариантов с широким диапазоном зрелости и размера.

Вот некоторые из них, с которыми я знаком (в разной степени)

  • Helma - фреймворк на основе Rhino (Java) с активной записью.
  • Helma NG - Helma Next Generation (экспериментальная перезапись, в стадии активной разработки).
  • Phobos - Имеет хорошую поддержку в NetBeans .
  • v8cgi - Маленький и просто, использует движок Google V8, вероятно, еще не готовый к производству.
  • Jaxer - Работает на Spidermonkey с реализацией DOM, поэтому вы можете управлять страницей с помощью таких фреймворков, как jQuery или Prototype. Имеет хорошую поддержку IDE в Aptana Studio.

насколько хорошо мы можем реализовать и поддерживать транзакции БД? можем ли мы сделать это в серверном JS ..?

Фреймворки на основе Rhino позволяют использовать классы Java, поэтому у вас есть полная поддержка JDBC. Я не использовал библиотеки баз данных Jaxer, поэтому ничего не знаю о его возможностях.

Можно ли разрабатывать RESTFul и SOAP-сервисы в серверном JS… ??

RESTful API не должно быть проблемой . Я не знаю какой-либо конкретной поддержки SOAP, но она должна быть возможной .

Можно ли разрабатывать сервисы RESTFul и SOAP в серверном JS .. ??

API RESTful не должно быть проблемой. Я не знаю какой-либо конкретной поддержки SOAP, но она должна быть возможной .

Можно ли разрабатывать сервисы RESTFul и SOAP в серверном JS .. ??

API RESTful не должно быть проблемой. Я не знаю какой-либо конкретной поддержки SOAP, но она должна быть возможной .

12
ответ дан 30 November 2019 в 16:42
поделиться

В качестве предисловия я использую SSJS на своей основной работе. У нас есть достаточно большой (с точки зрения сложности и количества просмотров страниц) веб-сайт на SpiderMonkey. Я добавлю к отличному ответу Мэтью, где у меня есть опыт.

Действительно ли это лучший подход, чем использование серверных языков (предположим, C #)

«Лучше» действительно зависит от того, что вы хотите с ним делать. У самого JavaScript есть как замечательные, так и довольно ужасные функции. Если вы серьезно относитесь к разработке JS (клиент или сервер), я не могу порекомендовать вам достаточно внимательно посмотреть презентацию Дугласа Крокфорда Javascript: The Good Parts , если вы еще не сделали этого. Он проделал фантастическую работу, разбирая хлам, и к тому же отличный оратор.

Самое большое, чего мне сейчас не хватает в мире SSJS, - это зрелости. Я не знаком с C #, но у JavaScript нет зрелой стандартной библиотеки и зрелых средств распространения пакетов. Для меня это большая часть головоломки.

Тем не менее, следите за группой CommonJS . Они работают над определением именно этих вещей. Кроме того, в документации по Jaxer Api перечислены встроенные модули, включенные в эту структуру.

Как это работает с точки зрения производительности?

JavaScript сам по себе не медленный язык и не особенно быстрый. Как указал Мэтью, он должен быть сопоставим с любым другим языком сценариев, который вы бы использовали. Война между поставщиками браузеров за то, кто сможет создать самый быстрый браузер, также принесет пользу компании SSJS.

Генеральная сборка мусора, которую команда V8 встроила в свой движок, является прекрасным примером этого. Остановка виртуальной машины для освобождения недостижимых объектов из кучи и освобождения их памяти может быть несколько медленной, но они смягчили это, уменьшив количество объектов, которые необходимо проверить при запуске сборщика мусора.

насколько хорошо мы можем это сделать. реализовывать и поддерживать транзакции БД? можем ли мы сделать это в серверном JS ..?

Jaxer, похоже, имеет API баз данных MySQL и SQLite. Как упоминал Мэтью, если вы используете Rhino, вы можете использовать JDBC api.

Изменить : Добавлены ссылки

Мы смягчили это, уменьшив количество объектов, которые необходимо проверять при запуске сборщика мусора.

насколько хорошо мы можем реализовать и поддерживать транзакции БД? можем ли мы сделать это в серверном JS ..?

Jaxer, похоже, имеет API баз данных MySQL и SQLite. Как упоминал Мэтью, если вы используете Rhino, вы можете использовать JDBC api.

Изменить : Добавлены ссылки

Мы смягчили это, уменьшив количество объектов, которые необходимо проверять при запуске сборщика мусора.

насколько хорошо мы можем реализовать и поддерживать транзакции БД? можем ли мы сделать это в серверном JS ..?

Jaxer, похоже, имеет API баз данных MySQL и SQLite. Как упоминал Мэтью, если вы используете Rhino, вы можете использовать JDBC api.

Изменить : Добавлены ссылки

6
ответ дан 30 November 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: