Даже в определениях идиотизма встречается идиотизм.
Цитата:
Идиотизм — устаревшее название идиомы
Идиома в программировании — понятие близкое к понятию шаблона проектирования. Идиомы представляют собой шаблоны проектирования, учитывающие специфику конкретного языка программирования и потому не универсальные. Это хорошие решения проектирования для конкретного языка или программной платформы.
Идиома в программировании — понятие близкое к понятию шаблона проектирования. Идиомы представляют собой шаблоны проектирования, учитывающие специфику конкретного языка программирования и потому не универсальные. Это хорошие решения проектирования для конкретного языка или программной платформы.
Тяжёлые алгоритмы на стероидах (MD5, Base64, CRC32, JPEG, PNG)
Запись от BlooDHounD размещена 11.06.2010 в 19:51
Обновил(-а) BlooDHounD 11.04.2016 в 22:18 (поменял вложения)
Обновил(-а) BlooDHounD 11.04.2016 в 22:18 (поменял вложения)
Реализовал парочку алгоритмов на замену аналогам из as3corelib:
- MD5
- Base64
- JPEG
- PNG
Код:
by.blooddy.crypto.MD5.hashBytes: 40 com.adobe.crypto.MD5.hashBytes: 4483 by.blooddy.crypto.Base64.encode: 115 mx.utils.Base64Encoder: 1635 by.blooddy.crypto.Base64.decode: 141 mx.utils.Base64Decoder: 2762 by.blooddy.crypto.image.JPEGEncoder.encode: 447 com.adobe.images.JPGEncoder: 3496 by.blooddy.crypto.image.PNG24Encoder.encode: 538 com.adobe.images.PNGEncoder.encode: 1423
package { import by.blooddy.crypto.Base64; import by.blooddy.crypto.MD5; import by.blooddy.crypto.image.JPEGEncoder; import by.blooddy.crypto.image.PNG24Encoder; import com.adobe.crypto.MD5; import com.adobe.images.JPGEncoder; import com.adobe.images.PNGEncoder; import flash.display.BitmapData; import flash.display.Sprite; import flash.text.TextField; import flash.utils.ByteArray; import flash.utils.getTimer; import mx.utils.Base64Decoder; import mx.utils.Base64Encoder; [SWF( scriptTimeLimit="255" )] public class test extends Sprite { /** * Constructor */ public function test() { super(); var text:String = ''; var t:Number; // BitmapData для тестов var bmp:BitmapData = new BitmapData( 1024, 1024, true, 0xFFFF0000 ); bmp.noise( int( Math.random() * int.MAX_VALUE ), 0, 0xFF, 7, false ); // генерируем шум // ByteArray для тестов var bytes:ByteArray = bmp.getPixels( bmp.rect ); // тест MD5 t = getTimer(); by.blooddy.crypto.MD5.hashBytes( bytes ); text += '\nby.blooddy.crypto.MD5.hashBytes: ' + ( getTimer() - t ); // 40 t = getTimer(); com.adobe.crypto.MD5.hashBytes( bytes ); text += '\ncom.adobe.crypto.MD5.hashBytes: ' + ( getTimer() - t ); // 4483 // тест Base64 encode t = getTimer(); var s1:String = by.blooddy.crypto.Base64.encode( bytes, true ); text += '\nby.blooddy.crypto.Base64.encode: ' + ( getTimer() - t ); // 115 t = getTimer(); var e:Base64Encoder = new Base64Encoder(); e.encodeBytes( bytes ); var s2:String = e.flush(); text += '\nmx.utils.Base64Encoder: ' + ( getTimer() - t ); // 1635 // тест Base64 decode t = getTimer(); by.blooddy.crypto.Base64.decode( s1 ); text += '\nby.blooddy.crypto.Base64.decode: ' + ( getTimer() - t ); // 141 t = getTimer(); var d:Base64Decoder = new Base64Decoder(); d.decode( s2 ); d.flush(); text += '\nmx.utils.Base64Decoder: ' + ( getTimer() - t ); // 2762 // тест JPEG t = getTimer(); by.blooddy.crypto.image.JPEGEncoder.encode( bmp, 60 ); text += '\nby.blooddy.crypto.image.JPEGEncoder.encode: ' + ( getTimer() - t ); // 447 t = getTimer(); ( new com.adobe.images.JPGEncoder( 60 ) ).encode( bmp ); text += '\ncom.adobe.images.JPGEncoder: ' + ( getTimer() - t ); // 3496 // тест PNG t = getTimer(); by.blooddy.crypto.image.PNG24Encoder.encode( bmp ); text += '\nby.blooddy.crypto.image.PNG24Encoder.encode: ' + ( getTimer() - t ); // 538 t = getTimer(); com.adobe.images.PNGEncoder.encode( bmp ); text += '\ncom.adobe.images.PNGEncoder.encode: ' + ( getTimer() - t ); // 1423 var tf:TextField = new TextField(); tf.autoSize = 'left'; tf.text = text; super.addChild( tf ); } } }
- всё это дело написано при помощи haXe, после чего пропущено через mxmlc, что бы убрать мусор, которым haXe всё засоряет
- все классы на полную катушку используют скрытые операторы для работы с памятью
- JPEGEncoder кэширует все промежуточные таблицы. то есть начиная со второй картинки алгоритм работает чуточку быстрее.
---------------
Всего комментариев 63
Комментарии
01.09.2010 19:50 | |
велкам. кстати почти прикрутил gif. надо только дошлифовать
|
02.09.2010 01:19 | |
Может и H.264 сделаешь? С разделением расчёта по тикам плеера? Ну или что-нибудь посвободнее. Тут правда еще и декодер нужен для приёма..
|
02.09.2010 03:39 | |
нафига? %) чисто по фану? я конечно люблю извращения, но это уж слишком )
|
03.09.2010 22:34 | |
Ну пожалууууйста )
|
27.11.2010 16:19 | |
Какая-то нереальная вещь Очень круто!
|
05.02.2011 12:00 | |
BlooDHounD, спасибо, буду ждать.
|
07.04.2011 15:47 | |
Нубский вопрос: все методы и свойства аналогичны as3corelib (я про синтаксис)? Конкретно интересует JSON
|
|
Обновил(-а) justin_g 07.04.2011 в 15:57
|
07.04.2011 17:52 | |
понятия не имею.
|
07.04.2011 22:12 | |
justin_g, если имеется ввиду com.serialization, то нет.
|
Последние записи от BlooDHounD
- Обновление blooddy_crypto.swc до версии 0.5.1 (31.03.2016)
- Кто не успел - тот опоздал (19.04.2011)
- Обновление blooddy_crypto.swc до версии 0.3.1 (29.11.2010)
- blooddy_crypto.swc теперь умеет JSON (13.10.2010)
- Загадочный CommaExpression (06.09.2010)