Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оптимизация кода. Правила хорошего тона при написании скриптов
 
 автор: [ANTI]CheateR   (17.09.2010 в 21:07)   письмо автору
 
 

Всем привет! Ребят, помогите оптимизировать код... написал небольшой скрипт - кредитный калькулятор, правда, не до конца... хочу чтоб вы покритиковали код, подсказали, как изящнее решать проблемы итд итп...

скрипт рабочий, кстати))

буду очень признателен за толковые советы...


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Кредитный калькулятор. Разработка</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link type="text/css" href="../../themes/base/jquery.ui.all.css" rel="stylesheet" />
    <script type="text/javascript" src="../../jquery-1.4.2.js"></script>
    <script type="text/javascript" src="../../ui/jquery-ui-1.8.4.custom.min.js"></script>
    <script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
    <script type="text/javascript" src="../../ui/jquery.ui.mouse.js"></script>
    <script type="text/javascript" src="../../ui/jquery.ui.slider.js"></script>
    <link type="text/css" href="../demos.css" rel="stylesheet" />
    <style>
        dl{
            clear:both
        }
    
        dt{
            float:left;
            width:150px
        }
    
        dd input,dd div{
            float:left
        }
        
        .slider{
            width:300px;
            position:relative;
            left:30px;
            top:6px
        }
        
        .slider span{
            position:absolute
        }
        
        p#max{
            font-size:70px
        }
        
    </style>
    
    <script type="text/javascript">
    
    $(function() {
        
        //Слайдеры - объявление и получение значения в инпут
        
        $("#slider0").slider({
            animate:true,
            min: 8000,
            max: 500000,
            value: 20000,
            slide: function(event, ui) {
                $("#income").val(ui.value);
                income = $("input#income").val() * 6;
                paying = (income * insurance * time/(1 + percent/100)).toFixed(2);
                $("p#max").text(paying);
            }
        });
        $("#income").val($("#slider0").slider("value"));
        
        $("#slider1").slider({
            animate:true,
            min: 1,
            max: 60,
            value: 6,
            slide: function(event, ui) {
                $("#time").val(ui.value);
                time = $("input#time").val();
                if($("input#insurance").is(":checked")){
                    if($("input#time").val() <= 12){
                        percent = 17;
                    } else if($("input#time").val() <= 24) {
                        percent = 18;
                    } else {
                        percent = 19;
                    }
                } else {
                    if($("input#time").val() <= 12){
                        percent = 18;
                    } else if($("input#time").val() <= 24) {
                        percent = 19;
                    } else {
                        percent = 20;
                    }
                };
                
                paying = (income * insurance * time/(1 + percent/100)).toFixed(2);
                $("p#max").text(paying+" | "+insurance+" | "+percent);
            }
        });
        $("#time").val($("#slider1").slider("value"));
        
        $("#slider2").slider({
            animate:true,
            range: "min",
            min: 30000,
            max: 1000000,
            value: 30000,
            slide: function(event, ui) {
                $("#sum").val(ui.value);
                
            }
        });
        $("#sum").val($("#slider2").slider("value"));
        
        //Определение переменных при загрузке страницы
        insurance = $("input#insurance").is(":checked") ? (0.6) : (0.5);
        income = $("input#income").val() * 6;
        time = $("input#time").val();
        percent = $("input#insurance").is(":checked") ? 17 : 18;
        paying = (income * insurance * time/(1 + percent/100)).toFixed(2);
        $("#sum").val(paying);
        $("#slider2").slider({value: paying});
        $("p#max").text(paying);
        
        //Слайдеры - изменение положения ползунка при наборе цифр в инпуте
        
        $("dd input").not("#time").keyup(function(){
            $(this).next("div").slider({value: $(this).val()});
            income = $("input#income").val() * 6;
            paying = (income * insurance * time/(1 + percent/100)).toFixed(2);
            $("p#max").text(paying);
        });
        
        //Слайдер срок кредитования - изменение процентной ставки на значение инпута
        
        $("dd input#time").keyup(function(){
            $(this).next("div").slider({value: $(this).val()});
            time = $("input#time").val();
            if($("input#insurance").is(":checked")){
                if($(this).val() <= 12){
                    percent = 17;
                } else if($(this).val() <= 24) {
                    percent = 18;
                } else {
                    percent = 19;
                }
            } else {
                if($(this).val() <= 12){
                    percent = 18;
                } else if($(this).val() <= 24) {
                    percent = 19;
                } else {
                    percent = 20;
                }
            };
            paying = (income * insurance * time/(1 + percent/100)).toFixed(2);
            $("p#max").text(paying+" | "+insurance+" | "+percent);
        });
        
        //Наличие страхования
        $("input#insurance").click(function(){
            insurance = $("input#insurance").is(":checked") ? 0.6 : 0.5;
            paying = (income * insurance * time/(1 + percent/100)).toFixed(2);
            $("p#max").text(paying);
        });
        
    });

    </script>
    
</head>
<body>
    <form id="calculator">
        <dl id="row_income">
            <dt>Ежемесячный доход, руб.</dt>
            <dd>
                <input id="income" type="text"> 
                <div id="slider0" class="slider">
                    <span style="left:-1px;top:-17px">8 000</span>
                    <span style="left:254px;top:-17px">500 000</span>    
                </div>
            </dd>    
        </dl>
        <dl id="row_time">
            <dt>Срок кредитования, мес.</dt>
            <dd>
                <input id="time" type="text"> 
                <div id="slider1" class="slider"></div>
            </dd>    
        </dl>
        <dl id="row_sum">
            <dt>Сумма кредита, руб.</dt>
            <dd>
                <input id="sum" type="text"> 
                <div id="slider2" class="slider"><div class="ui-slider-range ui-slider-range-min ui-widget-header" style="width: 39.6744%; display: block;"></div></div>
            </dd>    
        </dl>
        <dl id="row_insurance">
            <dt>Страхование жизни</dt>
            <dd>
                <input id="insurance" type="checkbox"> 
            </dd>    
        </dl>        
        <br /><br />
        
        
        
        Максимальная сумма кредита: <p id="max"></p>
        
        Ежемесячный платеж <p id="monthly"></p>
        
    </form>
</body>
</html>

  Ответить  
 
 автор: АЯ   (17.09.2010 в 21:55)   письмо автору
 
   для: [ANTI]CheateR   (17.09.2010 в 21:07)
 

Код/скрипт был бы "рабочим", если бы в SRC тегов <SCRIPT> и <LINK> были указаны абсолютные пути.

А так... так Вы выложили бесполезную "фигню".
И, прежде всего, бесполезную для себя.
Ибо нужных Вам откликов не дождётесь.

  Ответить  
 
 автор: [ANTI]CheateR   (24.09.2010 в 14:39)   письмо автору
 
   для: АЯ   (17.09.2010 в 21:55)
 

не соглашусь с вами...

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

можно и по этому коду подсказать некоторые моменты, которые можно было сделать иначе... лучше... на другом форуме ответили по делу...

но вот читаю ваши ответы в других темах... вы - молодец))

  Ответить  
 
 автор: АЯ   (24.09.2010 в 15:36)   письмо автору
 
   для: [ANTI]CheateR   (24.09.2010 в 14:39)
 

>"нужно лишь подключить необходимые библиотеки"

Как говорится, кому нужно будет, тот и подключит.
Полагаете, мне (или кому-то ещё) - это нужно?

У меня на компе НЕТ ни самой JQuery, и, соответственно, ни единого плагина, который на этой библиотеке "завязан". Не пользую я эти "костыли".
Ну и?

1. Посоветуете мне сходить в яндекс/гугль, найти там ссылку на соответствующую версию JQuery и скачать её?
2. А затем посоветуете мне (и ВСЕМ прочим) опять сходить в яндекс/гугль и поискать там используемый Вам плагин и скачать его?
3. Затем посоветуете мне (и ВСЕМ прочим) переписать пути в SRC скриптов в выложенном Вами коде?

Не до хрена ли "советов", Вам не кажется? :-)

До хрена... потому ответов Вы и не дождались.
Сделали бы Вы всё это САМИ, обязательно получили бы советы/рекомендации...
А так... ищите Форумы, где собираются те, у кого есть очень много свободного времени...

  Ответить  
 
 автор: [ANTI]CheateR   (24.09.2010 в 15:48)   письмо автору
 
   для: АЯ   (24.09.2010 в 15:36)
 

неееет, вы не поняли меня...

разумеется, если б я хотел, чтоб вы посмотрели этот код в действии я прикрепил бы архив со всеми нужными файлами...

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

для этого ведь достаточного самого исходника?

p.s. вообще, этот код уже переписан - калькулятор работает)) вот только кажется мне, что его можно оптимизировать... эээм, может посмотрите? ))

я думаю, вам будет, что сказать))

http://www.kred-bank.ru/services/private/credit_calc/

  Ответить  
 
 автор: АЯ   (24.09.2010 в 16:53)   письмо автору
 
   для: [ANTI]CheateR   (24.09.2010 в 15:48)
 

Пока могу сказать лишь одно - считает Ваш калькулятор неправильно :-)

Простейший пример - кредит на 120 000 рублей на срок 12 месяцев при 18%% годовых
Ежемесячный платёж составляет 11 002 рубля. Знаю точно, ибо сейчас сам выплачиваю.

Ваш же калькулятор при тех же заявленных условиях выдаёт сумму 11 800 руб в месяц, сиречь обманывает заёмщика на 792 рубля в месяц и, соответственно, на 9 с половиной тысяч в год..

  Ответить  
 
 автор: [ANTI]CheateR   (24.09.2010 в 17:19)   письмо автору
 
   для: АЯ   (24.09.2010 в 16:53)
 

хм, там подсчет идет такой...

120 000 + 120 000*0,18 = итоговая сумма к возврату... ну и на кол-во месяцев делится...

на самом деле не так? не подскажете как?

  Ответить  
 
 автор: АЯ   (24.09.2010 в 18:08)   письмо автору
 
   для: [ANTI]CheateR   (24.09.2010 в 17:19)
 

Хмм...
А что, в банке не с кем посоветоваться? :-)

Кредит в сумме 120 000 руб. я взял на 12 месяцев и, положим, обещался вернуть его равными долями ежемесячно, т.е. по 10 тысяч руб в месяц.
Иными словами, я взял у банка:
10 000 руб. - на  1 мес. и должен за их использование 10 000 * 0.18 / 12 *  1 =   150 руб.
10 000 руб. - на  2 мес. и должен за их использование 10 000 * 0.18 / 12 *  2 =   300 руб.
10 000 руб. - на  3 мес. и должен за их использование 10 000 * 0.18 / 12 *  3 =   450 руб.
...
10 000 руб. - на 10 мес. и должен за их использование 10 000 * 0.18 / 12 * 10 = 1 500 руб.
10 000 руб. - на 11 мес. и должен за их использование 10 000 * 0.18 / 12 * 11 = 1 650 руб.
10 000 руб. - на 12 мес. и должен за их использование 10 000 * 0.18 / 12 * 12 = 1 800 руб.
Будет абсолютно честно, если я так и буду отдавать - 10 150 руб. за первый месяц, 10 300 руб. - за второй ... 11 800 руб. за последний, 12-й месяц - в итоге за 12 мес. я отдам ВЕСЬ кредит 120 000 рублей и ВСЕ проценты в сумме 11 700 рублей.
Но банки пытаются здесь дополнительно заработать и предлагают так называемые "убывающие платежи", когда в первом месяце я отдаю проценты за последний платёж, во втором - за предпоследний и т.д. Сумма процентов та же - 11 700 рублей, но, возвращая их "задом наперёд", я чуть-чуть кредитую банк.

Реально же плачу я ежемесячно "часть кредита"+"проценты за оставшийся долг" РАВНЫМИ СУММАМИ (так называемые "аннуитетные платежи", кои в основном и предлагают наши банки). Остаток моего долга каждый месяц немного больше (чем расписано выше) и, соответственно, оплата за пользование вырастает до суммы 12 024 рубля, что и составит 11 002 рубля вместе с возвратом части кредита ежемесячно.

Формулу для расчёта аннуитетного платежа можно довольно легко вывести. Вернее, она давно выведена - поищите в сети.

-----
Ваш же расчёт годен для случая, когда я взял деньги у банка на целый год и вернул их один раз, через год, со всеми процентами СРАЗУ, единым платежом
120 000 рублей - на 12 мес. и должен за их использование 120 000 * 0.18 = 21 600 рублей
Но банки у нас деньги так в кредит не дают.
Так дают ссуды.
И не банки.
И не под такую процентную ставку.

  Ответить  
 
 автор: [ANTI]CheateR   (27.09.2010 в 16:26)   письмо автору
 
   для: АЯ   (24.09.2010 в 18:08)
 

мде, не сталкивался в жизни с кредитами...

отредактировал немного код... http://www.kred-bank.ru/services/private/credit_calc/

жду, что скажут в банке...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования