противники могут писать что угодно, но людям это нужно. gzip это хорошо, но можно сделать еще лучше.
писать хорошие темплаты - не вариант. а уж сколько лишних комментариев обычно в этих темплатах.
dma84, нет, tidy слишком тормозит и не сжимает.
я бы тоже с удовольствием бы поимел расширение php на C в виде конечного автомата, но чтото не нашлось.
пока использую такое :
global $ascript, $atext, $apre; // definition of callback functions function cb_script($matches) { global $ascript; $i = count($ascript) + 1; $h = md5($matches[0]); $ascript[$i][0] = $matches[0]; $ascript[$i][1] = $h; return $h; } function cb_text($matches) { global $atext; $i = count($atext) + 1; $h = md5($matches[0]); $atext[$i][0] = $matches[0]; $atext[$i][1] = $h; return $h; } function cb_pre($matches) { global $apre; $i = count($apre) + 1; $h = md5($matches[0]); $apre[$i][0] = $matches[0]; $apre[$i][1] = $h; return $h; } // init some variables/arrays $page_byte = strlen($output); $ascript = array(); $atext = array(); $apre = array(); // cut from output, and store away for later re-inclusion, everything between <textarea> and <pre> tags // (we do not want to touch those blocks as they may contain wanted whitespace) $output=preg_replace_callback('/<textarea.*?[^\btextarea>\b]*?textarea>/si', "cb_text", $output); $output=preg_replace_callback('/<pre.*?[^\bpre>\b]*?pre>/si', "cb_pre", $output); // also cut and save <nocompress> tagged text (intentional excluded parts) $output=preg_replace_callback('/<nocompress.*?[^\bnocompress>\b]*?nocompress>/si', "cb_text", $output); // strip all whitespace at the beginning of every new line (but leave the linebreak intact) $output=preg_replace('/(\r)?\n(\s*)/', "\n", $output); // cut from output, and store away for later re-inclusion, everthing between <script> tags // (we don't want to strip the linebreaks from script code since that would render the scripts non working) $output=preg_replace_callback('/<script.*?[^\bscript>\b]*?script>/si', "cb_script", $output); // strip all linebreaks and HTML-Comments from the output // (since we first strip all linebreaks, even multi-line comments will get striped this way! :-)) $output = str_replace("\n" ," " ,$output ); $output = preg_replace('/\/\*.*?[^\b\*\/\b]*?.*?\*\//',"" , $output); $output = preg_replace('/<!--[^\{\[\]*?[^b<!--\b]*?[^\b-->\b]*?-->/i', "", $output); // We exclude HTML comments containing "{" and "[" // this way CSS definitions and AnyMedia stuff won't get striped // re-insert everything we saved before foreach ( $ascript as $block) { $output = str_replace( $block[1] , $block[0] , $output ); } foreach ( $atext as $block) { $output = str_replace( $block[1] , $block[0] , $output ); } foreach ( $apre as $block) { $output = str_replace( $block[1] , $block[0] , $output ); } // last not least: strip any remaining multiple spaces between tags... $output = preg_replace('/>[\s]+</', "> <" ,$output ); //$output=preg_replace('/<!--([^\r\n].+)?-->/', '', $output); // ...and also strip the <nocompress> tags for keeping any XHTML compliance $output = str_replace("<nocompress>" ,"" ,$output ); $output = str_replace("</nocompress>" ,"" ,$output );
Может бы это и не работает, тк я вырезал код из продукта hellcat realtime page compressor для vbulletin не полностью. На некоторых страничках этот код вообще может зациклиться насовсем и я это наблюдал. С другой стороны продукт используют многие и это не совсем уж на коленке сделано. Как видно из кода, глючащие порции нужно заключать в нестандартный тег <nocompress>.
Если кто-то видел обычную программу на С - я бы с удовольствием попытался бы сделать из нее расширение для php на благо опенсорца.
так таблиц или баз? все вышеприведенные рассуждения относятся к таблицам. если у вас в одной базе просто свалены таблицы с разным префиксами, то тут уже не так важно как хранить.
В общем случае кеш mysql лучше работает когда много маленьких баз, потому что достаточно обновить одну запись и из кеша вычищаются все запросы с данными из этой таблицы. Опять же параллизм выше даже если использовать myisam.
Другое дело что работать с кучей таблиц неудобно. Допустим вы захотите какую-нибудь глобальную статистику по всем сайтам рассчитать.
ну значит вам это и не грозит.
Можно поставить socks-прокси на компьютер и использовать обертку freecap для запуска некоторых программ. Остальные пойдут обычным путем.
Если прога постоянно работает с ограниченным числом хостов или сетей и остальные программы с ним не работают - можно прописать туда роутинг и будет выбираться нужный ip.
Какой вы все-таки упорный. Прошлый раз доказывали, что ваш мегаскрипт не имеет отношения к openx при очевидных родственных признаках ( /ru/forum/281653) , а теперь думаете, что вам поверят про два года безупречной работы ?
Кстати, какой скрипт зазендили на этот раз? Может, как обычно, исходный скрипт даже лучше и на него стоит обратить внимание ?
Ну если уж на то пошло, то и правило должно реально работать : то есть по команде iptables -nvL -t nat должно быть видно что пакеты идут и счетчики увеличиваются. А то ведь можно других правил намутить (что в принципе было бы так же интересно увидеть)
Andreyka, ну, Андрей, ну сколько можно? Платить деньги чтобы доказать себе, что вы выдумали очередную хабрадурь - на это никто не пойдет.
Это просто новое слово в netfilter, когда третий пакет с данными проходит через PREROUTING.
Пакет проходит там один раз и только первый. Дальше уже невозможно сменить адрес назначения DNAT или привязку на порт -j REDIRECT. Это противоречит всем концепциям работы netfilter.
Если вы знаете какой-то секрет, просто скажите. Делать тут ничего не надо - все люди подкованные и уж c iptables разберутся. Никакой коммерческой тайны тут и не видно.
Andreyka, эта строка не может работать ни при каких правилах. Если работает - настройте виртуальную машинку и выложите образ, а мы разберемся почему оно работает. Времени это займет немного.
Конечно понятно, что вы можете решить проблему по-другому, например правилами squid или nginx, но сам по себе факт публикации непроверенной информации огорчает. Да и весьма заманчиво было бы отбрасывать пакеты на уровне ядра.
ok. ну тогда он использовал это в INPUT или FORWARD, где проходит каждый пакет.
В любом случае, раз ни при каких условиях последующие пакеты соединения не попадают в цепочку PREROUTING, это решение не может работать вообще никак.