daGrevis Posted August 27, 2012 Report Share Posted August 27, 2012 Šausmas... tad visi mūsdienīgie freimi ir aboslūti stulbi. :( Quote Link to comment Share on other sites More sharing options...
besis Posted August 27, 2012 Report Share Posted August 27, 2012 tie kas izmanto regexp korē, patieshaam ir stulbi Quote Link to comment Share on other sites More sharing options...
daGrevis Posted August 27, 2012 Report Share Posted August 27, 2012 Pamatojums ir, jo regexi ir lēni? Quote Link to comment Share on other sites More sharing options...
besis Posted August 27, 2012 Report Share Posted August 27, 2012 regexp nav vienkaarshi leeni tie ir Uber leeni, praatiigi cilveeki tos izmanto tikai tur kur citu alternatiivu nav. Protams ja izstraadaataajs razho app kuraa darbosies tikai vinja vecmaaminja tad taada pieeja ir pat vairaak kaa OK. Bet ja tas ir nopietns freimworks vai apps tipa facebook tad tas ir nepiedodami. Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted August 27, 2012 Report Share Posted August 27, 2012 Šaubos vai regexp vairākumā gadījumu būs bottleneck. Quote Link to comment Share on other sites More sharing options...
briedis Posted August 27, 2012 Report Share Posted August 27, 2012 pffft, regexps būtu pēdējais, par ko es uztrauktos.. Labāk pastāsti, kā uztaisīt normālu/advancētu routingu bez regexpa....? Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted August 27, 2012 Report Share Posted August 27, 2012 pffft, regexps būtu pēdējais, par ko es uztrauktos.. Labāk pastāsti, kā uztaisīt normālu/advancētu routingu bez regexpa....? Atsevišķi faili ar GET parametriem!!!111one Quote Link to comment Share on other sites More sharing options...
v3rb0 Posted August 27, 2012 Report Share Posted August 27, 2012 (edited) var ar http://www.dangermou.../petrovich.html un lietotājam katras lapas apakšā divas pogas [punish routing] [reward routing] Edited August 27, 2012 by v3rb0 Quote Link to comment Share on other sites More sharing options...
briedis Posted August 27, 2012 Report Share Posted August 27, 2012 Atsevišķi faili ar GET parametriem!!!111one Aw shit, man jātaisa routings kalendāram, kas čeko datumu (YYYY-MM-DD)... Esmu ticis jau līdz 1999. gada aprīlim, vēl bik ir ko rakstīt līdz 2038. :D Quote Link to comment Share on other sites More sharing options...
codez Posted August 27, 2012 Report Share Posted August 27, 2012 regexp bremzi baazt korē ir augstākā mērā stulbi, tas pats attiecas uz explodi(protams daudz mazākā mērā nekā regexp). Ja nav elegantaaku risinājumu, tad labāk ir tā kā jau ir uztaisīts. WTF? Tu vispār sajēdz, ko tu runā? 1 sekundē izgāja: - 1`000`000 reizes - $a=explode('/','asdafd/asdfasdf/asdfasdf/asdfasdf'); - 1`000`000 reizes - 20 pēc kārtas sarakstīti $a=$a+1; - 10`000`000 reizes - tukš for cikls; explode ir aptuveni 20x lēnāks kā $a=$a+1; Quote Link to comment Share on other sites More sharing options...
besis Posted August 27, 2012 Report Share Posted August 27, 2012 "Koda dievs", jociigais cilveek Tu man centiisies ieskaidrot ka mashiinkoda operaacija - integer inkrements ir tikai 20 reizes aatraaks par rindas skaneeshanas un sastaavdalju paarsuutiishanas operaacijaam , dzekinj nokompilee uz c un paskaties kodu, varbuut tad tev naaks sapraats maajaas. Jociigi laiki pienaakushi programmet saakushi visaadi rahiiti, kas c un vai asm nav redzeejushi un priekshstata par to kaa viss laaciitim veederaa notiek nav nekaada. explode ir tuukstoshiem reizhu leenaaka nekaa $a=$a+1 taatad luuk, explode php funkcijas kods: PHP_FUNCTION(explode) { zval **str, **delim, **zlimit = NULL; int limit = -1; int argc = ZEND_NUM_ARGS(); if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &delim, &str, &zlimit) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(str); convert_to_string_ex(delim); if (argc > 2) { convert_to_long_ex(zlimit); limit = Z_LVAL_PP(zlimit); } if (! Z_STRLEN_PP(delim)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter"); RETURN_FALSE; } array_init(return_value); if (! Z_STRLEN_PP(str)) { if (limit >= 0 || argc == 2) { add_next_index_stringl(return_value, "", sizeof("") - 1, 1); } return; } if (limit == 0 || limit == 1) { add_index_stringl(return_value, 0, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1); } else if (limit < 0 && argc == 3) { php_explode_negative_limit(*delim, *str, return_value, limit); } else { php_explode(*delim, *str, return_value, limit); } } PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit) { char *p1, *p2, *endp; endp = Z_STRVAL_P(str) + Z_STRLEN_P(str); p1 = Z_STRVAL_P(str); p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp); if (p2 == NULL) { add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1); } else { do { add_next_index_stringl(return_value, p1, p2 - p1, 1); p1 = p2 + Z_STRLEN_P(delim); } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL && (limit == -1 || --limit > 1)); if (p1 <= endp) add_next_index_stringl(return_value, p1, endp-p1, 1); } } PHPAPI void php_explode_negative_limit(zval *delim, zval *str, zval *return_value, int limit) { #define EXPLODE_ALLOC_STEP 50 char *p1, *p2, *endp; int allocated = EXPLODE_ALLOC_STEP, found = 0, i = 0, to_return = 0; char **positions = safe_emalloc(allocated, sizeof(char *), 0); endp = Z_STRVAL_P(str) + Z_STRLEN_P(str); p1 = Z_STRVAL_P(str); p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp); if (p2 == NULL) { /* do nothing since limit <= -1, thus if only one chunk - 1 + (limit) <= 0 by doing nothing we return empty array */ } else { positions[found++] = p1; do { if (found >= allocated) { allocated = found + EXPLODE_ALLOC_STEP;/* make sure we have enough memory */ positions = erealloc(positions, allocated*sizeof(char *)); } positions[found++] = p1 = p2 + Z_STRLEN_P(delim); } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL); to_return = limit + found; /* limit is at least -1 therefore no need of bounds checking : i will be always less than found */ for (i = 0;i < to_return;i++) { /* this checks also for to_return > 0 */ add_next_index_stringl(return_value, positions, (positions[i+1] - Z_STRLEN_P(delim)) - positions, 1 ); } } efree(positions); #undef EXPLODE_ALLOC_STEP } Un tagad saliidzini visu sho blaakji ar vienu inkrementa operaaciju: a++; Quote Link to comment Share on other sites More sharing options...
codez Posted August 28, 2012 Report Share Posted August 28, 2012 Uztaisi benčmarku un tad posto PHP sourci, es C/C++ un ASM programmēju, kad tu vēl biksiņās čurāji. Varētu padomāt, ka $a++ PHP ir tas pats, kas a++ C. Nu nav tā. Esi padomājis kād memory menidžements stāv aiz PHP mainīgajiem? Tieši šī iemesla dēļ iekš PHP explode ir tikai 20 reizes lēnāks par $a++. Ja $a++ izgāja 1M reizes sekundē, tad a++ iekš C iet ap 100M reizes sekundē. Bet mēs taču šeit runājam par PHP, vai ne? Quote Link to comment Share on other sites More sharing options...
F3llony Posted August 28, 2012 Report Share Posted August 28, 2012 Es laikam esmu brutāls lamers. :) līdz šim eksplodēju request_uri pa segmentiem ar "/" kur [1] - kontrolieris (pēc tam $router[$uri[1]] = $real_controller name routings) [2] - action [3]....- argumenti :) Ja nav 2, metu main, ja nav [1], metu index, ja [1] nav routēs, metu 404. :) Quote Link to comment Share on other sites More sharing options...
besis Posted August 28, 2012 Report Share Posted August 28, 2012 codez, jaa php int tipa mainiigajam $a , $a++ ir tas pats kas ieksh c , a++ benchmarku uztaisiishu protams (un taas nebuus tikai 1M iteraacijas), diemzheel pagaidaam nav laika ar taadiem siikumiem kraameeties, jo ljoti daudz darba. Par biksinjaas churaashanu, protams nolaidi greizi. Domaaju, ka pats veel maates pienu suuci , kad es nesu perfokartes ar ASM kodu uz auseklja ielu, piebilde - IBM PC tad veel nebija, visu dariijaam uz mainfreimiem, diskeshu arii nebija, ievaddati tikai caur perfokarteem, hehe, tas tik bija laiks... Ever wonder how PHP can have so many different data types for its variables? PHP is regarded as a loosely typed language, and variables can change their data type easily. In fact, PHP can have eight different types: integer numbers (stored as longs in c) floating point numbers (stored as doubles in c) strings (stored as a char array in c) Booleans (stored as 0 or 1 as longs in c) Arrays (stored as HashTable struct in c) Objects (stored as zend_object_value in c) Resources (stored as zend_object_value in c) [references functions or external PHP resources] Null (nothing is stored, only type is set to null type) Quote Link to comment Share on other sites More sharing options...
codez Posted August 28, 2012 Report Share Posted August 28, 2012 (edited) codez, jaa php int tipa mainiigajam $a , $a++ ir tas pats kas ieksh c , a++ Palasi, kas ir byte kods. Iekš C a++, atkarībā no citiem apstākļiem, būs 1-3 procesora instrukcijas. (Instrukciju optimizācija, ja notiek cikliskas darbības un mainīgo var paturēt procesora reģistrā) Iekš PHP: 1)fonā darbosies byte koda izpildes VM, kura ies uz priekšu pa bytecodu 2)pārbaudīs mainīgā tipu, lai zinātu, ko ar to darīt un VM ies uz noteikto vietu izpildei. 3)nolasīs datus no atmiņas, apstrādās un iebāzīs atpakaļ (nekāda procesora instrukciju līmeņa optimizācija te nebūs). Tieši tāpēc $a++ iekš PHP ir x100 lēnāks kā a++ iekš C; P.S. Atšķirīgi ir piemēram JAVA un nodejs, kurām ir JIT kompilātori, kas tiešām kompilē mašīnkodu. V8 js dzinējam, ko izmanto nodejs pat JIT kompilātors ir tik advancēts, ka mainīgie ir reālas atmiņas adreses un var tikt kods optimizēts instrukciju līmenī tā, ka tiešām C a++ ir tuvu tas pats, kas js a++. Edited August 29, 2012 by codez Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.