Thank
Библиотека Aurora
-
Простите за нескромный вопрос - но чем это облегчает работу? Как по мне так наоборот усложняет ) Использование аргументов на кирилице ваще нечто )) Эдакие екселевские суперфункции с божественным синтаксисом понятным толкьо избранным. В остальном хз даже, самые примитивные функции js просто переименованы .... зачем? ) Мб в дальнейшем конечно вытечет в какой то полезный фреймворк но пока что мне не понятно
-
@qwaros во-первых, где вы увидели функции на кириллице?
Во-вторых, щас объясню на пальцах чем именно упрощает.
Откройте engine.js и посмотрите любую функцию. Чать из них завязана на api баса, но даже если брать их, то мы должны будем писать в коде, например:
eval('var regexp_result = native("regexp", "first", JSON.stringify({text: content,regexp:"'+ regexp +'"}))') if(regexp_result.length == 0){regexp_result = []}else{regexp_result = JSON.parse(regexp_result)} var result = regexp_result.pop() if(typeof(VAR_TV_0) == 'undefined' || !VAR_TV_0){VAR_TV_0 = ""} var result = regexp_result[0] if(typeof(result) == 'undefined' || !result){var result = ""} if(regexp_result.length == 0){var result = VAR_TV_0} return resultЧтобы получить первое вхождение регулярки.
Но если мы используем библиотеку, то в коде нам достаточно только вызвать одну функцию и передать ей регулярку и текст, вот так:
var first = are.first(regexp,content)Эту функцию реально запомнить и просто вызвать.
Да, подавляющее меньшинство функций завязаны на простые функции js и простые api баса, но посмотрите объект als. Это пример моего отношения к простым функциям js - сложный функционал, который писать муторно, я заменил на свой API, а вот простые функции указал в справочнике в примечании, чтобы даже новички могли пользоваться ими, а не моим API, попутно изучая JS.
В общем, вместо страницы кода, используя эту библиотеку, можно получить два-три "абзаца", если можно так выразиться. К этому и стремлюсь - ускорение и упрощение программирования.
На потоки влияет вроде не сильно, пока что это ещё небольшая библиотека. А компилятору всё равно, какие функции вставлять в готовый проект и откуда.
-
@pragmatik
Опытным пользователям этот модуль конечно никчему. А вот новичкам что бы пользоваться блоками - нормально. Но есть проблемы в еффективности. У вас много функций, которые просто внутри себя вызывают ОДНУ другую. Какой смысл этого копипаста кода? Вы в свои визуальные блоки можете вставлять первозданные функции. -
@drprime всё потому, что библиотека изначально разрабатывалась под задачу полного ухода от визуальных блоков (за исключением if-else и некоторых циклов). Можно, конечно, написать визуальные блоки, но лично я предпочитаю делать всё,что только возможно, в коде. Кому интересно - пусть переделывают библиотеку под экшены.
А по поводу вложенных функций - я не думаю, что это сильно нагружает проект, функции простые и выполняют несложные действия. Вложенность у меня тоже небольшая, хотя в блоках encode и decode нужно подключение внешней библиотеки CryptoJs - ещё плюс 48 килобайт кода к каждому потоку (что в общем-то тоже немного). Разве что алгоритмы более сложные, возможно что всякие действия по кодированию-декодированию хорошо загрузят процессор. А у меня особо сложных действий вроде нет.
-
@pragmatik Тут вопрос в другом. А какой тогда смысл человеку запоминать функции Вашего модуля, если можно просто запомнить функции js и bas?
Я беглым взглядом насчитал 20 функций, которые просто копируют другие функции.Но, я понимаю что Вами проделана большая работа.
Дам пару советов по оптимизации кода, это на будущее поможет Вам писать код лучше.- Убрать все eval(). Кокой смысл от них?
- Оптимизировать возврат функции. У вас много ненужных промежуточных переменных.
Например
asf.thread = function(){ var thread_index = thread_number(); return String(thread_index) }Лучше будет так
asf.thread = function(){ return thread_number().toString() }- Убрать непонятные символы в функциях
Например
ahc.getheader = function(header){ _switch_http_client_main() http_client_header('"'+header+'"') }Нужно так
ahc.getheader = function(header){ _switch_http_client_main() http_client_header(header) }Ну и вообще разобраться в построении функций. Читая Ваш код, пришел к выводу что Вы его бездумно копипастили из скрипта
Напримерagf.tmp_asynch = function(string){ _if(true, function(){ _template('"' + string + '"')! VAR_TMP = _spintax(_result()).replace("BASASYNC","\)\!")})! } agf.tmp = function(string){ agf.tmp_asynch(string) var result = VAR_TMP var result = result.slice(1) var result = result.substring(0, result.length - 1) return result }Вот у вас 2 функции.
В первой Вы скопировали в нее ненужный асинхронный _if()!
Во второй Вы вызываете асинхронную функцию неправильно.
То что она работает - случайность.
Хотя 2 этих функции можно заменить однойagf.tmp = function(string){ return _spintax(string) } -
@drprime said in Библиотека Aurora:
Но, я понимаю что Вами проделана большая работа.
Дам пару советов по оптимизации кода, это на будущее поможет Вам писать код лучше.Убрать все eval(). Кокой смысл от них?
Оптимизировать возврат функции. У вас много ненужных промежуточных переменных.
НапримерДа, на счёт оптимизации возвратов я полностью согласен. Где успел, сделал return правильно, но в некоторых копипастил из старого кода, ещё не просматривая.
Со _spintax - просто не знал как это работает, потому заменил на костыль в виде этих двух функций. В следующем релизе сделаю так.
А вот с eval дело другое. Eval у меня только там, где без него не работает, по крайней мере в блоках кода. Хотя, я,если честно, те же самые функции без eval в библиотеке не тестил. В следующем релизе их переберу, если заработает без eval, оптимизирую. -
@drprime said in Библиотека Aurora:
А какой тогда смысл человеку запоминать функции Вашего модуля, если можно просто запомнить функции js и bas?
Кстати, не призываю никого заменять знания js и BAS занием моей библиотеки. Напротив, лучше, если человек уже выучит js и api BASa и после, как и я, задумается об оптимизации кода. На вопрос "зачем" отвечу вашим же примером кода в таком случае:
Чтобы не писать (или не копипастить) код
_switch_http_client_main() http_client_header(header)А быстро ввести то, что запомнить проще:
ahc.getheader(header)Согласитесь, даже agf.tmp() написать быстрее и проще, чем return _spintax(). Несмотря на то, что редактор кода произошёл от IDE-шки, писать длинный код в нём не так удобно, а уж серьёзные большие функции и подавно. Но сам редактор отличный, напрягает только отсутствие тёмного скина.
-
@pragmatik чтобы получить первое вхождение регулярки можно не прибегать к методам древних шаманов а заюзать простой match() с выборкой [0] из результата... нарпимер
var find = "my text for regex".match(/regex/i); alert(find[0]) // выведет "regex"Имхо тоже реально запомнить ну или загуглить если лень запоминать
В целом хз )) Буду наблюдать за развитием, начинание безусловно хорошее :)
-
Самый большой недостаток сторонних библиотек, что их не будет в скомпелированном скрипте. Можно конечно сам код добавлять скрипт. Но не вижу смысла в таких костылях для использования стандартного функционала.
-
Кстати @Pragmatik если ты научиш свою либу хранить кастомные сиппеты и вставлять их нажатием парой кликов это будет просто огонь )) я б только из за этого ее юзал постоянно :D
-
@qwaros said in Библиотека Aurora:
Кстати @Pragmatik если ты научиш свою либу хранить кастомные сиппеты и вставлять их нажатием парой кликов это будет просто огонь )) я б только из за этого ее юзал постоянно :D
Код в редакторе кода пишется вручную, так как у редактора движок от какой-то IDE, похоже на visual studio code или на phpstorm. В эту сторону можно копать, если узнать какой именно движок используется, к нему при любом раскладе можно писать расширения. Но и то это довольно сложно будет. Потому я и делаю вместо сниппетов функции, их можно легко копипастить из справочника.
-
Пример использования библиотеки:
// Читаю из ресурса proxy прокси VAR_PROXY = asf.res("proxy") // Устанавливаю прокси на http-клиент ahc.proxy(VAR_PROXY) // Проверяю, установились ли прокси _switch_http_client_main() http_client_get2("https://2ip.ru/",{method:("GET"),headers:("")})! var content = ahc.content() var regexp = "<big[\\s\\S]+\?>([\\s\\S]+?\)</big>" var check = are.check(regexp,content) if (check){ alg.name('Проверка прокси', 'HTTP-прокси успешно установлен***success') }else{alg.name('Проверка прокси', 'HTTP-прокси не установлен!***error')} -
@usertrue said in Библиотека Aurora:
Самый большой недостаток сторонних библиотек, что их не будет в скомпелированном скрипте. Можно конечно сам код добавлять скрипт. Но не вижу смысла в таких костылях для использования стандартного функционала.
Кстати, есть для этого какое-то решение? Я вот вижу разве что функцию, которая будет записывать все использованные в проекте функции в массив, а потом перед компилляцией по команде весь этот массив сохранять в файл. А потом уже этот код можно добавлять в начало проекта. Надо будет обязательно реализовать, потому как пока что вручную перекидываю из библиотеки в скрипт... Кстати, можно ещё добавлять файлы библиотеки в готовый проект.
-
@pragmatik Дак когда используется библиотека, то в нее не принито лезть. Когда я подключаю моудь например fs в node, томне как правило из его наверное полсиотни функций надо как правило максимум 3.
-
@pragmatik
Можешь убрать все из engine.js
Создать кнопку типа инициализация модуля, которая просто добавит все функции. Написать в мане что для начала работы нцжно инициализировать первым блоком в скрипте.
Но нужно проверить будет ли работать адекватно