HTML5¼¼Êõ

¡¾Ì½Ë÷¡¿ÔÚ JavaScript ÖÐʹÓà C ³ÌÐò - EtherDream

×ÖºÅ+ ×÷ÕߣºH5Ö®¼Ò À´Ô´£ºH5Ö®¼Ò 2016-01-25 11:03 ÎÒÒªÆÀÂÛ( )

JavaScript ÊǸöÁé»îµÄ½Å±¾ÓïÑÔ£¬ÄÜ·½±ãµÄ´¦ÀíÒµÎñÂß¼­¡£µ±ÐèÒª´«ÊäͨÐÅʱ£¬ÎÒÃÇ´ó¶àÑ¡Ôñ JSON »ò XML ¸ñʽ¡£ µ«ÔÚÊý¾Ý³¤¶È·Ç³£¿Á¿ÌµÄÇé¿öÏ£¬Îı¾Ð­ÒéµÄЧÂʾͷdz£µÍÁË£¬Õâʱ²»µÃ²»Ê¹Óöþ½øÖƸñʽ¡£ È¥ÄêµÄ½ñÌ죬ÔÚÕÛÌÚÒ»¸ö Ç°ºó¶Ë½áºÏµÄ WAF ʱ£¬¾ÍÓöµ½ÁË

JavaScript ÊǸöÁé»îµÄ½Å±¾ÓïÑÔ£¬ÄÜ·½±ãµÄ´¦ÀíÒµÎñÂß¼­¡£µ±ÐèÒª´«ÊäͨÐÅʱ£¬ÎÒÃÇ´ó¶àÑ¡Ôñ JSON »ò XML ¸ñʽ¡£

µ«ÔÚÊý¾Ý³¤¶È·Ç³£¿Á¿ÌµÄÇé¿öÏ£¬Îı¾Ð­ÒéµÄЧÂʾͷdz£µÍÁË£¬Õâʱ²»µÃ²»Ê¹Óöþ½øÖƸñʽ¡£

È¥ÄêµÄ½ñÌ죬ÔÚÕÛÌÚÒ»¸ö Ç°ºó¶Ë½áºÏµÄ WAF ʱ£¬¾ÍÓöµ½ÁËÕâ¸öÂé·³¡£

ÒòΪǰ¶Ë½Å±¾ÐèÒª²É¼¯²»ÉÙÊý¾Ý£¬¶ø×îÖÕÊÇÒþдÔÚij¸ö cookie ÀïµÄ£¬Òò´Ë¿ÉÓõij¤¶È·Ç³£ÓÐÏÞ£¬Ö»Óм¸Ê®¸ö×Ö½Ú¡£

Èç¹û²»¼Ù˼Ë÷¾ÍÓà JSON µÄ»°£¬¹âÒ»¸ö±ê¼Ç×ֶΠ{"enableXX": true} ¾ÍռȥÁËÒ»°ë³¤¶È¡£È»¶øÔÚ¶þ½øÖÆÀ±ê¼Ç true »ò false ²»¹ýÊÇ 1 ¸ö±ÈÌصÄÊ£¬¿ÉÒÔ½ÚÊ¡ÉÏ°Ù±¶µÄ¿Õ¼ä¡£

ͬʱ£¬Êý¾Ý»¹Òª¾­¹ýУÑé¡¢¼ÓÃܵȻ·½Ú£¬Ö»ÓÐʹÓöþ½øÖƸñʽ£¬²ÅÄÜ·½±ãµÄµ÷ÓÃÕâЩËã·¨¡£

ÓÅÑÅʵÏÖ

²»¹ý£¬JavaScript ²¢²»Ö§³Ö¶þ½øÖÆ¡£

ÕâÀïµÄ¡¸²»Ö§³Ö¡¹²»ÊÇ˵¡¸ÎÞ·¨ÊµÏÖ¡¹£¬¶øÊÇÎÞ·¨¡¸ÓÅÑÅʵÏÖ¡¹¡£ÓïÑԵķ¢Ã÷£¬¾ÍÊÇÓÃÀ´ÓÅÑŽâ¾öÎÊÌâµÄ¡£¼´Ê¹Ã»ÓÐÓïÑÔ£¬ÈËÀàÒ²¿ÉÒÔÓûúÆ÷Ö¸ÁîÀ´±àд³ÌÐò¡£

Èç¹û·ÇÒªÓà JavaScript ²Ù×÷¶þ½øÖÆ£¬×îÖÕ¾ÍÀàËÆÕâÑù£º

var flags = +enableXX1 << 16 | +enableXX2 << 15 | ...

ËäÈ»ÄÜʵÏÖ£¬µ«ºÜ³óª¡£¸÷ÖÖÓ²±àÂë¡¢¸÷ÖÖλÔËËã¡£

È»¶ø£¬¶ÔÓÚÏÈÌìÖ§³Ö¶þ½øÖƵÄÓïÑÔ£¬¿´ÆðÀ´¾ÍÊ®·ÖÓÅÑÅ£º

union { struct { int enableXX1: 1; int enableXX2: 1; ... }; int16_t value; } flags; flags.enableXX1 = enableXX1; flags.enableXX2 = enableXX2;

¿ª·¢ÕßÖ»Ð趨ÒåÒ»¸öÃèÊö¼´¿É¡£Ê¹ÓÃʱ£¬×Ö¶ÎÆ«ÒƶàÉÙ¡¢ÈçºÎ¶Áд£¬ÕâЩϸ½ÚÍêÈ«²»ÓùØÐÄ¡£

ΪÁËÄÜ´ïµ½ÀàËÆЧ¹û£¬ÆðÏÈ·â×°ÁËÒ»¸ö JS °æµÄ½á¹¹Ì壺

// ×î³õ·½°¸£º·â×°Ò»¸ö JS ½á¹¹Ìå var s = new Struct([ {name: 'month', bit: 4, signed: false}, ... ]); s.set('month', 12); s.get('month');

½«Ï¸½Ú½øÐÐÁËÒþ²Ø£¬¿´ÆðÀ´¾ÍÓÅÑŶàÁË¡£

ÓÅÑŵ«²»ÍêÃÀ

µ«ÊÇ£¬Õâ×ܸоõ²»ÊÇ×îÍêÃÀµÄ¡£½á¹¹ÌåÕâÖÖ¶«Î÷£¬±¾¸ÃÓÉÓïÑÔÌṩ£¬Èç½ñÈ´ÒªÓöîÍâµÄ´úÂëʵÏÖ£¬¶øÇÒ»¹ÊÇÔÚÔËÐÐÆڼ䡣

ÁíÍ⣬ºó¶Ë½âÂëÊÇÓà C ʵÏֵģ¬ËùÒÔµÃά»¤Á½Ì×´úÂë¡£Ò»µ©Êý¾Ý½á¹¹»òÕßËã·¨±äÁË£¬µÃͬʱ¸üРJS ºÍ C£¬ºÜÂé·³¡£

ÓÚÊÇ×ÁÄ¥£¬ÄÜ·ñ¹²ÓÃÒ»Ì× C ´úÂ룬ͬʱÓÃÓÚÇ°¶ËºÍºó¶Ë£¿

Ò²¾ÍÊÇ˵£¬ÐèÒªÄܽ« C ±àÒë³É JS À´ÔËÐС£

ÈÏʶ emscripten

Äܽ« C ±àÒë³É JS µÄ¹¤¾ßÓв»ÉÙ£¬×îרҵµÄÒªÊý emscripten¡£

emscripten µÄʹÓ÷½Ê½ºÜ¼òµ¥£¬ºÍ´«Í³ C ±àÒëÆ÷²î²»¶à£¬Ö»²»¹ýÉú³ÉµÄÊÇ JS ´úÂë¡£

./emcc hello.c -o hello.html main() { time_t now; time(&now); printf("Hello World: %s", ctime(&now)); return 0; }

±àÒëÖ®ºó¼´¿ÉÔËÐУº

ºÜÓÐȤ°É~ ´ó¼Ò¿ÉÒÔ³¢ÊÔÏ£¬ÕâÀï¾Í²»¶à½éÉÜÁË¡£

ʵÓÃȱÏÝ

È»¶øÎÒÃǹØÐĵIJ»ÊÇÓÐȤ£¬¶øÊÇʵÓá£

ÊÂʵÉÏ£¬¼´Ê¹Ò»¸ö Hello World ±àÒë³öÀ´µÄ JS Ò²¹ýÍòÐУ¬¶à´ïÊý°Ù KB¡£¾ÍËãѹËõÔÙ GZIP£¬ÈÔÓм¸Ê® KB¡£

ͬʱ emscripten ʹÓÃÁË asm.js ¹æ·¶£¬ÄÚ´æ·ÃÎÊÊÇͨ¹ý ʵÏֵġ£

ÕâÒâζ×Å IE10 ÒÔϵÄÓû§¶¼ÎÞ·¨ÔËÐС£ÕâÒ²ÊDz»¿É½ÓÊܵġ£

Òò´Ë£¬ÎÒÃǵÃ×öÈçϸĽø£º

  • ¼õÉÙÌå»ý

  • Ôö¼Ó¼æÈÝ

  • Ê×ÏȼÄÍÐ emscripten ±¾Éí£¬¿´¿´Äܲ»ÄÜͨ¹ýÉèÖòÎÊý£¬À´´ïµ½ÎÒÃǵÄÄ¿µÄ¡£

    ²»¹ýÒ»·¬³¢ÊÔÖ®ºó£¬²¢Ã»Óгɹ¦¡£ÄÇÖ»ÄÜ×Ô¼º¶¯ÊÖʵÏÖÁË¡£

    ¼õÉÙÌå»ý

    Ϊʲô×îÖսű¾»áÄÇô´ó£¬ÀïÃ涼·ÅÁËЩʲô£¿·ÖÎöÁËÏÂÄÚÈÝ£¬´óÖÂÓÐÕ⼸¸ö²¿·Ö£º

    ¸¨Öú¹¦ÄÜ

    ±ÈÈç×Ö·û´®ºÍ¶þ½øÖÆת»»¡¢Ìṩ»Øµ÷°ü×°µÈ¡£ÕâЩ»ù±¾¶¼ÊÇÓò»×ŵģ¬ÎÒÃÇ¿ÉÒÔ¸ø×Ô¼ºÐ´¸öÌØÊâµÄ»Øµ÷º¯Êý¡£

    ½Ó¿ÚÄ£Äâ

    ÌṩÎļþ¡¢Öնˡ¢ÍøÂç¡¢äÖȾµÈ½Ó¿Ú¡£Ö®Ç°¼û¹ýÓà emscripten ÒÆÖ²µÄ¿Í»§¶ËÓÎÏ·£¬¿´À´Ä£ÄâÁ˲»ÉÙ½Ó¿Ú¡£

    ³õʼ»¯²Ù×÷

    È«¾ÖÄÚ´æ¡¢ÔËÐÐʱ¡¢¸÷ÖÖÄ£¿éµÄ³õʼ»¯¡£

    ÔËÐÐʱº¯Êý

    ´¿´âµÄ C Ö»ÄÜ×ö¼òµ¥µÄ¼ÆË㣬ºÜ¶à¹¦Äܶ¼ÒÀ¿¿ÔËÐÐʱº¯Êý¡£

    ²»¹ý£¬ÓÐЩ³£Óõĺ¯Êý£¬Æä±³ºóµÄʵÏÖÊǼ°Æ临Ôӵġ£ÀýÈç malloc ºÍ free£¬¶ÔÓ¦µÄ JS Óнü 2000 ÐУ¡

    ³ÌÐòÂß¼­

    Õâ²ÅÊÇ C ³ÌÐòÕæÕý¶ÔÓ¦µÄ JS ´úÂë¡£ÒòΪ±àÒëʱ¾­¹ý LLVM µÄÓÅ»¯£¬Âß¼­¿ÉÄܱäµÃÃæÄ¿È«·ÇÁË¡£

    Õⲿ·Ö´úÂëÁ¿²»´ó£¬ÊÇÎÒÃÇÕæÕýÏëÒªµÄ¡£

    ÊÂʵÉÏ£¬Èç¹û³ÌÐòûÓÐÓõ½Ò»Ð©ÌØÊ⹦ÄܵĻ°£¬°ÑÂß¼­º¯Êýµ¥¶À¿Ù³öÀ´£¬ÈÔÈ»ÊÇ¿ÉÒÔÔËÐеģ¡

    ¿¼Âǵ½ÎÒÃÇµÄ C ³ÌÐò·Ç³£¼òµ¥£¬ËùÒÔ¼òµ¥´Ö±©µÄÌáÈ¡³öÀ´£¬Ò²ÊÇûÎÊÌâµÄ¡£

    C ³ÌÐò¶ÔÓ¦µÄ JS Âß¼­Î»ÓÚ // EMSCRIPTEN_START_FUNCS ºÍ // EMSCRIPTEN_END_FUNCS Ö®¼ä¡£¹ýÂ˵ôÔËÐÐʱº¯Êý£¬Ê£ÏµľÍÊÇ 100% µÄÂß¼­´úÂëÁË¡£

    Ôö¼Ó¼æÈÝ

    ½Ó׎â¾öÄÚ´æ·ÃÎʵļæÈÝÐÔÎÊÌâ¡£

    Ê×ÏÈÁ˽âÏ£¬ÎªºÎÒªÓà TypedArray¡£

    emscripten ÉêÇëÁËÒ»´ó¿é ArrayBuffer À´Ä£ÄâÄڴ棬Ȼºó¹ØÁªÁËһЩ HEAP ¿ªÍ·µÄ±äÁ¿¡£

    ÕâЩ²»Í¬ÀàÐ굀 HEAP ¹²Ïíͬһ¿éÄڴ棬ÕâÑù¾ÍÄܸßЧµÄÖ¸Õë²Ù×÷¡£

    È»¶ø²»Ö§³Ö TypedArray µÄä¯ÀÀÆ÷£¬ÏÔÈ»ÎÞ·¨ÔËÐС£ËùÒÔµÃÌṩ¸ö polyfill ¼æÈÝÏ¡£

    µ«¾­·ÖÎö£¬Õ⼸ºõ²»¿ÉÄÜʵÏÖ ¡ª¡ª ÒòΪ TypedArray ºÍÊý×éÒ»Ñù£¬ÊÇͨ¹ýË÷ÒýÀ´·ÃÎʵģº

    (100); buf[(buf[0]); // get

    È»¶ø [] ²Ù×÷·ûÔÚ JS ÀïÊÇÎÞ·¨ÖØдµÄ£¬Òò´ËÄÑÒÔ½«Æä±ä³É setter ºÍ getter¡£¿öÇÒ²»Ö§³Ö TypedArray µÄ¶¼ÊǵͰ汾 IE£¬¸ü²»Óÿ¼ÂÇ ES6 µÄÄÇЩÌØÕ÷¡£

    ÓÚÊÇ×ÁÄ¥ IE µÄ˽Óнӿڡ£±ÈÈçÓà onpropertychange ʼþÀ´Ä£Äâ setter¡£²»¹ýÕâÑù×öЧÂʼ«µÍ£¬¶øÇÒ getter ÈÔ²»Ò×ʵÏÖ¡£

    ¾­¹ýÒ»·¬¿¼ÂÇ£¬¾ö¶¨²»Óù³×ӵķ½Ê½£¬¶øÊÇÖ±½Ó´ÓÔ´Í·ÉϽâ¾ö ¡ª¡ª ÐÞ¸ÄÓï·¨£¡

    ÎÒÃÇÓÃÕýÔò£¬ÕÒ³öÔ´ÂëÖеĸ³Öµ²Ù×÷:

    HEAP[index] = val;

    Ìæ»»³É:

    HEAP_SET(index, val);

    ÀàËƵģ¬½«¶ÁÈ¡²Ù×÷:

    HEAP[index]

    Ìæ»»³É:

    HEAP_GET(index)

    ÕâÑù£¬Ô­ÏȵÄË÷Òý²Ù×÷£¬¾Í±ä³Éº¯Êýµ÷ÓÃÁË¡£ÎÒÃǾÍÄܽӹÜÄÚ´æµÄ¶Áд£¬²¢ÇÒûÓÐÈκμæÈÝÐÔÎÊÌ⣡

    È»ºóʵÏÖ 8¡¢16¡¢32 λÓÐÎÞ·ûºÅµÄ°æ±¾¡£Í¨¹ý JS µÄ Array À´Ä£Ä⣬·Ç³£¼òµ¥¡£

    Âé·³µÄÊÇÄ£Äâ Float32 ºÍ Float64 Á½¸öÀàÐÍ¡£²»¹ý±¾´Î C ³ÌÐòÖв¢Î´Óõ½¸¡µã£¬ËùÒÔ¾ÍÔݲ»ÊµÏÖÁË¡£

    µ½´Ë£¬¼æÈÝÐÔÎÊÌâ¾Í½â¾öÁË¡£

    ´ó¹¦¸æ³É

    ½â¾öÁËÕâЩȱÏÝ£¬ÎÒÃǾͿÉÒÔÓä¿ìµÄÔÚ JS ÖÐʹÓà C Âß¼­ÁË¡£

    ×÷Ϊ½Å±¾£¬Ö»Ðè¹ØÐIJɼ¯ÄÄЩÊý¾Ý¡£ÕâÑù JS ´úÂë¾Í·Ç³£µÄÓÅÑÅ£º

    Êý¾ÝµÄ´¢´æ¡¢¼ÓÃÜ¡¢±àÂ룬ÕâЩµ×²ãÊý¾Ý²Ù×÷£¬Ôòͨ¹ý C ʵÏÖ¡£

    ±àÒëʱʹÓà -Os ²ÎÊýÓÅ»¯Ìå»ý¡£×îÖÕµÄ JS »ìÏýѹËõÖ®ºó£¬»¹²»µ½ 2 KB£¬Ê®·ÖСÇɾ«Á¶¡£

    ¸üÍêÃÀµÄÊÇ£¬ÎÒÃÇÖ»Ðèά»¤Ò»·Ý´úÂ룬¼´¿Éͬʱ±àÒë³öÇ°¶ËºÍºó¶ËÁ½¸ö°æ±¾¡£

    ÓÚÊÇ£¬Õâ¸ö¡¸Ç°ºó¶Ë WAF¡¹¿ª·¢¾ÍÈÝÒ׶àÁË¡£

    ËùÓеÄÊý¾Ý½á¹¹ºÍËã·¨£¬¶¼ÓÉ C ʵÏÖ¡£Ç°¶Ë±àÒë³É JS ´úÂ룬ºó¶Ë±àÒë³É lua Ä£¿é£¬¹© nginx-lua ʹÓá£

    Ç°ºó¶ËµÄ½Å±¾£¬¶¼Ö»Ðè¹Ø×¢ÒµÎñ¹¦Äܼ´¿É£¬ÍêÈ«²»ÓÃÉæ¼°Êý¾Ý²ãÃæµÄϸ½Ú¡£

    ²âÊÔ°æ

    ÊÂʵÉÏ£¬»¹ÓеÚÈý¸ö°æ±¾ ¡ª¡ª ±¾µØ°æ¡£

    ÒòΪËùÓÐµÄ C ´úÂ붼ÔÚÒ»Æð£¬Òò´Ë¿ÉÒÔ·½±ãµÄ±àд²âÊÔ³ÌÐò¡£

    ÕâÑù¾ÍÎÞÐèÆô¶¯ WebServer¡¢´ò¿ªä¯ÀÀÆ÷À´²âÊÔÁË¡£Ö»ÐèÄ£ÄâһЩÊý¾Ý£¬Ö±½ÓÔËÐгÌÐò¼´¿É²âÊÔ£¬·Ç³£ÇáÁ¿¡£

    ͬʱ½èÖú IDE£¬µ÷ÊÔÆðÀ´¸üÈÝÒס£

    С½á

    ÿһÃÅÓïÑÔ¶¼Óи÷×ÔµÄÓÅȱµã¡£½«²»Í¬ÓïÑÔµÄÓÅÊÆÏ໥½áºÏ£¬¿ÉÒÔ³ÌÐò±äµÃ¸üÓÅÑÅ¡¢¸üÍêÃÀ¡£

    ¡¡

    1.±¾Õ¾×ñÑ­ÐÐÒµ¹æ·¶£¬ÈκÎתÔصĸå¼þ¶¼»áÃ÷È·±ê×¢×÷ÕߺÍÀ´Ô´£»2.±¾Õ¾µÄÔ­´´ÎÄÕ£¬ÇëתÔØʱÎñ±Ø×¢Ã÷ÎÄÕÂ×÷ÕߺÍÀ´Ô´£¬²»×ðÖØÔ­´´µÄÐÐΪÎÒÃǽ«×·¾¿ÔðÈΣ»3.×÷ÕßͶ¸å¿ÉÄܻᾭÎÒÃDZ༭Ð޸Ļò²¹³ä¡£

    Ïà¹ØÎÄÕÂ
    • ¡¾Vue ÈëÃÅ¡¿Ê¹Óà Vue2 ¿ª·¢Ò»¸öչʾÏîÄ¿ÁбíµÄÓ¦Óà - zhangjk

      ¡¾Vue ÈëÃÅ¡¿Ê¹Óà Vue2 ¿ª·¢Ò»¸öչʾÏîÄ¿ÁбíµÄÓ¦Óà - zhangjk

      2017-04-30 16:00

    • ¶ÔÓÚBootstrapµÄ½éÉÜÒÔ¼°ÈçºÎʹÓà - novai-L

      ¶ÔÓÚBootstrapµÄ½éÉÜÒÔ¼°ÈçºÎʹÓà - novai-L

      2017-04-29 09:00

    • ÔÚDelphiÏÂʹÓÃѸÀ×APlayer×é¼þ½øÐÐÃâ×¢²á¿ª·¢ - DelphiÁ¦Á¿

      ÔÚDelphiÏÂʹÓÃѸÀ×APlayer×é¼þ½øÐÐÃâ×¢²á¿ª·¢ - DelphiÁ¦Á¿

      2017-04-28 15:00

    • ̽Ë÷ vuex 2.0 ÒÔ¼°Ê¹Óà vuejs 2.0 + vuex 2.0 ¹¹½¨¼Çʱ¾Ó¦Óà - nzbin

      ̽Ë÷ vuex 2.0 ÒÔ¼°Ê¹Óà vuejs 2.0 + vuex 2.0 ¹¹½¨¼Çʱ¾Ó¦Óà - nzb

      2017-04-25 09:02

    ÍøÓѵãÆÀ
    Ï