Эффекты частиц для кнопок [duplicate]

Краткий ответ: ваш метод foo() возвращается немедленно, а вызов $ajax() выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.

В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo() и сохранить результаты в члене этого объекта после завершения асинхронного вызова.

function foo(result) {
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;   // Store the async result
        }
    });
}

var result = { response: null };   // Object to hold the async result
foo(result);                       // Returns before the async completes

Обратите внимание, что вызов foo() ] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response.

90
задан Nathaniel Ford 31 May 2013 в 23:51
поделиться

8 ответов

Хорошее сравнение компрессоров JavaScript вы должны посмотреть.

84
ответ дан Gumbo 5 September 2018 в 11:14
поделиться

Мне недавно нужно было выполнить ту же задачу. В то время как компрессоры, перечисленные в , JavaScript CompressorRater выполняют отличную работу, и этот инструмент очень полезен, компрессоры не играли хорошо с некоторым кодом jQuery, который я использую (проверки $ .getScript и jQuery.fn). Даже компрессор Google Closure Compressor подавлен в одних и тех же строках. Несмотря на то, что я мог в конце концов сгладить изломы, ему было очень много ловкости, чтобы делать постоянно.

Тот, который, наконец, работал без проблем, был UglifyJS (спасибо @ Aries51 ), и сжатие было лишь немного меньше всех остальных. И, похоже, Google имеет HTTP API. Packer также хорош и имеет реализацию языка в Perl, PHP и .NET.

40
ответ дан Community 5 September 2018 в 11:14
поделиться

Вы можете использовать один из многих доступных javascript-минификаторов.

33
ответ дан Darin Dimitrov 5 September 2018 в 11:14
поделиться

Google только что предоставил компилятор javascript, который может минимизировать ваш код, исключить ветви мертвого кода и больше оптимизаций.

компилятор google javascript

С уважением K

9
ответ дан Khb 5 September 2018 в 11:14
поделиться

Существует также бесплатный Minifier от Microsoft на codeplex. Microsoft Ajax Minifier 1.1: http://ajaxmin.codeplex.com/

С этим легко работать и делает хорошую работу.

Gal

g3]
0
ответ дан Peter Ivan 5 September 2018 в 11:14
поделиться

В настоящее время существует два способа минимизации вашего кода:

  1. вы применяете министры на стороне вашего приложения - здесь преимущество заключается в том, что вы можете применять управление версиями и больше контролировать свой код - вы можете практически полностью автоматизировать процесс минимизации, и наилучшей практикой было бы применить его до того, как ваш код будет загружен на сервер - это лучше всего использовать, когда у вас есть много интерфейсов (для мини-кода). Javascript и код CSS:

http://yui.github.io/yuicompressor/

Многие такие инструменты доступны для узла и npm, а также - это хорошо чтобы автоматизировать mnification Javascript с Grunt.

  1. вы можете использовать некоторые из существующих бесплатных инструментов для минификсации, которые работают в Интернете - это практически позволяет вам делать то же самое, но вручную. Я бы посоветовал вам использовать их, когда количество вашего кода javascript / css меньше - не много файлов

http://www.modify-anything.com/

0
ответ дан peterBlue 5 September 2018 в 11:14
поделиться

Я написал крошечный скрипт, который вызывает API для получения вашего скрипта, проверьте его:

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;
use Fcntl;

my %api = ( css => 'https://cssminifier.com/raw', js => 'https://javascript-minifier.com/raw' );

my $DEBUG = 0;

my @files = @ARGV;

unless ( scalar(@files) ) {
    die("Filename(s) not specified");
}

my $ua = LWP::UserAgent->new;

foreach my $file (@files) {
    unless ( -f $file ) {
        warn "Ooops!! $file not found...skipping";
        next;
    }

    my ($extn) = $file =~ /\.([a-z]+)/;

    unless ( defined($extn) && exists( $api{$extn} ) ) {
        warn "type not supported...$file...skipping...";
        next;
    }

    warn "Extn: $extn, API: " . $api{$extn};

    my $data;

    sysopen( my $fh, $file, O_RDONLY );
    sysread( $fh, $data, -s $file );
    close($fh);

    my $output_filename;

    if ( $file =~ /^([^\/]+)\.([a-z]+)$/ ) {
        $output_filename = "$1.min.$2";
    }

    my $resp = $ua->post( $api{$extn}, { input => $data } );

    if ( $resp->is_success ) {
        my $resp_data = $resp->content;
        print $resp_data if ($DEBUG);
        print "\nOutput: $output_filename";

        sysopen( my $fh, $output_filename, O_CREAT | O_WRONLY | O_TRUNC );
        if ( my $sz_wr = syswrite( $fh, $resp_data ) ) {
            print "\nOuput written $sz_wr bytes\n";
            my $sz_org = -s $file;

            printf( "Size reduction %.02f%%\n\n", ( ( $sz_org - $sz_wr ) / $sz_org ) * 100 );
        }   
        close($fh);
    }
    else {
      warn: "Error: $file : " . $resp->status_line;
    }
}

Использование:

./minifier.pl a.js c.css b.js cc.css t.js j.js [..]
0
ответ дан Pradeep 5 September 2018 в 11:14
поделиться

Наряду с минимизацией вы можете также закодировать base64. Это делает ваш файл намного более сжатым. Я уверен, что вы видели js-файлы, которые обернуты внутри функции eval () с переданными параметрами (p, a, c, k, e, r). Я прочитал его в этой статье Как минимизировать файл Javascript?

3
ответ дан Varg 5 September 2018 в 11:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: