web2py を 2.3.2 から 2.14.6 にアップグレードしました。次に、、、、、、の更新/交換web2py.js
などjquery.js
、必要なすべての変更を行いましweb2py_ajax.html
た。次に、古い UI に合わせて CSS をいくつか変更しました。バックエンド コードに変更はありません。appadmin.py
appadmin.html
SQLFORM.grid()
web2py 2.14.6 で web2py grid()を含むアプリケーション ページにアクセスすると、 34.775 秒かかり、同じレコード数のバージョン 2.3.2 の同じページでは0.686 秒かかります。グリッドには約 4600 のレコードがあります。グリッドのないページは、両方のバージョンで読み込みにほぼ同じ時間がかかりました。
時間プロファイリングを行ったところ、gluon/html.py
ほとんどの時間がかかっていることがわかりました。
タイムプロファイリングの結果
2.3.2 : https://paste.ubuntu.com/23602259/
2.14.6 : https://paste.ubuntu.com/23602261/
また、グリッド定義の前後に print ステートメントを追加しました。2.14.6 では 18 秒、2.3.2 では 10ミリ秒かかりました。
SQLFORM.grid()
定義は次のようになります。
grid = SQLFORM.grid(query,
create=True,
csv=False, deletable=False, searchable=search_query,
showbuttontext=False, links=links, links_placement='left',
maxtextlengths=textlengths, upload=URL('download'),
fields=[db.notice.UIN, db.notice.classname, db.notice.title,
db.notice.type,
db.notice.description,
db.notice.due_date, db.notice.status,
db.notice.risk, db.notice.consequence,
db.notice.document,
db.notice.other])
上記のグリッドのサンプルクエリ-
((((user_notice.notice = notice.id) AND (user_notice.auth_user = 19)) AND
(notice.status IN ('Closed','Open','New'))) AND
(notice.due_date IS NOT NULL))
これをローカルコンピューターでテストしました-Ubuntu 14.04、Python 2.7.6、およびmysql db。
新しいバージョンではグリッドのロードに時間がかかるのはなぜですか? アップグレード後にアプリケーション コードに必要な変更はありますか?
この問題を解決するために私を助けてください。
ありがとうございました