SQL.js: движок SQLite переведён на JavaScript посредством Emscripten

http://badassjs.com/post/18857332551/sql-js-sqlite-compiled-to-javascript-via-emscripten
  • Перевод
Alon Zakai (создатель Emscripten) продолжает действовать: на сей раз он выпустил скрипт SQL.js итог перевода библиотеки SQLite на JavaScript при помощи его собственного средства Emscripten. Демонстрационная страница показывает скрипт в деле, и если вы взглянете на исходники, то увидите, каким простым Закай устроил использование этого средства, им скомпилированного:

var db = SQL.open();
var data = db.exec(command);

Можно запускать сколько угодно SQL-запросов, и все они сработают совершенно так же, как в оригинале SQLite. Весьма круто! Быть может, Закай сможет устроить хранение данных в IndexedDB, и тогда со временем у нас будет polyfill для WebSQL? В любом случае, думаю, эта новость заслуживает упоминания! Отлично сработано.
Поделиться публикацией

Комментарии 25

  • НЛО прилетело и опубликовало эту надпись здесь
      +19
      Вы не поверите: программирование не ограничивается вебом.
        +2
        Совершенно верно. Можно запускать этот скрипт движком Node.js на сервере и наслаждаться. (Под Windows это, мне кажется, вообще единственный действенный способ работать в SQLite из-под Node.js, ведь node-sqlite3 на Windows ещё не портировали.)
          +2
          Не только. Можно, например, встраивать javascript в другие прораммы/писать на нём плагины, а sqlite использовать в качестве хранилища. Хотя, в случае плагинов, наверное, лучше обеспечивать хранение данных средствами самой программы через какое-либо API, чтобы не было зоопарка. Впрочем, это зависит от конкретных задач.
          +1
          По-моему вас все-равно не поняли :)
          0
          Если не ошибаюсь используется localStorage для хранения данных
            +1
            Нет, Вы ошибаетесь, он не сохраняет данные, все хранится в переменной
            +2
            Нигде не хранится. Есть db.exportData(), результат можно зашифровать и сохранить, к примеру, в localStorage.
            +1
            я думаю это все же не на уровне polyfill, а скорее proof of concept…
            выкокопроизводительные js-движки все же в тех браузерах что и так indexedDB поддерживают (polyfill это обычно чтото ие-костыле-подобное, а там этот js будет ой как тормозить)
              –2
              По моему мнению, sql.js будет тормозить хотя бы потому, что по объёму занимает ≈913 килобайтов. Такая груда не может не тормозить.
                +1
                Интуитивно с Вами согласен, но так можно сказать что firefox занимает 7 мб, значит он не может не тормозить. Или тормознутость мерять размером (да вообще зачастую бывает даже обратное соотношение).
                Так что 900 килобайт сильно оптимизированного (типизированные массивы etc.) кода на JS может быть быстрее чем while(true) { do_nothing(); }
                  0
                  А разве firefox может не тормозить?:)
                    0
                    Может
                    Всего0то нужно отключить тормозные плугины и надстройки
                  +2
                  Проблема не столько в размере (вспомните твиттер с сообщениями в 140 символов и js на полмегабайта), сколько в самой технологии перевода. Emscripten не пытается выследить логическую структуру кода (циклы, ветвления, использование динамической памяти и т. д.), а берёт ассемблероподобное представление llvm и заменяет почти каждую инструкцию на соответствующий код в Javascript. Естественно, с эмуляцией стека, динамического выделения памяти и т. д.

                  Но проделанная работа определённо полезна как минимум для repl.it и обучалок вида tryhaskell.org и tryruby.org
                +3
                Очень круто, это ж можно забирать от туда парсер запросов и пользовать в онлайн редакторах, да так чтобы не только подсветка но еще и другие плюшки были, или например для тех кто делает онлайн курсы это позволило бы сделать их еще более интераквными

                Зашел на его сайт он еще и lua портировал, то есть можно делать веб приложение с простеньким языком программирования на борту, так например апликухи для анализа данных можно было бы сделать намного более гибкими

                В общем спасибо за статью и пищу для размышлений
                  0
                  Зашел на его сайт он еще и lua портировал, то есть можно делать веб приложение с простеньким языком программирования на борту
                  Исполнять lua движком на javascript? Зачем?
                  Ведь у нас уже есть гораздо более популярный (и в данном случае — более быстрый) javascript.
                    +1
                    Согласен действительно JavaScript был бы предпочтительнее с точки зрения производительности и т.п.

                    Меня просто очень воодушивила сама возможность вот так просто взять и начать использовать lua если по каким то причинам он мне нужен
                  +2
                  Мне из новинок понравился BankersBox он работает так-же как Redis только JS + localStorage. Очень удобно для тех кто знает Redis.
                  примеры:
                  var bb = new BankersBox(1);

                  bb.set("foo", "bar");
                  bb.get("foo"); // returns "bar"

                  bb.set("count", 10);
                  bb.incr("count"); // sets "count" to 11, returns 11

                  bb.incr("newcount"); // sets "newcount" to 1, returns 1

                  bb.lpush("mylist", "hello");
                  bb.lrange("mylist", 0, -1); // returns ["hello"]

                  bb.rpush("mylist", "world");
                  bb.lrange("mylist", 0, -1); // returns ["hello", "world"]

                  bb.sadd("myset", "apple");
                  bb.sadd("myset", "oragne");
                  bb.smembers("myset"); // returns ["apple", "orange"]
                  bb.sismember("myset", "apple"); // returns true
                  bb.sismember("myset", "lemon"); // returns false
                  bb.scard("myset"); // returns 2
                    +1
                    Сам считаю этот BankersBox для некоторых случаев слишком тяжеловесным(18КБ несжатый) поэтому юзаю localStore который оч легкий и с фоллбэком на куки.
                      +2
                      с фоллбэком на куки
                      Гм. Помоему, уж лучше не сохранять совсем(graceful degradation ftw), чем гонять тучу кук туда-сюда.
                      0
                      Еще работал с Backbone.localStorage Может пригодится кому-то.
                      –1
                      А еще теперь можно запустить в браузере VirualBox, а там — Windows При выборе решения надо следовать здравому смыслу, а не пытаться запустить на одной платформе то, что для нее не подходит. Но это мое имхо )
                        +1
                        Перечитайте заметку, речь же не о браузере.
                        +4
                        Быстрые процессоры породили чудовищ.
                          0
                          Это всё классно, только в современных браузерах (Хром, Опера, ФФ) отлично работает sqlite сам по себе, с помощью window.openDatabase()

                          сейчас www.w3.org/TR/webdatabase/

                          в будущем www.w3.org/TR/IndexedDB/

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое