Недавно я завершил сложный сайт AJAX с помощью CodeIgniter и многому научился в процессе. Вот некоторые вещи, которые я узнал (читай: ошибки, которые я сделал):
Не возвращайте html-страницы и json одним и тем же методом.
Сначала казалось хорошей идеей иметь такую настройку:
/контроллер/метод/формат
где формат по умолчанию был «html». Идея заключалась в том, чтобы что-то вроде /object/view отображало html-страницу для этого объекта, а что-то вроде /object/view/json возвращало данные json для этого объекта.
На практике это делает вещи очень грязными. В конечном итоге вы смешиваете множество различных функций в одном методе, что делает код намного сложнее. Ик.
Вместо этого сейчас я добавляю подпапку «api» в application/controllers. Контроллеры в этой подпапке возвращают только данные json. Это намного чище.
Не переделывайте свои шаблоны в javascript
Существует два подхода при получении данных с помощью вызова AJAX. Вы можете вернуть какие-то закодированные данные (JSON, XML) и вставить их в нужное место на странице. Или вы можете отобразить кусок html, а затем вставить его куда-нибудь в div.
Если вы идете по пути данных, старайтесь придерживаться очень простой структуры разметки, например, диапазона или простого неупорядоченного списка. В моем случае у меня была определенная часть навигации, которая возвращалась с сервера в виде массива ссылок в кодировке JSON.
Затем мой javascript выдал бы их в правильной структуре для меню. Когда меню усложнилось, мой сценарий включил эту сложность. Теперь разметка для этого меню дублируется в шаблонах CI, а также в javascript.
В этом случае было бы лучше, если бы сервер возвращал фрагмент html, содержащий разметку меню, вместо того, чтобы пытаться построить его из данных на клиенте.
Используйте AJAX экономно/осторожно/только по мере необходимости
Вы можете сэкономить некоторые ресурсы сервера, разумно используя запросы AJAX. Однако, если вы увлечетесь (*coughlikemecough*), вы быстро можете запустить несколько AJAX-запросов на одно действие пользователя. Как правило, это хуже с точки зрения производительности, поскольку каждый запрос имеет свою долю накладных расходов, и эти накладные расходы сводят на нет выгоду от запроса только необходимых ресурсов.
Если вы обнаружите, что щелчок по элементу интерфейса запускает более одного запроса AJAX, это красный флаг, чтобы серьезно подумать о том, что происходит. Вы можете создавать сложности без пользы.
Кодировка JSON удобна
Вы можете использовать json_encode() для результатов запроса к базе данных, и он будет генерировать действительно хорошие объекты, с которыми вы сможете работать в своем скрипте. Синтаксис чист и хорошо работает с результатами, которые возвращают функции базы данных CodeIgniter.
Надеюсь, вы найдете что-то из этого полезным. Всегда лучше, когда вы можете учиться на чужих чужих ошибках! :)
person
GloryFish
schedule
04.06.2009