@Int64
Я всю дорогу думал, что так обнова медленно качается, впн вроде 500 мбит и летает быстро, не додумался заглянуть под капот.
Посмотрел скрипт, норм 🙂
Простите за нескромный вопрос - но чем это облегчает работу? Как по мне так наоборот усложняет ) Использование аргументов на кирилице ваще нечто )) Эдакие екселевские суперфункции с божественным синтаксисом понятным толкьо избранным. В остальном хз даже, самые примитивные функции 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 функций, которые просто копируют другие функции.
Но, я понимаю что Вами проделана большая работа.
Дам пару советов по оптимизации кода, это на будущее поможет Вам писать код лучше.
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
Создать кнопку типа инициализация модуля, которая просто добавит все функции. Написать в мане что для начала работы нцжно инициализировать первым блоком в скрипте.
Но нужно проверить будет ли работать адекватно