Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lexer #34

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

Lexer #34

wants to merge 3 commits into from

Conversation

survived
Copy link

Изменён принцип, по которому метод SafeMySQL::prepareQuery находил плейсхолдеры. Ранее он разбивал "сырую" строку на подстроки с помощью регулярных выражений, теперь проходит циклом по всей строке (кроме последнего символа, но это тонкости реализации), что даёт бОльшую производительность, нежели преждний алгоритм. (возможно, я просто помешан на производительности, а на самом деле выигрыш во времени будет не существенен..)

@colshrapnel
Copy link
Owner

Честно говоря, я решил замерить обе варианта на простом коде, который приведён ниже.
И в вашем варианте у меня получилось в два раза дольше - 0,24 сек против 0,122...

$st = microtime(1);
for ($i=1; $i<10000; $i++)
{
    $db->parse("SELECT * FROM table WHERE id=?i AND name=?s AND surname=?s",12324,'John','Doe');
}
echo round(microtime(1)-$st,4);

@survived
Copy link
Author

survived commented Oct 2, 2015

Это было действительно неожиданно. Уж не думал, что столь незамысловатый и простой подход даст настолько меньше производительности, нежели от него ожидалось. Не так много пишу на php, не имел такой практики. Чтож, чтобы повысить производительность, нужно отдать бОльшую часть работы встроенным функциям, которые хорошо оптимизированы разработчиками и реализованы на си, что я и сделал. С последним коммитом код работает чуть быстрее Вашей реализации, но алгоритм может быть менее понятен (но мне, например, всё понятно :D).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants